架构班模块二作业
朋友圈整体复杂度分析:
微信朋友圈主要分为发动态信息、浏览动态信息、评论点赞三个主要功能
从业务规模上看,需要针对高性能、高可用、高可扩展三个维度做架构设计分析

发表动态复杂度分析:

浏览动态复杂度分析:

点赞评论复杂度分析

微信朋友圈整体集群架构

微信朋友圈整体单机架构

设计理由
首先,在用户发表朋友圈动态时,先将数据读入 Redis 中,这样可以快速响其他用户浏览需求,因为朋友圈动态消息讲究时效性,往往最近的动态被浏览次数几率非常大,历史数据较少被浏览,因此可按时间线,将近期数据作为热点数据存入缓存,保证系统的高性能读取。
其次,缓存消息可以延后批量更新到数据库中,这里数据库采用 mogodb 这种文档型数据库,可以更为灵活的存储消息、评论与图片信息。
通过 LVS+NG+keepalive 的设计保证负载层高可用,将请求分发到应用服务器处理
通过 sharding 策略,将数据分片保存到缓存和数据库
数据库和缓存均要做高可用设计,严格将数据按照时间线和区域进行分库分表处理。
数据库和服务器均需要进行异地多活部署以保证容灾需要。
加入 CDN 服务,保证图片和视频的快速上传下载。
数据需要做跨区域同步,可采取异步方式保证效率。
评论