架构实战营模块二作业
分析微信朋友圈的高性能复杂度
朋友圈复杂度总体分析
朋友圈高可用复杂度分析
业务场景 1 - 发动态
发布的数据包括文字、视频、图片等信息。视频、图片考虑发布在 CDN。
存储用集群,但是数据一致性要求不高,可以采用异步或者半同步方案以提高效率。
每个用户维护自己一个朋友圈动态的 timeline。当一个用户发一个动态时,把相关动态的一些关键信息插入到他所有朋友的 timeline 中。timeline 使用 Redis List 保存,这样就不需要在多个朋友发动态时加锁。
业务场景 2 - 读动态
用户从自己的 Redis List 读取 timeline 中未读的动态关键信息,再从服务器或者 CDN 拉取具体的朋友动态
存储做读写分离,图片、视频等从 CDN 读取
业务场景 3 - 点赞、评论
每个用户维护一个未读点赞、评论的通知列表 timeline,使用 Redis 存储
当一个用户对一个动态点赞或评论,推送给对该动态有点赞和评论的用户的通知列表
总体架构设计
部署多台应用服务器作集群,作负载;Nginx 作任务分发
数据库集群作分库分表,并读写分离
Redis 集群保存动态 timeline,未读通知 timeline
部署 CDN 服务器,保存图片、视频,加速多媒体素材的下载
后续架构演进,CDN 服务器考虑买运营商的服务,并实现多地部署,以保证不同地区的访问最佳的 CDN 服务器。CDN 服务器数据更新采用异步方式。
评论