极客时间 - 架构实战营 2 期 - 模块二作业
学号:G20210698040018
姓名:唐瑭
分析微信朋友圈高可用复杂度:
微信朋友圈从业务功能上来说,我觉得可以分为编辑朋友圈(发朋友圈,修改朋友圈,删除朋友圈),评论朋友圈,互相加好友,点赞收藏朋友圈,还有消息推送。
1 编辑个人朋友圈,评论,朋友之间互相加好友业务,我个人觉的复杂度上都差不多,可以一起思考
单机
存储高性能这一块,我觉得可以用关系型数据库存储朋友圈内容的主体部分,图片等存在文件服务器上。
计算高性能这一方面,我觉得可能没有太多可以考虑。如果朋友圈数据库访问很多,可以考虑使用缓存。
集群
计算高性能这一块,无需任务分解,做到任务分配即可,做到负载均衡 nginx 搭配应用服务器即可。
存储高性能这一块,考虑到数据量大,可以用 sharding jdbc+mysql 做数据库分库分表
2 点赞和收藏功能
单机
计算高性能这一方面,没有太多可以考虑
存储高性能这一块,由于点赞收藏这些动作发生频繁,可以考虑用 redis 来存储点赞量和收藏量
集群
计算高性能,做到 nginx 负载均衡即可
存储高性能,用 redis cluster 集群存储点赞量和收藏量
3 消息推送
如果你点赞了,评论了某一个朋友圈,那么该朋友圈所有者的微信收件箱里可以收到消息提醒。
如果你发送了一条朋友圈,你的所有好友他们那里都可以收到一条消息推送。
考虑到微信朋友圈不大,有上限的,应该是几千人,可以考虑推送模式。
单机
计算高性能,为了性能考虑,可以考虑在用户发朋友圈的时候,使用多线程,发推送消息到消息队列,通过消息队列再发到该用户好友的收件箱里面
存储高性能,应该考虑写多读少这个情况,可以使用 LSM 数据库
集群
计算高性能,继续做到 nginx 负载均衡
存储高性能,考虑使用 Hbase 集群
4 整体架构
可以考虑多机房部署,为了监控还可以搭建一个后台管理系统,除了对于系统做监控外,还可以在后台系统中设置敏感词之类的,对于脏话做屏蔽过滤,对于不健康的朋友圈自动隐藏等等
下图是整个架构设计
谢谢~
评论