クラウドコンピューティングが普及し,
これはサーバやストレージといったハードウェアリソースだけではなく,
リアルタイムなスケーリングへのニーズは現在,
増え続けるメッセージをリアルタイムに処理するために
「コミュニケーションの変革を通じて,
セッションに登壇したチャットワーク コアテクノロジー開発室 ソフトウェアエンジニア 大村伸吾氏はチャットワークのサービスの特徴として
コミュニケーションの多様化というトレンドを受け,
- 現状を超えた"スケールアップ"ができない
- チャットワークがバックエンドとして利用しているAWSのデータベースインスタンスはAmazon Auroraの
「db. r3. 8xlarge」, メモリ最適化に特化したクラスの中でも最上級のスペック (vCPU 32, メモリ244GB, ネットワーク10Gbit) を備えたインスタンスであり, これ以上のスケールアップは現状では不可能となります。 - ACIDではスケールしない
- Auroraはクラウドネイティブなデータベースですが,
基本的にRDBMSであり, ACID特性を満たすことを要求されるため, とうしてもスケールしにくいというトレードオフが発生します。これを回避するには 「一貫性 (Consistency) のレベルをゆるめることを受け入れる必要がある」 と大村氏は語っています。 - モノリシックな構成では困難
- デプロイ,
メンテナンス, 最適化といった面からも, モノリシックなバックエンドではシステムを維持することが困難になっていました。
これらの課題から,
- スケールとレジリエンスを担保するレベルを分離する
- APIサーバ
(ステートレス) はレジリエンス優先で高スループット&低レイテンシな設計に, 加えてフォルトトレラントで障害時の自動復旧も行う。一方でストレージ (ステートフル) は永続性と予測が重要, 必要なときにスケールできる状態にしておく。レジリエンスやフォルトトレラントはAPIサーバほど重要ではないが, あったほうがよい - 弱いレベルの一貫性
(イベンチュアル一貫性) を受け入れる - 一時的に一貫性が保たれていない状況がある
(読み込んだデータが多少古い可能性がある) ことを許容する。最低限, 同じチャットルームにいる全員が同じ状況下でメッセージを閲覧できていることを担保する
という2つの結論でした。そしてこの要件を満たすシステム構築を依頼されたのがNTTデータでした。
「リード」 と 「ライト」 に別々のモデルを適用
NTTデータはHadoopやSpark,
リード
このように,
今回のケースでは,