Airbibでは,アーキテクチャをSOAに変更したことにより,サービスのパフォーマンスとサイトの信頼性を改善することができた。ビルドとデプロイ時間の高速化によって開発生産性が,オーナシップの明確性とバウンダリの改善によって効率が,それぞれ向上している。同社のソフトウェアエンジニアであるJessica Tai氏がQCon London 2019で,"Airbnb’s Great Migration: Building Services at Scale"と題したプレゼンテーションを行った。
Airbnbでは,エンジニアリングチームは急速に拡大したが,モノリス構造のシステムの開発効率性と信頼性に関する能力は,チームと同じように順調に向上していなかった,とTai氏は言う。システムのデプロイに数百人のエンジニアが関与するため,コードのデプロイには長時間(多くの場合数時間)を要していた。モノリスの結合度は増大し,ナビゲートやコーディング,デバッグ,さらにはオーナシップも混沌としていたのだ。エンジニアの生産性は低下し,開発ライフサイクルに対するフラストレーションは増加した。
QCon SF 2018でTai氏は,AirbnbのSOA移行に関するトレードオフの概要とモチベーションについて,"The Great Migration: from Monolith to Service-Oriented"と題したプレゼンテーションを行った。その内容は,長期にわたる開発への準備,段階的な比較と移行,標準化と自動生成コードによるサービスのスケールアップ,フレームワークやツール,ドキュメントへの多くの投資といったものだ。SOAはAirbnbのビルドとデプロイに要する時間を改善しただけでなく,レイテンシの低下や信頼性の向上も実現させた。詳細はInfoQの記事"Airbnb’s Migration from Monolith to Services"で紹介されている。
サービス指向アーキテクチャとマイクロサービスには,サービスを単位とするビルドとデプロイのプロセスがある,とTai氏は言う。サービスのスコープとサポートAPIに対して,オーナシップがより明確に定義される。開発者の生産性と開発速度を向上させる上で,SOAが有効だと同社では判断した。
モノリスを分解することによって,エンジニアたちは,さまざまな機能やコードのセクションのオーナシップに関して真剣に取り組まざるを得なくなった,とTai氏は述べている。SOAでは,個々のサービスをひとつのチームが所有し,サービスに責任を負うエンジニアが明確になる。オーナシップとバウンダリの明確性を向上することは,チームがプロダクトをより効率的に開発する上で有用である,と氏は言う。
InfoQはJessica Tai氏に,SOAの設計原則とその実践,SOAへのアーキテクチャ変更によってAirbnbが得たメリット,マイグレーション作業を促進するためにAirbnbが実行したプロダクト文化へのシフト,などについて聞いた。
InfoQ: スケーラビリティとパフォーマンスに優れたサービスを開発する上で,どのような設計原則やSOAのグッドプラクティスが有効でしたか?
Jessica Tai: 設計原則としては,次のようなものです。
- データストレージのオーナを単一サービスとすることによる,アクセスのカプセル化
- サービスは特定の問題に対処するべきである
- 機能の重複を回避する
- データ更新を標準化されたイベントによって公開する
- 技術的アーキテクチャや可観測性や警告など,ベストプラクティスを用いたプロダクト開発("プロトタイプ","管理者専用",厳しい納期などを理由とする省略化の回避)
グッドプラクティスには,次のようなものが含まれます。
- 一貫性のあるAPI、監視可能性、クライアントとサーバの機能、ビルドとデプロイのプロセス標準化
- 定形コードや共有フレームワークを人の手書きに頼らず、コードを自動生成するツールやソリューションに投資する
- 自動生成したクライアントとサーバに信頼性や堅牢性を持たせることで,"早く失敗する(fail fast)"
- モノリスとサービス要求のライフサイクルを非同期に実行することで,プロダクションパスに余分なレイテンシが加わらないようにする
- 依存関係へのRPCを非同期で実行することにより,並列化によるパフォーマンス向上を図る
InfoQ: アーキテクチャをSOAに移行したことは,Airbnbにとってどのようなメリットがありましたか?
Tai: 最初のSOA関連サービスでは,中核となるホームデータに重点を置いていました。モノリスでホームデータを読み書きしていた方法を変えることなく,バックグラウンドで動作させることがその目的でした。さらに別の中核的なデータサービスの開発に着手すると,ホームの説明をするプレゼンテーションサービスを始めとした,さまざまなプレゼンテーションサービスでそのメリットを感じられるようになりました。
最初のメリットは,新たなサービスをJavaでマルチスレッド化して,他のサービスを非同期に呼び出すようにしたことによるパフォーマンスの向上でした(モノリスではRubyを使用していたため,多くの依存関係が同期的に実行されていたのです)。
ビルドやデプロイ時間の高速化といった開発者の生産性面でのメリットは,もう少し後になりました。SOAをサポートするためのサービスフレームワークや開発者インフラストラクチャチームが構築中であったためです。
InfoQ: マイグレーション作業を促進するためのプロダクト文化への移行について,Airbnbではどのようなことを行ったのですか?
Tai: サービスへの移行を完全に成功させるためには,会社全体が一丸となって進むことが必要です。純粋に技術的なイニシアティブではありません。
プロダクト開発の速度への影響を最小限にするため,Airbnbでは,サービス構築を迅速かつ簡単で,信頼性と堅牢性の高いものにするための投資を行いました。サービスのビルドやサービス内の機能のコーディングがモノリスのコーディングやデプロイより大幅に遅ければ,すべてのエンジニアチームの開発速度を向上することは不可能だからです。
マイグレーション作業を新機能のローンチと同等の優先事項として取り入れると同時に,マイルストーン達成を祝うことで,この大規模なアーキテクチャ再構築作業が広く認知されるようになりました。AirbnbはSOA開発を自社の目標に取り入れることで,この長い道のりを最後まで見届けるというコミットメントを示しているのです。
InfoQはQCon London 2019に関して,Q&Aやサマリや記事を通じてお伝えしている。