哔哩哔哩粉丝业务中的空间点赞,是用户对UP主内容表示喜爱的一种互动方式。通过点赞,用户可以表达对视频、动态等的支持,同时也能增加UP主的影响力和粉丝活跃度。点赞数的多少,往往反映了内容的受欢迎程度。
哔哩哔哩粉丝业务 - 空间点赞
一、概述
在哔哩哔哩(B站)的生态系统中,用户与UP主之间的互动是社区活力的重要体现,空间点赞作为一项关键的用户行为,不仅反映了观众对UP主内容的喜爱与支持,还直接影响到UP主的曝光度、影响力以及后续的商业合作机会,深入理解并优化B站的空间点赞机制,对于提升用户体验、促进平台生态健康发展具有重要意义。
二、系统架构与实现细节
1. 数据存储层
第一层:DB层(TiDB)
点赞记录表(likes):详细记录每一次用户的点赞行为,包括用户ID(userMid)、被点赞的实体ID(messageID)、点赞来源及时间戳等关键信息,并在userMid和messageID两个维度上建立联合索引,以加速查询效率。
点赞计数表(counts):以业务ID(BusinessID)和实体ID(messageID)为主键,聚合记录每个实体的累计点赞数和点踩数,同时在messageID维度上建立索引,便于快速查询。
第二层:缓存层(Redis)
点赞数缓存:采用CacheAside模式,将点赞数和点踩数以键值对形式存储于Redis中,键为“count:patten:{business_id}:{message_id}”,值为点赞数和点踩数的组合,用于快速响应用户查询请求,减少数据库访问压力。
用户点赞列表缓存:同样基于Redis实现,键为“user:likes:patten:{mid}:{business_id}”,值为ZSet结构,成员是被点赞的实体ID,分数为点赞的时间戳,便于快速检索用户的点赞历史。
第三层:本地缓存
- 针对热点数据,利用最小堆算法识别并缓存至本地内存,设置合理的TTL(Time to Live),进一步减轻远程存储压力,提升访问速度。
2. 点赞服务层(thumbup-service)
作为面向C端流量的直接接口,负责处理用户的点赞、取消点赞请求,以及提供点赞状态查询、点赞数查询等服务,通过RPC接口与后端通信,确保服务的高效与稳定。
3. 异步任务层(thumbup-job)
负责处理点赞数据的异步写入与更新,包括:
- 聚合写入:将短时间内的多次点赞操作合并为一次批量写入,减少数据库I/O次数。
- 异步化处理:确保数据库能以合理速率处理写入请求,避免因高并发导致的系统瓶颈。
- 缓存同步:维护Redis缓存与数据库之间的数据一致性,确保用户查询到的点赞数实时准确。
4. 容灾设计
双机房部署:点赞服务在两个机房之间进行灾备,正常情况下一个机房承载所有写流量与部分读流量,另一个机房承载剩余读流量,当任一机房发生故障时,通过db-proxy自动切换流量至备份机房,确保服务不中断。
缓存集群:Redis缓存也部署在两个机房内,通过异步任务消费TiDB的binlog日志来维护两地缓存的一致性,在需要时可快速切换机房,避免大量冷数据回源数据库。
三、FAQs
Q1: 为什么点赞后按钮状态没有立即变化?
A1: 为了提升系统性能和用户体验,B站采用了异步处理机制来处理点赞操作,当你点赞后,虽然前端会立即显示一个动态效果来确认你的操作,但实际的点赞状态更新可能需要几秒钟的时间才能同步到数据库和缓存中,如果你在短时间内刷新页面或重新进入视频详情页,可能会发现点赞按钮的状态没有立即改变,请耐心等待片刻后再尝试查看最新的点赞状态。
Q2: 如何查看我自己的点赞历史?
A2: 在B站的个人中心或相关设置页面中,通常可以找到“我的点赞”或类似的选项,点击进入后,你可以看到你所有的点赞记录,包括点赞的视频、动态、评论等内容,这些记录会按照时间顺序排列,方便你回顾和管理自己的点赞历史。