facebook 将数据库从hbase切换到myrocks以提高性能

本文内容主要来自Migrating Messenger storage to optimize performance

最近facebook宣布已成功完全将messenger数据库从hbase软切换到myrocks。这样做的结果就是提高了性能,节约了存储空间。

facebook messenger最开始使用的是cassandra,后来将其开源并移交了apache基金会,后来messenger又转为使用hbase,现在又转为myrocks - 一个facebook的mysql的引擎实现。

这其中主要的特点是从普通硬盘(spinning disk)到flash硬盘,使用的是facebook的Lightning Server SKU服务。

据facebook介绍,转换的出发点当然是为了提升性能:

  • mysql复制拓扑结构更适合facebook的数据中心环境
  • 使得能够在减少物理复制个数的情况下同时提高可用性(availability)和容灾恢复(disaster recovery)。

Messenger这么大的吞吐量(1 billion accounts,十亿用户)的项目从NOSQL(hbase)又回到了SQL(mysql),这个视角的原因,文中并没有提到。

myrocks 优化写性能和存储空间的mysql引擎

其实myrocks读写都优化了,只是写优化更明显。

  • 将pagesize从8kb(innodb)减少为5kb
  • 使用LSM算法优化写
  • 减少索引,元数据的存储空间,总体减少更多的存储空间

无宕机时间的迁移策略

这个过程还有个亮点是无宕机的完全迁移,简言之是初期同时写入旧的数据库hbase,和新的数据库myrocks.

statemachine-new-code.png

经过多方验证后保证所有数据已完全切换到myrocks后,再将hbase下线,用户完全感受不到这个过程。

PS

有趣的是,Facebook的这篇文章出来后,NOSQL to SQL的相关文章冒出来很多,举例: Have you ever chosen Postgres over Mongo and regretted it?
Thank You for Your Help NoSQL, but We Got It from Here


Total views.

© 2013 - 2018. All rights reserved.

Powered by Hydejack v6.6.1