DevOps Awards 受賞の Priceline、疎結合アーキテクチャを活用
Google Cloud Japan Team
※この投稿は米国時間 2023 年 7 月 26 日に、Google Cloud blog に投稿されたものの抄訳です。
Priceline は 25 年間にわたりホテルや航空券などのサービスを提供し、オンライン旅行業界のリーダーの地位を保ってきました。Priceline 独自の取引技術はネゴシエーションとイノベーションを組み合わせ、数十億ものデータポイントを分析して、他のサイトでは見つからないような大幅な割引をお客様に提供しています。実際に、これまでに Priceline はお客様の旅費を 150 億ドル以上節約しました。このブログ投稿では、2022 年の DevOps Awards で「Leveraging Loosely Coupled Architecture(疎結合アーキテクチャの活用)」賞を獲得した Priceline による DevOps の実績をご紹介します。DevOps Awards の受賞者と、各受賞者が DevOps Research and Assessment(DORA)の指標と手法を活用してビジネスを成長させた事例の詳細については、まずこちらをご覧ください。
Priceline は、いちばんお得な旅行商品を、お客様が必要なときに見つけるのを支援するために設立されました。つまり、いちばんお得な商品の検索中に遅延や中断が発生すれば、売り上げに影響を与える可能性があるだけでなく、旅行者の選択肢が狭まります。私たちは、メンテナンス、トラブルシューティング、リージョンのストレステストなどのためにリージョン フェイルオーバーを定期的に実施していることが遅延の原因となっていることに気付きました。自社の変化するパフォーマンス指標に対応するために、自動スケール可能なコンピューティング リソースが迅速にスケールアップできないためです。こうした遅延は、次の問題の原因となっていました。
レイテンシに加えて、断続的な検索の失敗
必要に迫られない限り、リージョン フェイルオーバーの実行を躊躇してしまう
補正のために Google リソースを手動でスケールアップ、スケールダウンするオーバーヘッド
お客様の問題を避けるためのリソースの過剰プロビジョニングによる費用増加
未来に向けた課題の解決
Priceline のテクノロジー リーダーは、リージョン フェイルオーバーによる遅延を削減するためには、経営幹部と個々の実務担当者の両方が参加する DevOps 変革が必要であることに気付きました。具体的には、大量のプラットフォーム トラフィックをリージョン間で移行するのに十分な容量を確保しつつ、使用した容量に対してのみ料金を支払うようにする手段が必要でした。
この目標を達成するには、次のようなソリューションが必要でした。
動的
レスポンシブ
構成可能
API ドリブン
高いリソース効率
効率的なクラスタ管理
こうした課題に対処してプラットフォームの安定性を改善するため、当社は Google Cloud と提携し、DevOps Research and Assessment(DORA)リサーチに基づくソリューションの特定、導入、検証を行いました。DORA はこの種のプログラムの中では最大かつ最も長く続いているプログラムで、組織内のソフトウェア デリバリーと運用パフォーマンスを促進する能力を理解することを目的としています。加えて、Google Cloud が当社のチームによる DORA 能力の適用を支援したことにより、組織パフォーマンスが改善しました。
指標に基づくだけでは迅速にスケールアップできなかった自動スケール可能なコンピューティング リソースを補正するために、疎結合アーキテクチャを通して連携しながら動作する 2 つの最大化コンポーネントを活用するメカニズムを導入しました。
1 つめのコンポーネントは Python ベースの Bigtable 最大化ツールで、プラットフォームのトラフィックが問題に発展する前にクラスタを最適化します。この最大化ツールは、それぞれの Bigtable クラスタに Google Bigtable API を使用して、指定したプロジェクトとリージョンで各クラスタの現在の最小および最大ノード数を検索します。次にノードの最小数を増やして、一時的に最大ノード数と一致させます。コマンドを使うと元の最小数に戻ります。
2 つめのコンポーネントは Python ベースの Google Kubernetes Engine(GKE)デプロイ最大化コンポーネントで、Kubernetes API を使用して GKE クラスタ内にある各 HorizontalPodAutoscaler(HPA)オブジェクトのレプリカの最大数を検索します。HPA オブジェクトに必要なレプリカの最大数を検索し、その最大数と一致するように最小数を設定します。こうすることで、一時的に最大化された各 HPA は、反対側のリージョンからのトラフィック流入を処理できます。これも同じように、後続のコマンドを使って、各 HPA のレプリカの最小数を元の値に戻せます。さらに GKE デプロイ最大化ツールで、当社のチームは個々の HPA オブジェクト、環境およびリージョン内の名前空間全体、または JSON ファイル内で指定された複数のクラスタ、名前空間、HPA オブジェクトを指定することによって、最大化の対象を選ぶことができます。
この 2 本柱方式により、プラットフォームのトラフィックを受信する前に自動的かつシームレスにクラスタとデプロイを最大化できます。その後、わずかな時間だけ一時停止した後すぐに最適な値に戻すことで、不要な容量に対して費用が発生しないようにできます。このおかげで当社のチームは、迅速かつ確実に問題を軽減し、後からログを調査し、あらゆるメンテナンスの負担や本番環境に影響しうる構成ミスのリスクを実質的に排除できます。
結果
安定性を保ちながらスピードを最適化することで、Priceline チームは、お客様の検索が中断されることを心配せずに、自信を持ってリージョン フェイルオーバーをスケジュールできます。これにより、DORA の 4 つの主要な指標の大幅な向上が示すとおり、目に見える改善につながりました。
デプロイの頻度: GKE ベースと Compute Engine ベースのアプリケーション向けに構築されている再利用可能な統合 CI / CD パイプラインを使用して、必要に応じてアプリケーションを本番環境に 1 日に数回デプロイできるようになりました。ロールバック機能が組み込まれているため、保護が強化されています。この安定性により、デプロイの頻度は 70% 以上増加しました。
変更のリードタイム: リージョン フェイルオーバーで変更を行うのに必要な時間を 30% 削減できました。
変更時の障害率: クラウドに移行したことで、複数のゲートによる統合 CI / CD プロセスが利用可能になりました。これにより、チームが必要なテストを実施しながら適切かつ再現可能なプロセスに沿うことができ、構成のずれが生じることもありません。現在は、ソフトウェアの開発ライフサイクルのより早い段階で問題を発見して軽減できるので、発生する可能性がある本番環境でのインシデントの調査に費やされる時間が 90% 以上も削減しました。
サービス復旧時間: テンプレート化およびカスタマイズされた APM アラートを活用して、異常動作、アプリケーションのパフォーマンス低下、全面的な障害をリアルタイムで検知し、対応できます。これにより、リージョン フェイルオーバーおよびフェイルバックの所要時間を 43% 以上削減しました。大半の本番環境の障害復旧は数分以内に完了します。
DevOps Awards 受賞者を紹介するシリーズの今後のブログ投稿にも引き続きご注目ください。DORA リサーチについて詳しくは、2022 年の State of DevOps Report をお読みください。