微博分布式存储作业实现方法

标签: 架构 | 发表时间:2016-01-21 08:27 | 作者:Tim
分享到:
出处:http://timyang.net

可能通过「高可用架构」听说过在微博的系统中,单张 MySQL 在线业务表 60 亿条数据的场景。很多关注互联网架构的工程师也非常关注如何如何设计类似系统。下面是一道微博新兵训练营的分布式存储课堂练习,要设计合格才能上岗。

关注为什么超长列表数据的翻页技术实现复杂的读者请直接参看文末链接。

feeds2

考虑到网上有很多架构师也在讨论,补充题目一些说明如下。

1、访问场景

由于上面题目的应用场景,用户一般情况下,主要查看用户查看自己收到的最新的微博,以及某个特定用户 profile 的所有微博。

  • 收到的微博,考虑微博以拉为主的模式,则需要访问关注用户最近 n 条最新的微博。
  • 用户 profile,需要访问用户历史上所有发表的微博,而且支持分页查看,可以直接跳转到某一页或者某个时间段, 因此需要适当考虑分页的效率(可参考扩展阅读)。

访问特征

  • 从上面描述以及社交网络的用户访问特点来看,用户大部分情况( > 90% )是访问最近 7 天的数据。

不需要考虑的点

  • 此题主要是存储层的设计,因此不需要考虑缓存如何设计。
  • 由于微博是 异步写入的,在某种程度可以起到错峰作用,所以作业暂时不需要考虑写入的峰值。
  • 不需要考虑 id 如何产生,假定已经有发号服务。
  • 不需要考虑用户收到的微博怎么聚合,那个是更上层服务层的职责。

2、设计需要考虑的点

Scale-out 扩展性

  • 将数据拆分到多个独立的单元存储
  • 可以在适当时机进一步拆分,拆分时候需要继续提供在线访问
  • 存储在廉价硬件上,考虑到数据规模比较大,需要适当考虑方案的整体成本,因此不要假定默认全部使用 SSD 存储。

Cost 成本

  • 不同访问级别的数据存储在不同访问速度(成本)的硬件上。

High availability 高可用,以及  Reliability 可靠性 – 复制

在当前场景下,主要通过 MySQL replication 来解决可用性、以及分担读的请求。

3、Sharding 策略

Shard 常用策略

range based:根据用户 uid 来分布,相邻 uid 的数据保存在一起。
hash based:根据某个 hash 函数,将一个用户 uid 的数据保存在指定的分片。

Re-Sharding 拆分设计
当数据持续增长,原先存储的数据(或者访问量)超过当前节点的容量上限,则需要对节点进行进一步拆分。

feeds3

如何确定shard数量

db buffer > hot data

容量规划

  • 预规划: 容纳未来一段时间的数据
  • 2 的指数倍: shard 数量变更简单

Tradeoff

  • 分片多:影响 IO 效率;
  • 分片少:扩容频繁、复杂

4、部分投稿案例

案例一:使用 user id range 作为分片

case1

案例二:使用user id hash作为分片

case2

 

方案三 (via 张亮)
历史数据:
1. 每半年根据日期分库,如:2015.01-2015.06为一个库。每天增加1亿数据,半年180亿,约为0.72T数据,可以保留在1T的磁盘中。
2. 根据 uid 取模分库(表),便于查询和分散数据。

当前 n 日数据:
1. 暂定n为10,存储10亿数据。
2. 根据uid + 权重的hash算法分库。权重可以根据每个uid的微博id数量,粉丝数等指标离线计算。

hash算法需保证:
1. 同一uid需落在一个库。
2. 权重接近的用户尽量均匀的落在不同库。
3. 为了应对突然发生的事件导致访问量激增,需要考虑2级甚至3级分片,而不宜直接做re-sharding导致数据迁移。多级分片可考虑读取一个标记,放在zk中。根据标记确定分片的hash算法加入小时等维度。

查询索引:
1. 增加发帖索引字段,记录每个用户的每个帖子的索引。
2. 增加发帖总数统计表,以用户为维度,每个用户发一次贴则发帖总数++。
3. 增加二级索引表,记录每个用户,每次分片库的发帖索引。如:uid 1的用户,在2015年第一帖是该用户发帖的总数的第10贴,2015年最后一贴是该用户发帖总数的第50贴。
4. 分页查询使用二级索引表,先查到该查哪个真实库(可能是多个),再到真实库中获取数据。

总结:
1. 通过灵活的运用时间维度分片,免去因uid分片数量不足导致的大规模迁移,使用外部flag灵活的控制分片策略。而且用时间维度分片更易做到冷热分离。
分片逻辑可以灵活到,zk中记录时间段,某个时间段内,按月分,某个时间段,按年分,之类。
2. 通过离线计算权重的方式均匀分散数据访问。权重周期性调整,对于调整权重的用户,需要重点考虑当前n日数据的数据迁移方案。但由于调整权重的用户属于少量,所以迁移应该数据变动较小。历史数据不需权重概念,无需数据迁移。
3. 查询使用二级索引。使用修改btree结构去掉二级索引能有效减少数据量,但实现难度较大,可以在之后的局部优化中实现,对总体数据库结构影响不大。
4. 将前n日数据和当天数据整合在一起,之前对微博的场景理解不深,以为有首屏显示这样的概念。

 

