今日头条和抖音的千亿级点赞系统如何设计,请具体一点描述?

要设计今日头条与抖音的千亿级点赞系统,需解决高并发、低延迟、数据一致性、海量存储四大核心挑战。结合字节跳动(两者母公司)的实践及行业通用方案,系统设计需从分层架构、数据结构、异步处理、热点应对、容灾备份等多维度展开,以下是具体实现细节:

一、系统架构:分层解耦,支撑高并发

点赞系统的核心架构采用“客户端-网关-服务-缓存-数据库”分层设计,各层职责明确,确保高并发下的稳定性:

  1. 客户端层

    • 采用请求合并(如1秒内多次点赞合并为1次请求)与防抖机制(避免用户快速点击导致的重复请求),减少客户端对服务端的压力。

    • 前端展示乐观更新(点赞后立即显示“已赞”,无需等待服务端响应),提升用户体验。

  2. API网关层

    • 作为系统入口,承担限流(如限制单个用户1分钟内的点赞次数)、熔断(当下游服务故障时,快速返回错误,避免雪崩)、鉴权(验证用户身份,防止黑灰产刷赞)等功能。

    • 采用智能路由(如根据用户地理位置路由至最近的机房),降低延迟。

  3. 点赞服务层

    • 作为核心业务逻辑层,负责处理点赞/取消点赞的业务校验(如是否已点赞、是否超过每日上限)、数据操作(更新缓存与发送异步消息)。

    • 采用微服务架构(如Spring Cloud),支持水平扩展,应对高并发请求。

  4. 缓存层

    • 使用Redis集群(支持分片与主从复制),存储实时点赞数据(如点赞计数、用户点赞关系),解决数据库高并发读写瓶颈。

    • 缓存策略:

      • 热点数据本地缓存:对突发热点(如周杰伦发新歌),采用Caffeine(本地缓存框架)缓存热点数据,减少Redis访问压力。

      • 多级缓存:结合Redis与本地缓存,确保热点数据的高可用。

  5. 数据库层

    • 使用分布式数据库(如TiDB、CockroachDB),支持水平扩展(通过分片存储),解决海量数据存储问题。

    • 数据库采用主从复制(如MySQL主从),实现高可用,确保数据不丢失。

二、数据结构:高效存储,支撑海量数据

点赞系统的核心数据需存储用户点赞关系(谁点了谁)、点赞计数(总点赞数)、点赞列表(用户点赞的内容),需选择合适的Redis数据结构,提升操作效率:

  1. 用户点赞关系(防重复点赞)

    • 使用Redis Hash:Key为like:{entityType}:{entityId}(如like:post:123,表示帖子123的点赞关系),Field为用户ID(如1001),Value为时间戳(如1620000000)。

    • 优势:Hash结构的SADD(添加元素)与SISMEMBER(判断元素是否存在)操作均为O(1)时间复杂度,适合快速校验是否已点赞。

  2. 点赞计数(实时展示)

    • 使用Redis String:Key为like_count:{entityType}:{entityId}(如like_count:post:123),Value为点赞总数(如100000)。

    • 优势:String的INCR(自增)与DECR(自减)操作均为原子操作,适合高并发下的计数更新。

  3. 点赞列表(用户维度的点赞内容)

    • 使用Redis ZSet(有序集合):Key为user_like:{userId}(如user_like:1001),Score为时间戳(如1620000000),Value为{entityType}:{entityId}(如post:123)。

    • 优势:ZSet的ZADD(添加元素)与ZRANGE(按时间排序获取元素)操作均为O(logN)时间复杂度,适合快速获取用户点赞的内容(按时间排序)。

三、异步处理:解耦业务,提升吞吐量

为解决高并发下的数据库写入压力,点赞操作采用异步处理(写缓存+发消息+异步持久化):

  1. 写缓存

    • 当用户点赞时,先更新Redis中的用户点赞关系(Hash添加元素)、点赞计数(String自增)、用户点赞列表(ZSet添加元素)。

    • 优势:Redis的内存操作延迟低(毫秒级),能快速响应用户请求。

  2. 发消息

    • 通过消息队列(如Kafka、RocketMQ)发送点赞事件(包含用户ID、实体类型、实体ID、时间戳),实现业务解耦(点赞服务无需等待数据库持久化完成)。

    • 消息格式示例:

      { "userId": 1001, "entityType": "post", "entityId": 123, "timestamp": 1620000000 }
  3. 异步持久化

    • 持久化服务(如Spring Boot应用)消费消息队列中的点赞事件,将数据写入分布式数据库(如TiDB)。

    • 优化策略:

      • 批量写入:将多条点赞事件合并为1次数据库写入(如每100条事件写入1次),减少数据库IO次数。

      • 异步提交:使用数据库的异步提交(如MySQL的innodb_flush_log_at_trx_commit=2),提升写入性能(牺牲少量数据一致性,换取高吞吐量)。

