类微博信息发布平台的架构设计
类似微博信息发布平台后台架构,定义核心功能
- 发布短博文
- 主动推送给关注用户
- 博文时间轴
- 搜索
- 趋势热点分析
*本架构聚焦在核心功能的设计和思想。
性能要求:
面向公众设计容量300M活跃用户,需要支撑不同客户端并发大量读请求,需要达到以下性能:
R: 600,000条/sec ,
W: 600条/sec
内容存储,限制在1000以内的文字内容,同时支持短视频发布(视频内容可集成流媒体架构,不在本章中讨论)及图片发布。由于数据中心在存储成本方面会根据供应方发生变化,初期并不需要全部集中及满配,考虑因素到可扩展可分散即可。
数据库选型:
参考下以模型,每一个用户都可以发布多个博文,并且关联多个关注者:
USER--1--*-->博文
|
----关注者

微博平台属于读繁忙系统,大量的读请求,使用Redis 集群可以满足性能上要求。Redis具有数据持久的功能,但显然不足够,仍然需要有机制把数据分成冷热批次,在持久化方面需要引入DB协同运作,随着注册用户越来越多,需要支撑分析应用,DB可扩展的因素也需要考虑,本方案中选用MySQL集群作为数据库。
需要引入Zookeeper为集群同步提供服务。Redis集群以及搜索服务集群,时间轴服务,缓存服务等。
Redis 表设计
博文列表:<User_ID>- content:[1,2,3…]
博文:<Content_ID>:[“Jason String[some thing you post]”]
关注者列表:<User_ID>- Followers:[1,2,3…]
时间轴缓存:
用户浏览博文和发表博文时,会以时间轴的组织方式展现在用户端,正常情况下会有多个用户在相近的时间范围内发布自己的博文,这些博文需要展现在三个地方,分别是:1)自己的空间,2)关注者的空间,3)公共空间。博文发布后,会存储在数据库中,其它用户访问系统时,都需要在数据库查询后重组时间轴关系,如果对每一个用户都执行这一个查询DB的动作,这对于数据库系统会产生很大的瓶颈,因此缓存是考虑在效率因素中,会为每一个用户增加时间轴缓存,博文发布后,会发布到以内存访问为主的Redis缓存中,也就是个人时间轴缓存,关注者的时间轴缓存及公共空间的时间轴缓存,最后异步同步到数据库MySQL群集中。
当然,对于非活跃用户,例如100天不登录的用户,跳过这些用户的实时更新,改由登录时再由登录用户发起主动更新个人时间轴缓存。
---- follower1 [cache1,2,3…]
/
User [cache1,2,3…] ------ follower2[cache1,2,3…]
\---- follower3[cache1,2,3…]

公众号订阅者效能提升:
对于公众号存在大量的订阅用户,在这一场景下公众号主动更新大量订阅者的时间轴缓存,即使用Redis也需要使用几分钟,所以在这一场景下,会在前端展现之前改由订阅者主动读取公众号时间轴缓存的最新内容,如果存在多个关注的大号,则应该每一个公众号都主动刷新回最新内容,然后再把多组最新内容组装回自己时间轴缓存,最后才是进入展现环节。
Public user list [u1,u2,u3…]->user[cache1,2,3…]->myself[cache1,2,3…]->Apps

趋势实时分析
实时分析是流处理技术的一个典型案例,本方案使用Storm或者Kafka Streams,在用户发布博文时,一份副本会同时送入流处理引擎,博文的内容可以做分析流行词汇分析,热点分析,敏感词分析,关系网分析,内容分类等。

内容搜索:
搜索引擎首选Elasticsearch,各个领域知名度很高,极多广泛用户群体,功能完善:搜索关键字补全,搜索内容高亮着色,同义词近义词识别,数据类型支持度好。从架构上看,Elasticsearch是高可用水平扩展,多节点并行返回结果搜索速度极度迅速,有缓存机制进一步提升全文搜索速度,支持多种分析插件和自定义插件(例如有特殊的权限需求可以通过扩展插件实现),支持尝试定制查询,支持搜索优化等。
高阶总体架构:

博文发布:用户在终端发布博文,会并行写到3个地方,博文数据送入Redis做1级数据存储,同时送入趋势分析进行平台实时分析,以及同时送入Elasticsearch做搜索数据实时更新。
缓存服务:处理接收到的博文,更新用户博文列表,更新活跃订阅用户缓存,更新公共空间缓存,同步主数据到MySQL,更新缓存版本信息,清理过期缓存。
趋势分析:对于送入的博文数据及用户行为进行实时数据分析,生成多种运营数据,包括:面向公共空间的统计数据,面向普通用户或公众号的自定义资料报告,面向平台运营方的总体分析报告。
搜索服务:为资料元数据,用户博文,用户关系网,搜索热度排名等数据提供搜索服务,功能上为用户提供关键词补全,条件组合,内容过滤,热点标签等。
时间轴:用户发起时间轴浏览请求,从Redis中获取时间轴上的数据,渲染页面样式送回到客户端,用户发起搜索请求,从搜索服务中返回数据,渲染页面样式送回到客户端。
内容推送:点对点设备互联,可连接手机,桌面应用,实时为用户提供消息提醒,信息推送,用户间互联通信,设计规模为支撑3000万实时在线设备。
浙公网安备 33010602011771号