カスタム検索
表示順:
Relevance
Relevance
Date
ウェブ
 
 
 

Cassandraのストレージエンジンを入れ替えて高速化した「Rocksandra」、Instagramがオープンソースで公開。Javaのガベージコレクションによる遅延を大幅に解消

2018年3月13日


Instagramは、NoSQLデータベースのCassandraで発生していたJavaのガベージコレクションに起因する遅延を解消し、高速化した改良版Cassandraをオープンソースで公開したと発表しました

ストレージエンジンとしてキーバリューストアの「RocksDB」を用いたことから、同社はこの改良版Cassandraを「Rocksandra」と呼んでいます。

JavaのガベージコレクションがCassandraの遅延を発生させている

同社がRocksandraの開発に至った経緯は、エンジニアブログ「Open-sourcing a 10x reduction in Apache Cassandra tail latency」で詳しく解説されています。

それによると、InstagramではCassandraを使用しているものの、しばしばレイテンシが悪化するという課題を抱えていました。

下記は青の線が平均的なレイテンシを示し、オレンジの線は99パーセンタイル(値全体のうち、良い方から数えて100分の99の位置にある値)のレイテンシを示しています。つまり、全体の処理の一部でしばしば大きな遅延が発生していることが分かります。

Cassandraで発生するレイテンシ

調査の結果、これがJavaのガベージコレクションに起因することを突き止めます。

The GC overhead obviously had a big impact on our P99 latency, so if we could lower the GC stall percentage, we would be able to reduce our P99 latency significantly.

このガベージコレクションのオーバヘッドは、99パーセンタイルにおけるレイテンシに大きな影響を与えている。もしもこのガベージコレクションによる性能低下の割合を下げられれば、99パーセンタイルにおけるレイテンシを大きく削減できるだろう。

ストレージエンジンにC言語で書かれたRocksDBを採用

Javaのガベージコレクションの影響を取り除くため、インスタグラムはCassandraのストレージエンジンを置き換えることにします。

ただし、何もないところから新規にストレージエンジンを開発するのはリスクが高いとし、C++で書かれたオープンソースのRocksDBをベースに開発を進めることにしました。

RocksDBとは、Googleが開発したNoSQL軽量ライブラリ「LevelDB」を用いてFacebookが開発したキーバリュー型データストアです。

しかしCassandraのストレージエンジンを入れ替えるには、いくつかの課題がありました。

1つ目は、そもそもCassandraはストレージエンジンを入れ替えられるような設計になっていなかったという点。そこで同社はストレージエンジンをプラガブルにするためのAPIから作ることにしました。

To find a balance between massive refactoring and quick iterations, we defined a new storage engine API, including the most common read/write and streaming interfaces. This way we could implement the new storage engine behind the API and inject it into the related code paths inside Cassandra.

大規模なリファクタリングと素早いイテレーションのあいだの適切なバランスを見つけるため、新規にストレージエンジンAPIを定義することにした。そこにはもっともよく使われるリード/ライトやストリーミングのインターフェイスが含まれている。このおかげで私たちは、API経由で新しいストレージエンジンを実装し、Cassandra内部の関連するコードを経由して組み込むことが可能になった。

2つめは、ストレージエンジンとなるRocksDBがシンプルなキーバリュー型データベースなのに対し、Cassandraがリッチなデータ型やテーブルのスキーマをサポートしている点です。これをRocksDBに実装するため、データ変換のためのエンコーディングとデコーディングのアルゴリズムを利用したとのこと。

レイテンシの大幅な削減に成功

こうしたいくつかの課題を乗り越えてRocksDBをCassandraのストレージエンジンとして実装した「Rocksandra」のベンチマークが以下です。

青のマーカーがCassandra 3.0、オレンジのマーカーがRocksandraです。

一番左の平均的なレイテンシでもCassandraが2.267ms、Rocksandraが1.386msと高速化を果たしており、99パーセンタイルでも11.864msと5.722msと約半分のレイテンシ。999パーセンタイルでは263.21msと14.23msと圧倒的な差がつきました。

Rocksandraによるレイテンシの改善

Instagramでは、今後オープンソースでのRocksandraの開発を進めつる、セカンダリインデックスやリペアといったまだ実装されていないCassandraの機能へのキャッチアップおよびCassandraへのプラガブルなストレージエンジンアーキテクチャ実装への貢献を行っていくとしています。

follow us in feedly

カテゴリ RDB / NoSQL / ミドルウェア
タグ  Cassandra , NoSQL


前の記事
マイクロソフト、Windows 10に機械学習の実行環境とAPIを備えた「Windows ML」搭載へ。Windowsを学習済みモデルの実行プラットフォームに


カテゴリ



Blogger in Chief

photo of jniino Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

人気記事ランキング

  1. 人気が下降しプログラマの求人も少ないプログラミング言語ワースト10は? 一方で仕事の多い言語は? CodementorXとCoding Dojoの調査結果
  2. マイクロソフト、Windows 10に機械学習の実行環境とAPIを備えた「Windows ML」搭載へ。Windowsを学習済みモデルの実行プラットフォームに
  3. Reactの新機能「Time Slicing」と「Suspense」をFacebookが紹介。非同期レンダリングを活用しUXをサクサクに向上
  4. Googleが「Dart 2」発表、Dartを再起動。iOS/Android用ライブラリ「Flutter」と共にWebとモバイルのクライアント開発にフォーカス
  5. 書店のコンピュータ書籍担当者が投票した「CPU大賞 書籍部門」発表。「Excel 最強の教科書」「いちばんやさしいWordPressの教本」「アルゴリズム図鑑」などランクイン
  6. Kubernetesは十分成熟したソフトウェアに到達したとし、CNCFのインキュベーション段階からの卒業を発表
  7. マイクロソフト、WindowsアプリのWebViewとしてEdgeレンダリングエンジンを利用可能に。Windowsでもガワネイティブアプリが広まるか
  8. VMware Cloud on AWSに新機能、vSphereのレベルでAWSの複数アベイラビリティゾーンに対応。既存アプリのままクラウドの高可用性実現
  9. 来月にはJava 10が登場し、9月にはJava 11が登場予定。新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる(OpenJDKに関する追記あり)
  10. オンプレミスのVMware環境を自動的に探索、情報収集して、Microsoft Azureへの移行を支援する「Azure Migrate」が正式版に


新着記事 10本


PR - Books


fig

fig

fig