2026/2/21 10:22:07
网站建设
项目流程
python爬数据做网站,注册了一个域名怎么做网站,杭州职工业能力建设网站,广西壮族自治区皮肤病医院要设计今日头条与抖音的千亿级点赞系统#xff0c;需解决高并发、低延迟、数据一致性、海量存储四大核心挑战。结合字节跳动#xff08;两者母公司#xff09;的实践及行业通用方案#xff0c;系统设计需从分层架构、数据结构、异步处理、热点应对、容灾备份等多维度展开需解决高并发、低延迟、数据一致性、海量存储四大核心挑战。结合字节跳动两者母公司的实践及行业通用方案系统设计需从分层架构、数据结构、异步处理、热点应对、容灾备份等多维度展开以下是具体实现细节一、系统架构分层解耦支撑高并发点赞系统的核心架构采用“客户端-网关-服务-缓存-数据库”分层设计各层职责明确确保高并发下的稳定性客户端层采用请求合并如1秒内多次点赞合并为1次请求与防抖机制避免用户快速点击导致的重复请求减少客户端对服务端的压力。前端展示乐观更新点赞后立即显示“已赞”无需等待服务端响应提升用户体验。API网关层作为系统入口承担限流如限制单个用户1分钟内的点赞次数、熔断当下游服务故障时快速返回错误避免雪崩、鉴权验证用户身份防止黑灰产刷赞等功能。采用智能路由如根据用户地理位置路由至最近的机房降低延迟。点赞服务层作为核心业务逻辑层负责处理点赞/取消点赞的业务校验如是否已点赞、是否超过每日上限、数据操作更新缓存与发送异步消息。采用微服务架构如Spring Cloud支持水平扩展应对高并发请求。缓存层使用Redis集群支持分片与主从复制存储实时点赞数据如点赞计数、用户点赞关系解决数据库高并发读写瓶颈。缓存策略热点数据本地缓存对突发热点如周杰伦发新歌采用Caffeine本地缓存框架缓存热点数据减少Redis访问压力。多级缓存结合Redis与本地缓存确保热点数据的高可用。数据库层使用分布式数据库如TiDB、CockroachDB支持水平扩展通过分片存储解决海量数据存储问题。数据库采用主从复制如MySQL主从实现高可用确保数据不丢失。二、数据结构高效存储支撑海量数据点赞系统的核心数据需存储用户点赞关系谁点了谁、点赞计数总点赞数、点赞列表用户点赞的内容需选择合适的Redis数据结构提升操作效率用户点赞关系防重复点赞使用Redis HashKey为like:{entityType}:{entityId}如like:post:123表示帖子123的点赞关系Field为用户ID如1001Value为时间戳如1620000000。优势Hash结构的SADD添加元素与SISMEMBER判断元素是否存在操作均为O(1)时间复杂度适合快速校验是否已点赞。点赞计数实时展示使用Redis StringKey为like_count:{entityType}:{entityId}如like_count:post:123Value为点赞总数如100000。优势String的INCR自增与DECR自减操作均为原子操作适合高并发下的计数更新。点赞列表用户维度的点赞内容使用Redis ZSet有序集合Key为user_like:{userId}如user_like:1001Score为时间戳如1620000000Value为{entityType}:{entityId}如post:123。优势ZSet的ZADD添加元素与ZRANGE按时间排序获取元素操作均为O(logN)时间复杂度适合快速获取用户点赞的内容按时间排序。三、异步处理解耦业务提升吞吐量为解决高并发下的数据库写入压力点赞操作采用异步处理写缓存发消息异步持久化写缓存当用户点赞时先更新Redis中的用户点赞关系Hash添加元素、点赞计数String自增、用户点赞列表ZSet添加元素。优势Redis的内存操作延迟低毫秒级能快速响应用户请求。发消息通过消息队列如Kafka、RocketMQ发送点赞事件包含用户ID、实体类型、实体ID、时间戳实现业务解耦点赞服务无需等待数据库持久化完成。消息格式示例{ userId: 1001, entityType: post, entityId: 123, timestamp: 1620000000 }异步持久化持久化服务如Spring Boot应用消费消息队列中的点赞事件将数据写入分布式数据库如TiDB。优化策略批量写入将多条点赞事件合并为1次数据库写入如每100条事件写入1次减少数据库IO次数。异步提交使用数据库的异步提交如MySQL的innodb_flush_log_at_trx_commit2提升写入性能牺牲少量数据一致性换取高吞吐量。四、热点应对防止雪崩保障稳定性针对热点内容如爆款视频、热门文章的突发流量需采用热点探测与本地缓存策略热点探测使用实时监控工具如PrometheusGrafana监控Redis中各Key的访问频率如每分钟访问次数。当某Key的访问频率超过阈值如10万次/分钟判定为热点Key如like:post:123。本地缓存对热点Key采用Caffeine本地缓存框架缓存其点赞计数与用户点赞关系如前1000个点赞用户。缓存更新策略定时同步每10秒从Redis同步1次热点数据确保本地缓存与Redis一致。事件触发当Redis中的热点数据更新时发送事件通知如Redis Pub/Sub触发本地缓存更新。分片策略对热点Key采用Redis Cluster的分片策略如基于实体ID的哈希分片将热点Key分散到多个Redis节点避免单点压力过大。五、数据一致性最终一致保障准确性点赞系统的数据一致性采用最终一致性模型Redis为实时数据数据库为持久化数据通过以下策略保障缓存与数据库的一致性写操作先更新Redis再发消息到队列确保Redis的实时性。读操作优先读Redis实时数据若Redis中无数据再读数据库并更新Redis避免缓存穿透。异常处理若消息队列消费失败如数据库宕机采用重试机制如Kafka的retry.topic确保数据最终写入数据库。分布式事务对强一致性场景如电商订单的点赞奖励采用分布式事务框架如Seata实现Redis与数据库的原子操作如点赞成功后同时更新Redis计数与数据库奖励积分。六、容灾备份高可用防数据丢失为保障系统在机房故障、数据库宕机等极端情况下的可用性需采用以下容灾策略多机房部署将点赞服务、Redis集群、数据库部署在多个机房如北京、上海、广州采用异地多活架构如字节跳动的“单元化架构”。当某机房故障时流量自动切换至其他机房确保服务可用。数据备份Redis备份采用RDB快照备份与AOF日志备份定期备份Redis数据如每小时1次RDB备份每分钟1次AOF备份。数据库备份采用全量备份如每天1次与增量备份如每小时1次并将备份数据存储至对象存储如阿里云OSS、字节跳动火山引擎对象存储。降级策略当Redis故障时采用数据库直连跳过Redis直接读写数据库牺牲性能保障可用性。当数据库故障时采用缓存降级如显示“点赞数加载中”避免服务完全不可用。七、防刷与安全保障公平性为防止黑灰产刷赞如机器人自动点赞、批量账号点赞需采用以下安全策略用户行为分析使用机器学习模型如TensorFlow分析用户点赞行为如点赞频率、点赞内容的关联性识别异常行为如1分钟内点赞100次。对异常用户采用限流如限制其1天内的点赞次数或封禁如永久封禁账号。验证码与滑块验证对高频点赞用户如1小时内点赞超过50次要求输入验证码或滑块验证确认是真实用户操作。设备指纹采集用户设备的唯一标识如IMEI、MAC地址识别批量设备如同一台设备登录多个账号防止刷赞。总结千亿级点赞系统的核心逻辑今日头条与抖音的千亿级点赞系统本质是“高并发下的实时性与一致性平衡”实时性通过Redis缓存与本地缓存实现毫秒级响应。一致性通过异步处理与最终一致性模型确保数据不丢失。稳定性通过热点应对与容灾备份保障高并发下的可用性。安全性通过防刷策略保障点赞的公平性。这种设计不仅能支撑千亿级点赞数据还能应对突发热点如爆款视频是字节跳动今日头条与抖音母公司在海量数据场景下的实践总结。