四、热点应对:防止雪崩,保障稳定性

针对热点内容(如爆款视频、热门文章)的突发流量,需采用热点探测本地缓存策略:

  1. 热点探测

    • 使用实时监控工具(如Prometheus+Grafana),监控Redis中各Key的访问频率(如每分钟访问次数)。

    • 当某Key的访问频率超过阈值(如10万次/分钟),判定为热点Key(如like:post:123)。

  2. 本地缓存

    • 对热点Key,采用Caffeine(本地缓存框架)缓存其点赞计数用户点赞关系(如前1000个点赞用户)。

    • 缓存更新策略:

      • 定时同步:每10秒从Redis同步1次热点数据,确保本地缓存与Redis一致。

      • 事件触发:当Redis中的热点数据更新时,发送事件通知(如Redis Pub/Sub),触发本地缓存更新。

  3. 分片策略

    • 对热点Key,采用Redis Cluster分片策略(如基于实体ID的哈希分片),将热点Key分散到多个Redis节点,避免单点压力过大。

五、数据一致性:最终一致,保障准确性

点赞系统的数据一致性采用最终一致性模型(Redis为实时数据,数据库为持久化数据),通过以下策略保障:

  1. 缓存与数据库的一致性

    • 写操作:先更新Redis,再发消息到队列(确保Redis的实时性)。

    • 读操作:优先读Redis(实时数据),若Redis中无数据,再读数据库(并更新Redis,避免缓存穿透)。

    • 异常处理:若消息队列消费失败(如数据库宕机),采用重试机制(如Kafka的retry.topic),确保数据最终写入数据库。

  2. 分布式事务

    • 强一致性场景(如电商订单的点赞奖励),采用分布式事务框架(如Seata),实现Redis与数据库的原子操作(如点赞成功后,同时更新Redis计数与数据库奖励积分)。

六、容灾备份:高可用,防数据丢失

为保障系统在机房故障数据库宕机等极端情况下的可用性,需采用以下容灾策略:

  1. 多机房部署

    • 将点赞服务、Redis集群、数据库部署在多个机房(如北京、上海、广州),采用异地多活架构(如字节跳动的“单元化架构”)。

    • 当某机房故障时,流量自动切换至其他机房,确保服务可用。

  2. 数据备份

    • Redis备份:采用RDB(快照备份)与AOF(日志备份),定期备份Redis数据(如每小时1次RDB备份,每分钟1次AOF备份)。

    • 数据库备份:采用全量备份(如每天1次)与增量备份(如每小时1次),并将备份数据存储至对象存储(如阿里云OSS、字节跳动火山引擎对象存储)。

  3. 降级策略

    • 当Redis故障时,采用数据库直连(跳过Redis),直接读写数据库(牺牲性能,保障可用性)。

    • 当数据库故障时,采用缓存降级(如显示“点赞数加载中”),避免服务完全不可用。

七、防刷与安全:保障公平性

为防止黑灰产刷赞(如机器人自动点赞、批量账号点赞),需采用以下安全策略:

  1. 用户行为分析

    • 使用机器学习模型(如TensorFlow),分析用户点赞行为(如点赞频率、点赞内容的关联性),识别异常行为(如1分钟内点赞100次)。

    • 对异常用户,采用限流(如限制其1天内的点赞次数)或封禁(如永久封禁账号)。

  2. 验证码与滑块验证

    • 高频点赞用户(如1小时内点赞超过50次),要求输入验证码滑块验证,确认是真实用户操作。

  3. 设备指纹

    • 采集用户设备的唯一标识(如IMEI、MAC地址),识别批量设备(如同一台设备登录多个账号),防止刷赞。

总结:千亿级点赞系统的核心逻辑

今日头条与抖音的千亿级点赞系统,本质是“高并发下的实时性与一致性平衡”

  • 实时性:通过Redis缓存与本地缓存,实现毫秒级响应。

  • 一致性:通过异步处理与最终一致性模型,确保数据不丢失。

  • 稳定性:通过热点应对与容灾备份,保障高并发下的可用性。

  • 安全性:通过防刷策略,保障点赞的公平性。

这种设计不仅能支撑千亿级点赞数据,还能应对突发热点(如爆款视频),是字节跳动(今日头条与抖音母公司)在海量数据场景下的实践总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计案例】通过python-CNN卷积神经网络_pytorch框架对猫的类别识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【毕业设计】基于python-CNN深度学习的食物识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

多策略旗鱼优化算法实战应用【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅成品或者定制,扫描文章底部微信二维码。(1) 融合混沌映射与反向学习的旗鱼优化算法改进策略旗鱼优化算法在初始化阶段采用随机…

大数据架构设计原则:高可用、可扩展、低成本

