微博类应用的架构设计与思考

2018-11-21  本文已影响16人  小盒子的技术分享

一 需求

APP中包括社交类功能,如点赞、关注、评论等,以点赞为例有如下问题&需求:

二 现状

 我们是一个新的APP,用户数从0开始,也就是基数为0,一切的量化都是从0开始的。

三 现在的设计

最开始,我们的想法很简单,以关注功能为例,先设计数据结构和功能,用mysql存储数据,数据结构非常简单和微博一样:
image.png
    这样的做法优点是:

       1 设计开发、实现 速度快,简单 

       2 数据完整落库,不会丢

   缺点是:

      1  数据增速快,单表数据量很快就上去了,会导致查询压力。

      2  在预期内单表数据会不断上涨,要一开始就考虑拆分,否则拆分会带来逻辑、部署、运维的各种复杂度

      3  查询性能会随着数据量的增加越来越低,用户体验差

      4  处理复杂逻辑缓慢,如 查询用户关注列表、查询用户粉丝列表、查询用户双向关注列表、判断两个用户关系。

          还有更复杂的需求:“我与他的共同关注列表”、“我关注的人里谁关注了他

   如果基于上面的方案,我需要判断mysql单表的性能,理论上单表5000万以上才会性能急剧下降,有些db架构师也是这么说过。但是实际情况却不一定。 所以我的预估最多是500万就要开始做技术储备了。

   **不过基于以上的分析,我们一期的设计并没有单纯采用数据库**。我们需要在DB之上加一层高速缓存,利用redis的数据结构和内存速度优势来解决我们的问题。

   虽然决定采用Redis做缓存 ,但这里还有一个问题,就是redis的角色到底是什么,是cache角色,还是storage角色?分别说明一下两种角色的情况:

四 未来规划

  从上面的描述不难看出,我还是利用mysql做持久化,这样数据增量仍然会给单表带来压力,这样的话,就需要考虑分表,业务层也要进行相应的修改来支持。

 从数据容量的规划上,目前的架构可以支持10w+用户 单表500w记录没有问题,在数据增量上来之前的这段时间,我们可以做技术和相关知识储备+调整设计+优化实现。

 未来我不能考虑用户量在亿级规模,那不实现,未来我首先考虑的是一个百万级用户的规模,在这样数据规模的前提下,当前的构架显然不合适,需要做调整,我对业务的设计是:关系服务+数据存储:

1 服务层面

2 存储层面,暂时可以先用Mysql做落地方案,但要设计好分表规则,用redis抗的同时,尽量减少与DB的直接IO,复杂逻辑交给应用层处理。

   未来可能采用hbase,非关系型数据库来优化存储方案。

   redis的集群方案上面,如考虑到可靠性问题,会加入双写的功能。

五 总结

 架构考虑的是 性能、成本、可靠性,最终是一个权衡的问题。没有最好的架构设计,只有最适合的架构设计,到什么规模什么体量用怎样的方案,我觉得,这是考验架构师的一个非常重要的点。

 以上。
上一篇下一篇

猜你喜欢

热点阅读