数据人看Feed流-架构实践( 九 )
是推?是拉?还是混合?没有最好的架构 , 只有适合的场景~
基于关系的传递
图6是纯推模式的架构 , 该架构有3个关键的部分
-
异步化 。 生产者提交消息首先写入一个队列 , 成功则表示发布成功 , Dispatcher模块会异步的处理消息 。 这一点非常关键 , 首先生产者的消息发布体验非常好 , 不需要等待消息同步到粉丝的收信箱 , 发布延迟低成功率高;其次Dispatcher可以控制队列的处理速度 , 可以有效的控制大V账号造成的脉冲压力 。
-
多级队列 。 Dispatcher可以根据消费者的状态 , 信息的分类等划分不同的处理方式 , 分配不同的资源 。 比如对于大V账号的消息 , 当前活跃用户选择直接发送 , 保障消息的时效性 , 非活跃用户放入队列延迟发送 。 比如转发多的消息可以优先处理等 。 队列里的消息可以采用批量聚合写的方式提高吞吐 。
-
收信箱 。 假如有两亿用户 , 每个用户保留最新2000条推送消息 。 即便存储的是索引也是千亿的规模 。 收信箱一般的表结构为用户ID+消息序列 + 消息ID + 消息元数据 , 消息序列是一个递增的ID , 需要存储一个偏移量表示上次读到的消息序列ID 。 用户读取最新消息 select * from inbox where 消息序列 > offset 。
推荐阅读
- 捉迷藏|?LOL世界赛“含金量”数据出炉:EDG仅排第六,IG稳居榜首
- 碧蓝航线|碧蓝航线SR重巡福煦数据详解 期待越高失望越大 强度平平无奇
- kramer|国服极地大乱斗数据上线,来看看胜率榜符合你的预期吗?
- 米莱狄|峡谷数据榜:分均输出TOP5,干将莫邪只排第四,米莱狄至今被误解
- |S11淘汰赛数据盘点:场均时长为33分 55个不同英雄登场
- 中单|2021年英雄联盟世界赛终于落下帷幕!!大数据统计二!!
- 灵饰|梦幻西游:109级法系前排灵饰选择方法,用数据告诉你怎么做
- 卡牌|S11淘汰赛数据出炉,卡牌24场全被ban,压刀最多竟是辅助
- edg战队|堡垒之夜国服将清除数据,EDG创造队史晋级S11世界赛决赛
- 电子竞技|鱿鱼游戏:给成年人看的童话故事