【再掲】【研究課題レポート抜粋】分散ストレージ lisnr Part1 | サイバーエージェント 公式エンジニアブログ
※今回のエントリは、Paku氏が優秀賞を受賞した第4回(2010年3月)研究課題レポートの抜粋です。本文の量から、複数エントリに分けて掲載をしていきます。サイバーエージェントではシステム設計を強要しないポリシーのため、自作、流用、カスタマイズ含め、さまざまな分散ストレージが使われています。

はじめに
 今回の研究レポートは、分散ストレージの実装をテーマにしました。
内容的にボリュームが大きいため、パート1とパート2の2回に分けて論じます。
今回提出するパート1では、分散ストレージの基本的な機能やネットワーククラスタリン
グに対して説明します。
ネットワーククラスタリングについては、各node間のクラスタリングや、仮想パーティ
ションの自動振り分けなどの実装になります。
なお、パート2では、in-memoryと永続化を同時にサポートできるストレージの実装と検
証まで行いたいと思います。

背景
• 大規模なウェブアプリケーションのボトルネックを解消したい
• 落ちない高可用性key-valueストレージ
• 複雑な設定がなくてもサーバーを追加するだけでスケールアウトできる
• 永続化したい

概要
「lisnr:リスナー」lisnr is not rdbms
• key-valueストレージ
• データの永続化
• データの分散(レプリケーションではない)
• 仮想Partitionで分散
• サーバーはクラスタされる
• サーバーを追加してスケールアウト(動的ノード追加)
• サーバーが落ちても動作する(自動バックアップ・復旧)
• 事前の分割設計が不要
• ノード間データトランザクション
• Port Unification機能(一つのポート上でのSSL・Gzip・Http・バイナリTcp提供)

lisnrのサーバー構成

$サイバーエージェント 公式エンジニアブログ

クラスタグループに参加(JOIN)

$サイバーエージェント 公式エンジニアブログ

メッセージフォーマット
 キーとバリューで使えるデータタイプは下記となります。
• java.io.Serializableを実装したオブジェクト(Primitiveタイプも含め)
• lisnr.io.Distributableを実装したオブジェクト
• Google Protocol buffersメッセージオブジェクト

まとめ
 今回のレポートでは、信頼性を考慮した分散ストレージについて実装した内容を記述しま
した。
 自社サービスの成長によってDBに要求されるスケーラビリティは緊迫した状況になって
いるため、これを解決するシステムとして提供できればと思います。
今後は前述したパート2の課題に対して取り組んでいきたいです。