架构实战营 - 作业 2
朋友圈高性能业务指标分析
微信创始人张小龙披露微信最新数据:每天有 10.9 亿人打开微信,3.3 亿人进行视频通话,7.8 亿人进入朋友圈,1.2 亿人发朋友圈,朋友圈每天有 1 亿条视频内容,3.6 亿公众号,4 亿用户使用小程序。朋友圈每天有 1 亿条视频内容。每天有 3.6 亿人进入公众号,4 亿用户使用小程序。
很高,但是具体的 tps 不知道。
这里不影响分析,继续往下走。
数据库设计
内容必须压缩(关键点)
如果使用 nosql 的 hbase 那么就使用 clientid+时间戳作为 rowkey
如果用 sql 的话 需要大量的主从,分库分表(用时间),数据压缩。(感觉好复杂)
还是用 hbase 了
这里主要的问题是查询的次数问题。为了减少查询次数,
可以把单个人的每个月的记录放在一条记录里面。然后在服务器进行 filter 和 sort 操作就好了
rowkey = userid+month
value = 一个月的朋友圈的内容加评论
---------------------------------------------提交作业后--------------------------------
老师在群里面说了:
1. 应该按照发朋友圈、浏览朋友圈、评论三个核心场景来分析,点赞可以不算,也可以和评论一起作为一个场景 2. 应该分析每个核心场景的计算和存储性能要求,例如朋友圈的图片和朋友圈的转发链接的存储是不同的,并且也是要有模型推导的 3. 朋友圈和红包不同,除夕的峰值也不会像红包那样比平时高很多,基本 5 倍以内,如果模型按照 20 倍甚至 100 倍来估算,是不合理的(10 倍以内都可以)4. 不能只说分片存储,至少要说明用 MySQL、Redis、Hadoop 等具体哪个存储系统 5. 由于浏览朋友圈实际上是每个用户有自己的 feed 流(时间线排序),还要插入广告,所以浏览朋友圈的复杂度是比较高的,这里最好是将浏览和发圈分开不同的服务(和红包不同),比较合理的服务拆分是将“发、评、赞”放在一个服务,浏览放在另外一个服务
===============================================================
这个时候就知道了可能这样数据库扛不住。。。
一个人每次看朋友圈都需要查 100 次 hbase 或者 redis。
所以需要优化下。
需要把数据分为存量的和增量的。存量的数据我这样干没有问题。
但是增量的数据可以通过 feed 流的方式来解决。
大体就是没次朋友圈更新的时候就查找那个人的朋友圈,把消息主动的推送出去,这样的话就可以减少数据库读的压力了。我这样混着存的方式就要改了。。。
发朋友圈的时候也不能直接入库,差了下 hbase 的性能,估计扛不住。。。需要先写到 kafka ,然后通过消费 kafka 推送消息,接着入库比较合理。。。
下次还是需要提前问问比较好。。。。。
评论