Facebook公布TAO—社交图谱数据存储方案
ZDNet 发表于:13年07月01日 14:51 [转载] 至顶网
Facebook已经进一步披露Tao细节信息,这套方案负责对公司数以PB的庞大社交图谱信息进行存储。
尽管Facebook公司的社交网络本身与IT人士似乎没多大关系,但其内部基础设施则是不折不扣的IT杰作——社交网络所处理的信息规模如此巨大,Facebook必须拿出新的数据存储、计算及管理方式才能应对其对资源的贪婪需求。
因此,本周三在USENIX大会上公布Tao细节信息的原因有二:首先,这体现了未来企业用户需要面对及打理的庞大数据规模;其次,这也凸显了由高科技企业提供的、专为现代数据系统打造的设计方案。
“对于任何需要利用相关数据高效生成详尽定制内容的应用程序域来说,像TAO这样的系统可能都很有用,”Facebook公司员工撰文写道。“应用程序不应对数据的具体内容进行诸多限制,而应该学会尽量接纳。很多社交网络信息正好符合这一类别。”
Tao这类系统中的其它应用程序则可能需要处理大型数据集,且这些数据集的规模随时间推移持续膨胀。还有一些复杂系统中存在诸多代理机制,且其彼此关系根据使用者的一系列操作而决定。而对国家阴谋论深信不疑的用户,Tao还能够作为保护机制、与情报机关对国家公民的窥探手段相对抗。
Tao是一套针对读取进行优化的数据存储机制,并以单一地理分布实例的方式部署在Facebook当中。它允许Facebook的工程师们横跨公司整个“社交图谱”,对全部相关信息进行访问及写入——其中包括Facebook上的对象(例如人、品牌、评论等)以及关联(赞、踩、标记)。
Tao系统的设计初衷在于为“数PB级别”的庞大数据集提供每秒超过十亿次读取操作,Facebook指出。Tao由Facebook一手打造,能够更好地与自家主数据存储(MySQL)及缓存层(memcache)相对接,且可以在对象上处理无法预知的查询。
“事实上,Tao使用MySQL这一特性从客户端角度完全无从感知,”Facebook工程主管Venkat Venkataramani在接受The Register网站采访时表示。“我们一直在不断寻找,但从未发现过比MySQL更好的方案。”
Tao的API与少量SQL查询相映射,从而降低了底层MySQL数据库的通信强度。对于单一数据库来说,Facebook的数据集实在太过庞大,因此Tao转而将数据拆分为逻辑片段、这样更易被数据库服务器所处理。
Tao还拥有一套最终一致性缓存层、采用相似的创建原理,其中容纳着对象、关联以及关联计数信息。Facebook之所以能够实现站点中同一页面下数以百计对象的高速载入效果,缓存层的作用至关重要。
由于Facebook数据集规模巨大,缓存被划分为双层结构:“领导”缓存层用于处理写入操作、作为辅助的“从属”缓存层则帮助处理读取操作(读取操作的数量要明显高于写入)——Tao系统经常需要面对每秒十亿次级别的读取、但每秒写入则仅为数百万次。
数据缓存处理采取对象与关联彼此相邻的方式,Venkataramani指出。“一大重要设计思路在于保证系统使用位置与工作负载位置基本一致,这是我们成功实现大规模扩展的必要前提。”
就以奥巴马总统的Facebook页面为例,在发生特定事件时、其页面往往会突然面对不可预知的庞大读取量。正是由于Tao在设计理念上将保证对象读取放在第一位,整套体系的最终一致性与可用性才得以实现,而不会因为满足一致性而产生过高的访问延迟。
“在Facebook之前,我们从未见过如此庞大的工作负载,”Venkataramani表示。“说起超大规模应用程序,人们首先想到的往往是电子邮件系统。但邮件与社交网络两种工作负载完全不同,因为用户只会查看自己的邮件、而不可能跑去浏览别人的邮件。但在社交网络方面,情况显然更为复杂——其信息输出量远高于其它网络服务。”
尽管目前利用这种方式处理数据的企业还不太多,但对Tao系统的深入分析能帮助我们在企业规模达到一定程度时解决新难题、理解Facebook蓝白图标背后所承受的巨大技术压力及其巧妙的处理方案。
“随着云计算的逐渐普及以及大规模数据入驻大型数据中心,我认为新型后端架构的时代已经拉开帷幕,”Venkataramani最后总结道。