学习新浪微博计数服务

本文摘自 http://blog.cydu.net/
官方ppt :
http://blog.cydu.net/public/doc/Velocity%E5%88%86%E4%BA%AB_%E5%BE%AE%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E4%B9%8B%E5%BE%AE%E5%8D%9A%E8%AE%A1%E6%95%B0%E5%99%A8%E6%9C%8D%E5%8A%A1_%E6%9D%9C%E4%BC%A0%E8%B5%A2_20121205.pdf

本文是个人学习的理解加上原文ppt的引入

新浪微博的会有和很多计数功能,关注数,转发数,评论数等等
在大量的数据线会产生如下问题

产生的问题
1.数据量大
2.访问量发 (cache的命中率问题)
3.突发事件的热点数据
4.占用的内存
5.更新方法 如果副本多会影响性能
6.故障解决

阶段一:
在微博数据量不是很多的时候,统计数量会很少,所以直接使用sql就可以查出 select count(*),当前阶段属于只用MySql阶段

阶段二:
当有了一定的用户基础后,单纯的select count(*)扫描的数据行数过多,如果不建立联合索引来避免查表会消耗很多性能。这里的解决方案是建立一个以主键和要查询字段的联合索引来避免回表查询(原理可以查看《高性能MySql》索引章节 )。此阶段依然是单纯的使用MySql阶段
select count1, count2 from table where id = 111;

阶段三:
随着用户量的增大,访问量也随之增大,和突发的热点数据的指数增加。未解决这种问题,不得不加上缓存Memcache,此情景还有问题,就是生成新的数据的id生成问题,大量的数据并发的生成,必然有大量的id需要分配,如果要同步的生成数据,势必会影响相应速度,采用异步生成数据的id如何形成id成全站唯一切批量生成,可以使用id生成服务,每次生层一批id,避免每次生成id都要调用接口获取(id生成服务原理可以参考https://my.oschina.net/CandyDesire/blog/619122)。将要生的数据放入消息队列中,避免高并发时数据的丢失。
在生成数据过程中,新浪微博采用批量的生成方法
这里写图片描述
先合并相同的操作,降低数据库的写压力

此时的系统不在是单纯的MySql。
这里写图片描述

至此的问题如下
这里写图片描述

为了解决上述问题,采用redis解决
这里写图片描述
这里写图片描述
由于我个人没有用过redis,对AOF第一次接触,如不懂AOF可以参考http://redisbook.readthedocs.io/en/latest/internal/aof.html

引入redis后,后端架构如下
这里写图片描述

当然即使使用这个架构,柔然驾驭不了海量的数据,新浪微博还对数据结构进行的设计,我并没有看懂,详细细节可以参考官方ppt(http://blog.cydu.net/public/doc/Velocity%E5%88%86%E4%BA%AB_%E5%BE%AE%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E4%B9%8B%E5%BE%AE%E5%8D%9A%E8%AE%A1%E6%95%B0%E5%99%A8%E6%9C%8D%E5%8A%A1_%E6%9D%9C%E4%BC%A0%E8%B5%A2_20121205.pdf

最后,就是讲这个计数服务进行服务化,为全站提供服务

整体发展过程
这里写图片描述

发布了79 篇原创文章 · 获赞 4 · 访问量 7万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览