レポート

スケールするメッセージングシステムを構築せよ ―チャットワークとNTTデータが挑んだKafkaベースの"土管"づくり

この記事を読むのに必要な時間:およそ 4 分

Kafkaを中心としたOSSでシステムを構築

NTTデータが今回のCQRS+イベントソーシングシステムを実装するにあたって,採用したプロダクトは以下になります。いずれもオープンソースのプロダクトです。

Akka
非同期で疎結合なメッセージングを実現する並列分散処理のためのアクターモデルなフレームワーク。ノンブロッキングI/Oを前提に設計。今回のシステムではコマンドサイドとクエリサイドのAPIサーバで使用。レジリエントな設計が可能で高いパフォーマンスを実現
Kafka
データプロセッシングのパイプラインとして機能するpub/sub型のメッセージングシステム。今回のケースではイベントソーシングのハブとなるセントラルログシステムとして活用。低レイテンシ/高スループットとスケールのしやすさ,耐障害性の高さで,メッセージングシステムのデファクトになりつつある
Kafka Streams
Kafkaに同梱されているライブラリで,ストリーム処理をシンプルに記述できる。Kafkaの一部であるため,今回のシステムのコアであるKafkaとの親和性が高く,容易で迅速な実装が可能に。Akkaと組み合わせてリードモデルの変換アダプタ(アップデータ)を記述
HBase
HadoopエコシステムのNoSQLデータベースで大量のリード/ライトのリクエストに効率的に対応可能。今回はクエリサイドでリードモデルやコミュニケーションサービスのマスターデータをストアするために利用

今回のシステムにおけるアーキテクチャ全体図。主役はやはりKafka

今回のシステムにおけるアーキテクチャ全体図。主役はやはりKafka

このシステムの最大のポイントは,やはり現在もっともスタンダードなメッセージングシステムとしての地位を獲得しつつあるKafkaをパイプラインとして活用しているところだと思われます。NTTデータ システム技術本部 方式技術部 第一統括部 OSSプロフェッショナルサービス 課長代理 土橋氏はKafkaを選択した理由として「スケーラビリティに加え,パーティション単位のメッセージの順番が担保されており,かつ,さまざまなサービスとインテグレートしやすい」という点を挙げていました。Kafkaには負荷分散の効率を高めるためにトピック(メッセージの単位)を分割する「パーティション」という機能が実装されており,同じパーティション内であればメッセージの順番は保証されます。このシステムでは「チャットルームのIDをベースにパーティショニングのキーを設計し,メッセージの順番を保っている」⁠大村氏)とのこと。

ただし,ChatWorkでは1,000以上のパーティションを管理しており,またKafkaには自動でパーティションをリバランスする機能がサポートされていないため,運用で苦労している部分もあるようです。また「パーティションの数はメッセージのプロデュースのコストに直結するため,割り当てはできるだけシンプルかつデフォルトを推奨」⁠パーティションのキーは一度設定したら変更しない」など,パーティション設定におけるTipsを把握しておくことも重要だそうです。

さらに新機能の統合へ

PoCも含めて約1年の開発期間を経て本番稼働となった本システムですが,⁠既存のシステムと比較してパフォーマンスにおいて大きな改善が見られている」と大村氏は説明します。本番稼働後も目立ったトラブルはなく,順調に稼働しているとのこと。以下,既存のシステムとの比較として大村氏が挙げたポイントを抜粋します。

コマンドサイド(Write API)
スループット(負荷テスト)は2つのwrite-apiポッド(コンテナ)だけで既存システムのピーク時の40倍に,レイテンシは200ミリ秒から80ミリ秒に,イベント発生からKafkaブローカーへの配信までの時間は20ミリ秒
クエリサイド(Read API)
スループット(負荷テスト)は4つのread-apiポッドで既存のピーク時とほぼ同等,レイテンシは70ミリ秒で同じ,HBaseのブロックキャッシュヒット率は99%
リードモデルアップデータ
リードモデルがアップデートされるまでのタイムラグは80ミリ秒,障害時(ローリングアップデートのためにコンシューマポッドがダウンした場合など)にもパーティショニングの再割当てが自動で行われ,処理が継続されるなど,AkkaおよびKafkaがレジリエントに機能

現在はKafkaがPub/Subモデルに基づき複数のシステムと連係しやすいことを活かして,他のマイクロサービスを統合することも始めており,たとえばモバイルデバイスへの通知サービスや全文検索サービスなどに使うイベントフォワード機能や,Webフックサービスを提供する機能も追加しているそうです。


CQRSやイベントソーシング,あるいはKafkaやAkkaといったオープンソースプロダクトは,とりたてて最新の技術トレンドというわけではなく,またミドルウェアという目に見えにくいレイヤを担当する部分でもあるため,あまり目立った適用事例はこれまで発表されてきませんでした。ですが今回のChatWorkの事例は,現在展開中のコラボレーションサービスにおけるスケールを前提としたKafkaのエンタープライズな導入事例として,国内のみならず,グローバルでも非常にユニークなケースであるといえます。

また大村氏は「今回のシステム構築にあたってはNTTデータがもつオープンソースに関する技術力や知見に大いに助けられた」と振り返っていました。今回のシステム構築は,ChatWork側の要件がクリアであり,同社にクラウドやデータベースに関する相応の技術力があったからこそスムースに運んだ部分は大きいのですが,それに加えてオープンソースのエキスパートが揃ったインテグレータが支援にあたったことで,より高いレベルのゴールを達成できた印象があります。

KafkaやAkka,HBaseなどは単体での導入もさることながら,それぞれの特徴を理解してコンポーネントとしてこれらを組み合わせ,堅牢で信頼性のあるシステムを構築できる人材はそう多くはありません。オープンソースが社会の重要なシステムで使われる機会が増えているからこそ,ビジネスの要件に見合った適切なアプローチとプロダクトを選び,実装できるスキルセットを備えた人材の育成が今後はますます求められるようになることは間違いないでしょう。

セッション後の1枚

セッション後の1枚

余談ですが,筆者は年に10回ほど米国を中心に海外のITイベントを取材しますが,今回のように日本のユーザ企業とインテグレータがグローバルなカンファレンスの場で登壇し,最先端のユースケースを英語で発信するという光景を見る機会は,残念ながらまだそれほど多くはありません。ですが今回のように日本企業がみずから進んで情報公開を行うことで,グローバルで関心をもたれる機会が増えれば,日本企業のIT業界における存在感もすこしずつ増していく気がします。そうした意味において,今回の両社による発表はあとに続くIT関係者に次の一歩を踏み出させるきっかけとなったセッションであったように思います。

著者プロフィール

五味明子(ごみあきこ)

IT系の出版社で編集者としてキャリアを積んだ後,2011年からフリーランスライターに。フィールドワークはオープンソースやクラウドコンピューティング,データアナリティクスなどエンタープライズITが中心。海外カンファレンス取材多め。Twitter(@g3akk)やFacebookで日々IT情報を発信中。

北海道札幌市出身/東京都立大学経済学部卒。

コメント

コメントの記入