Feed架构-我们做错了什么
在过去几年,所在的微博技术团队在一定程度成功解决了feed架构的扩展性与性能的问题,大部分精力已经从应对峰值性能或者数据扩展中解放出来。
几天前,拿着上面这张架构图问内部一些架构师,目前完成的工作及存在的主要问题是什么?
完成的工作不出意料,大家的观点比较类似,主要在架构的工程成熟度方面。
解决了数据规模大且长尾访问的问题,通过按时间线的冷热分区设计,在MySQL等数据库上成功实现了低成本的长尾分区实现。由于社交产品中大部分访问(90%以上)发生在最近的数据,而较旧的数据(长尾数据)相对访问偏少,因此在存储上利用时间维度进行不同存储区域区分,来达到性能及成本的收益。
解决了数据存储可扩展的问题,可以满足3年左右数据扩展的需要。这个主要利用成熟的数据库拆分方案,简单的实现通常设计成倍扩容,在最初建表时候预留足够多的分表,当容量增长时将这些表迁移到更多服务器上去。
解决了百万QPS访问的问题,主要依赖缓存分区及复制机制的成功应用,通过缓存复制及分级,可以让每秒上十万次访问的数据获得非常好的访问性能,同时数据复制机制可以提高可用性,防止单点机器故障时给数据库带来范围压力。
解决了可用性及错误隔离问题,得益于历年来建设的SLA体系,服务之间有良好的服务契约及错误隔离手段,因此核心功能 有99.99%+的可用性。
但是对于不足呢?如果架构重新再来,你会怎么做?这个问题回答比较多元,经过整理一些主要观点如下。
首先是从解决架构的问题说起,上述feed架构主要解决了在社交媒体环境中,实时及可扩展的解决基于关注关系的数据分发问题。
由于微博是一个实时的网络,人们常把Twitter/微博这种社交媒体产品比作是地球的脉搏,它确实无时不刻都在产生海量的数据,并且产生着不可预测的大量随机峰值访问,业界也是首次随着社交网络的出现遭遇这种架构上的scalability问题,记得在2009-2010年左右,Twitter由于压力过大经常出现鲸鱼页面错误。经过几年的努力,包括微博在内的业界主要公司都已经成功解决了关系模型的数据分发架构问题。
但在用户的层面,使用社交媒体产品依旧被信息过载的问题所困扰。
虽然每天收到大量信息,但是大部分不是自己感兴趣的信息。
基于用户关注维度的兴趣阅读效率不高,用户关注了一个兴趣领域的同行,但这个同行却大部分时候在谈风花雪月。
由于传播的低成本,大号在过度的使用消息通道,生产大量用户未必感兴趣的低质内容。
广告及普通内容的界限很模糊。
由于利益关系,僵尸帐号及内容通过变换形式在大行其道。
内容同质化及雷同问题,内容被精英占领,小人物声音不能得到有效传递。
在社交网络中,上述问题,不可能全部像Google的使命那样,通过技术手段得到解决。但是大部分又跟技术密切相关。
基于用户维度组织内容高效满足兴趣阅读的难度。在上图中,绿色的框中是数据流经的主要通道,但在传统的SNS架构中,这些数据的组织都是基于用户纬度。从用户纬度组织数据较好解决了传统feed模型基于关系聚合数据的问题。但正是由于数据是从关系维度来组织的结构,造成并不能给改进上述阅读效率问题比如兴趣维度的阅读目的带来便利。由于在一定程度信息过载,兴趣阅读是发展方向,但是在架构上目前并没有清晰的解法。
信息识别及低质内容鉴定的技术挑战。虽然业界已经在大数据、自然语言处理等方面积累了不少经验,但在具体场景中,信息识别仍然还在比较初级的阶段。低质内容不一定是垃圾广告,只是当前浏览者不感兴趣。
反垃圾算法的难度。僵尸及垃圾数据变换着出现的形式,目前,至少从实时性算法上识别垃圾及僵尸仍然有很大挑战。
社交网络的信息架构和搜索引擎有很大的不同,在浏览feed是并不像使用搜索有明确的搜索意图,Facebook曾经尝试使用EdgeRank来解决newsfeed算法的效率问题,但是结果并不如预期理想。由于社交关系的存在,用户对出现(及不出现)什么内容的可解释性非常敏感,不能接受好友的信息在排序结果不能看到。除了技术,还有用户体验的问题需要考虑。
综上所述,feed架构虽然取得了架构及工程在scalability方面的一些问题,但更大的问题及依旧在思考及解决的途中。
建议继续学习:
- 大型高并发高负载网站的系统架构分析 (阅读:7715)
- 淘宝数据魔方技术架构解析 (阅读:6689)
- web应用应该考虑的一些问题 (阅读:6220)
- Craigslist 的数据库架构 (阅读:5818)
- 大型网站架构基本问题 (阅读:4396)
- 关于架构的一句话,还有一个实例 (阅读:3578)
- 做大的艺术 - 大型网站的架构设计 (阅读:3517)
- 也谈谈前端,架构,框架与库 (阅读:3567)
- 淘宝2011彩票首页开发实践 (阅读:3485)
- 微观架构及宏观架构 (阅读:3029)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Tim 来源: Tim[后端技术]
- 标签: feed 架构
- 发布时间:2015-01-04 23:00:49
- [67] Oracle MTS模式下 进程地址与会话信
- [67] Go Reflect 性能
- [67] 如何拿下简短的域名
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [59] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [59] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 读书笔记-壹百度:百度十年千倍的29条法则