脸书Messenger资料库从HBase换成MyRocks节省90%储存空间

人工智能2021-02-28 14:04:30
最佳答案

由于早期设计的脸书Messenger架构已经开始不敷使用,而且也难以扩增新功能,因此脸书决定将Messenger的资料库从基于HDFS的开源分散式资料库HBase,转移到自家的开源资料库MyRocks,而且为了让系统转移的过程不影响用户的正常使用,特地规画了两套搬移流程,在两周的时间完成99.9%的帐户迁移,新系统带来的先进压缩方法让储存量减少90%,在使用快闪储存系统后读取延迟更是比过去少了50倍。

Messenger的用户现在高达10亿人,透过Messenger即时的分享文字、照片与影片等,但随着服务发展与扩增新功能,脸书发现是时候改变支援Messenger的基础架构了。脸书提到,最初Messenger被设计成类似电子邮件的功能,用户会在登入脸书网站时,看到在收件箱的讯息,但是现在的Messenger已经不一样了,被发展成了即时通讯系统,脸书为Messenger这一路的转变,更新了许多后端系统,并把原本单一的整体服务拆开成不同独立的系统,以支援行动优先的服务。

现在脸书还要对Messenger的储存基础架构进行大翻修,除了要提供更快更可靠的储存服务外,还要方便未来扩充新功能。这次的更新主要有三部分,第一是重新设计并简化资料格式。第二是将原本使用基于HDFS的开源分散式资料库HBase,转移到由脸书开发的开源资料库MyRocks上,而这是脸书耕耘许久将RocksDB资料库引擎整合进MySQL的开源专案。第三则是将储存装置从传统硬碟转移到快闪储存上。

为了确保在资料库转移时不影响所有用户的使用经验,脸书为搬移过程设计了两套流程,区分为一般搬移以及缓冲搬移。一般搬移针对一般的单一使用者帐号,这个搬移的成立条件需要在搬移的过程没有资料写入帐户中,因此脸书为此定义了状态机,帐户在任何时间都会处于未搬移、双重写入或是已完成的状态。搬移工作开始时,会先储存一个旧系统最后一笔资料的位置,接着将资料搬到新系统中,完成资料複製后检查旧系统资料有无增加,没有增加就让未来新流量写进新系统中,并进入双重写入状态。假如在搬移的过程,仍有资料写进旧资料库,搬移系统便会将该帐号标记为失败,清除MyRocks中的资料,待下次再次进行搬移工作直到成功。

高流量帐号则无法使用一般的搬移流程,因为会不停的遭遇搬移失败,脸书表示,大型企业可能会用Messenger机器人来服务客户,所以没有空闲的时刻可以用来搬移资料,而且这种帐号的资料也会比典型的帐号大的多。脸书会为这些帐号设置一个开始搬移时间,并将这个时间的资料进行快照,并将快照複製进缓冲区层(Buffer Tier),再将缓冲区层的资料写入MyRocks,而複製旧资料的同时,新写入的资料则会被暂时快取在Iris中(下图步骤D),一旦来自HBase的资料都被写到新系统后,该帐号便会进入双重写入状态,把快取的资料接着写进MyRocks中。

脸书在两周内以一般搬移流程,转移了99.9%的帐号到新系统上,另外花了两周,以缓冲搬移处理完剩下的帐号。脸书表示,由于脸书在MyRocks中使用先进的无损资料压缩演算法Zstandard,使资料副本(Replication Factor)数量可以从6个下降到3个,整体节省了90%的储存空间。他们也认为,与HBase相比,MyRocks能更成熟和更自动化的处理灾难恢复。而且MyRocks在读取和写入方面都进行了最佳化,尤其用在快闪储存系统上,读取延迟明显大降50倍,用户在读取历史讯息的时候会非常有感。

由于HBase存在I/O限制,使得历史讯息搜寻这类读取任务繁重的功能难以实现,而脸书现在能直接将搜寻基础架构建立在MySQL上,让用户可以快速的在桌面以及行动装置上,搜寻他们的Messenger历史对话。

免责声明:本文由用户上传,如有侵权请联系删除!