好的,请看这篇为你撰写的技术博客文章。大数据架构设计核心三原则:高可用、可扩展与低成本的平衡艺术 副标题: 从理论到实践,构建健壮、高效且经济的大数据平台 摘要/引言 在大数据时代,数据已成为企业的核心资产。然而…

【大模型训练】Efficient MoE Pre-training at Scale on 1K AMD GPUs with TorchTitan

https://pytorch.org/blog/efficient-moe-pre-training-at-scale-with-torchtitan/ 高效训练像 DeepSeek-V3 和 Llama 4-Scout 这样的大规模混合专家模型(MoE)是现代人工智能面临的挑战之一。这些模型将 GPU、网络和编译器的性能推向了极限。为了应对这…

深度学习毕设选题推荐:通过python-CNN卷积神经网络_pytorch框架对猫的类别识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【CAA】理解特征扩展

摘要 本文详细介绍了将一个特征(称为基础特征)通过另一个特征(称为扩展特征)进行扩展的机制。 概念 一张解释概念的图片:图.1 概念基础特征可以是任何类型的特征,例如可以由达索系统应用程序设计。您可以通…

【毕业设计】基于python-CNN深度学习卷积神经网络会飞的昆虫识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

群智能优化电力系统无功优化【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅成品或者定制,扫描文章底部微信二维码。(1) 基于拟仿射变换的人工蜂群算法改进策略人工蜂群算法在位置更新过程中采用单维度扰…

解锁谷歌云AI能力:2026年最新API申请步骤详解

说真的,现在做开发或者搞项目,谁不想用上谷歌云那些厉害的AI服务,比如Vertex AI或者Gemini模型?但一说到申请,好多人都头大。最烦人的就是两个事儿:一是得用国际信用卡,像Visa、MasterCard这种&…

一文掌握 Agent 智能体:技术突破、标杆案例与千行百业落地逻辑

当你对着电脑说“整理本月销售数据并生成分析报表”,无需手动操作任何软件,系统就自动完成数据采集、筛选、分析和排版;当企业供应链出现波动,智能系统自主调整采购计划、协调物流资源并同步给各部门——这些曾经出现在科幻电影里…

谷歌云AI账号开通与API启用全攻略(2026版)

想用谷歌云上面的AI服务,比如Vertex AI,来搞点项目开发?确实,它功能强,资源也多。但说实话,现在都2026年了,你要是直接走官方流程去注册开通,特别是想调用API的话,经常会…

[嵌入式系统-162]:尽快消除现场问题与解决现场bug,这是两种不同的思维模式

“消除现场问题”与“解决现场bug”确实是两种不同的思维模式,尽管它们都发生在生产或运行环境中,但背后的逻辑、目标和处理方式存在显著差异。我们可以从以下几个维度来深入理解这两种思维模式的区别:一、定义上的区别解决现场bug&#xff0…

深度学习毕设选题推荐:基于python卷积神经网络CNN的不同瓶子识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

干货满满!一文看透流程自动化工具:RPA 定义、技术支撑、产品价值与趋势预判

在数字化浪潮席卷全球的今天,企业和组织每天都要处理海量重复性、规则化的工作任务——财务人员逐笔核对发票、行政人员反复录入数据、客服人员机械回复常见咨询……这些工作耗时费力,还容易因人为疏忽出错。而流程自动化工具的出现,正像一场…

全网最全继续教育一键生成论文工具TOP10:深度测评与推荐

全网最全继续教育一键生成论文工具TOP10:深度测评与推荐 2026年继续教育论文写作工具测评:为何需要这份权威榜单? 随着继续教育需求的持续增长,越来越多的学习者面临论文撰写的压力。从选题构思到资料搜集,再到内容撰…

无线数据通信技术【1.0】

第 1 章 绪 论随着科学技术的发展,从传统的电报、电话到今天的卫星通信、移动通信与计算机互联网,通信已经和我们的日常生活紧密地结合在一起了,并已深入到了社会的每一个角落,进入了千家万户,每个人都从通信中得到了服…

计算机深度学习毕设实战-基于python卷积神经网络CNN的不同瓶子识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

计算向量x的功率谱密度

计算向量x的功率谱密度(Power Spectral Density, PSD),结合信号处理的基本原理与MATLAB工具实现。 一、核心结论 向量x的功率谱密度(PSD)描述了信号功率在频率域的分布特性。MATLAB中主要通过Welch法(加窗平…

深度测评MBA必备一键生成论文工具TOP8:开题报告文献综述全攻略

深度测评MBA必备一键生成论文工具TOP8:开题报告文献综述全攻略 2026年MBA论文写作工具测评:为何需要这份深度榜单 随着MBA课程的深入,论文撰写成为每位学生必须面对的重要任务。从开题报告到文献综述,再到最终的论文成稿&#xff…