5、扩展阅读

关于分页:
为什么超长列表数据的翻页技术实现复杂
为什么超长列表数据的翻页技术实现复杂(二)

Similar Posts:

相关 [微博 方法] 推荐:

微博分布式存储作业实现方法

- - 后端技术 by Tim Yang
可能通过「高可用架构」听说过在微博的系统中,单张 MySQL 在线业务表 60 亿条数据的场景. 很多关注互联网架构的工程师也非常关注如何如何设计类似系统. 下面是一道微博新兵训练营的分布式存储课堂练习,要设计合格才能上岗. 关注为什么超长列表数据的翻页技术实现复杂的读者请直接参看文末链接. 考虑到网上有很多架构师也在讨论,补充题目一些说明如下.

百万流量的起处:网站从微博中获得用户的细节与方法论

- - 徐志斌
微博现在已经成为继搜索引擎之后又一个流量分发中心,但一家网站究竟能从微博中带走多少流量. 第一个答案是由一家社会化电商网站告诉我们的,他们每天从腾讯微博带走40万独立IP. 而管理后台则显示,从最高每天220万独立IP到最低十几个点击,网站们都出现在那条起伏的曲线中. 于是问题又变成了:那些在尖峰中的网站,他们怎么做到从微博带走可观的流量的.

微博

- qianlaohu - 独立思考
无论名人在微博上讲什么,都能引起很大的“互动”. 王力宏说:“2011年过去一半了,7月了. 感觉就是这几百万人一起围在那里,紧张专注地看着,名人的微博一更新,至少挤在前排的几万人就激动拥抱:“动了. 说微博的迅速崛起会影响媒体,影响门户网站,影响SNS,其实都不对. 它首先威胁到蜡像馆,因为你在蜡像馆只能掏钱看不会动的,而在微博,不用掏钱都能看到会动的.

微博黑洞

- 洪涛 - 月光博客
  “黑洞”,光束经过它都会发生弯曲,甚至是被吸进去. 在我们已知的世界中,运行速度最快的光束也难逃黑洞的束缚,更不用说那些运行速度缓慢的物质. 从商业角度上讲,我们不妨把一束光理解为某个优秀品牌的数字营销行为(Digital Marketing). 如果这个品牌的数字营销做得够好,我们就可以用运行速度最快的光束来彰显其在行业中的领先地位,但这样的品牌毕竟是凤毛麟角,特别是在当今火热的微博营销领域中.

SNS OR 微博?

- ItTalks - 新媒体营销观察站
互联网的平台总是日新月异,在SNS还未开到荼靡时候,微博横空出世,如今已然后来居上,之前看到新生代调研机构关于SNS和微博的比对分析的结论,在此摘出部分并依据本人的想法调整后分享给大家:. 虽说微博目前发展迅速,很多用户尤其是圈子里的早已经从人人、开心转战,难免从心里忽视人人和开心,会忍不住怀疑那些曾经火热如今却觉得很SB的APP还有多少拥护者.

微博上市

- - 扯氮集--上海魏武挥的博客 - 扯氮集--上海魏武挥的博客
昨日,市场上开始流传一则信息:新浪微博计划在纽交所 [i]上市,募集5亿美元的资金,上市预计在今年第二季度完成. 不过,由于当日MWC召开,市场又传闻阿里要收购整个盛大系,这则信息并不是各大科技频道或网站的头条. 微博早已从2011年的全社会关注热点顶峰位置跌下,的确是不争的事实. Twitter上市后,股价一路冲高,从40来元,直上70余高峰,然后开始回落,目前大致在55元处徘徊.

微博八卦 3

- Melo - Never
文章标题:中微子超光速可以用量子弱测量解释嘛. 套餐窗口的食物每天都不同,有时印度,有时土耳其,有时德国. 很多时候我也不知道究竟是什么,就点了,吃的时候偶尔有小惊喜. 嗯,哥吃的不是午餐,是prediction error....... 随着fMRI数据大的量共享,最近搞了一个用静息态数据诊断孤独症的数据处理竞赛.

网易微博拾零

- rockmaple - 双城记 — 小蛮腰的洗礼
1、2010年Q1,内测时分,满怀激动,觉得终于可以用上自家产品. 而且形态颇似Twitter,简易好用,不禁高兴. 2、邀请朋友来微博,众人皆说已落户新浪,再无精力,罢了罢了. 3、亚运时分执掌微博运营,苦于产品、资源的限制,踌躇不已,无心恋战,常常自责. 多亏有了Alice在微博圈子的影响力和对微博传播的深刻理解,才获得了不错的口碑和效果.

谣言止于微博?

- 晓江 - 南方周末-热点新闻
央视发问,谣言泛滥,微博的伦理底线在哪里. 然而,一个与微博谣言有关的更重要的问题是:微博官方辟谣的界限在哪里.

微博还能火多久

- Ryan - 互联网的那点事...
为什么想到这个呢,是因为几个现象:. @胖胡斐 的微博,曾经关注了470+个人,有一段时间,半个小时要是不看,就至少会有4-5页更新出来,而现在,我刚去看了一下,还是那些人,平均半个小时更新数量已经不超过1屏了. 很多朋友的博客,自从有了微博,就疏于更新,大批大批的闲置博客出现. 同时,微博也少了的人,博客倒也没有增加.