Uberは、ハイブリッドクラウドモデルを使って、サービスのデプロイメントを自動化した。すべてのサービスを同じロールアウトテクニックとワークフローを使ってデプロイすることにより、デプロイメントの安全性を保証し、問題の軽減を図る。さらに、クラウド間の差異を抽象化することで、任意のプラットフォーム上で動作するサービスの構築が可能になる。
UberのソフトウェアエンジニアであるMathias Schwarz氏は、QCon Plus 2020で講演し、同社が単一データセンタの小さなエンジニアリングチームから、複数のクラウドプラットフォームに対して継続的に変更をデプロイする数千人のエンジニア組織へとスケールアップした過程を説明した。
Uberでは毎週、数千人のエンジニアたちが、何千もの変更をプッシュアウトしている、とSchwarz氏は言う。業務時間中、Uberのシステムでは、いずれかの部分が絶えずアップグレードを開始しているのだ。ホストフリート全体が同じひとつのバージョンを実行していることは決してない。
Uberが複数のクラウドプラットフォームに対して継続的に変更をデプロイする様子について、Schwarz氏は次のように説明している。
当社が開発したデプロイシステムのμDeployと、そのリプレースであるUpは、複数のクラウドプロバイダの違いを理解しているので、開発者がそれを意識する必要はありません。システムはゾーンで構成されていて、それぞれがパブリッククラウドプロバイダか、あるいは自社内の物理的ハードウェアによってバックアップされています。このような構成で、クラウド間の差異を抽象化することによって、インフラストラクチャチームはクラウド利用の管理が、エンジニアは任意のクラウドプラットフォームで動作するサービスの構築が、それぞれ可能になっているのです。
継続的かつ高頻度のデプロイは、早い時期からUberのエンジニアリング手法を形作っていた。変更を運用システムにデプロイすることに関して、同社のサービスチームは高いレベルの自律性を保持している、とSchwarz氏は言う。
平均するとUberでは、およそ4,000あるサービスが、毎週5,000回のデプロイを運用システムに対して行っている。迅速なデプロイは変更を素早くユーザに提供できると同時に、サービスを提供する市場からの反応を短時間で得ることが可能になる、とSchwarz氏は言う。
Uberのデプロイの構造とデプロイメントの自動化方法、自動スケーリングやサービス管理の自動化に関する手法について、Mathias Schwarz氏にインタビューした。
InfoQ: μDeployによるデプロイは、どのような構造なのでしょうか?
Mathias Schwarz: μDeployを使うことで、すべてのサービスを同じロールアウトテクニックとワークフローを使ってデプロイするようになりました。これにより、サービスをロールアウトする方法はひとつのみになり、それを漸次改善することで、当社のおよそ4,000のサービスすべてがメリットを享受できるようになります。さらに、高度な安全性を持ってサービスをロールアウトできることを保証し、ロールバック機能をシステムの基本機能として組み込むことが可能になります。エンジニアにとっては、システムのデプロイ処理を信頼できると同時に、動作が期待しないものであった場合にも迅速に対応することが可能になります。
InfoQ: μDeployでは自動化されていなくて、Upで自動化されるものは何ですか?
Schwarz: 会社が成長した結果です。μDeployでロールアウトなど、ある程度のことは自動化できました。ゾーンを越えたロールアウトはすでに実現していたのです。現在行っていることは、配置の自動化にも関係しています。Uberでは、ゾーンの一部をオンプレミスキャパシティとして保持し、一部をクラウドキャパシティとしてAmazonやGoogle Cloudに持つという、ハイブリッドクラウドモデルを採用しています。現在手掛けていることのひとつは、サービスの配置と、クラウドとオンプレミスの間、あるいはクラウド間の移動を自動化することです。自動スケーリングの大規模な適用も行っています。これまではありませんでした。
InfoQ: 自動スケールがなかったのですか?あるいは、望んでいる"自動化"が実現できていなかった、という意味でしょうか?
Schwarz: ある程度の自動化はあったのですが、完全に自動ではなかったのです。当社はハイブリッドクラウドモデルに移行していますが、以前はオンプレミスが中心でした。自分でハードウェアを調達して管理しなければならないオンプレミスよりも、クラウドの方が簡単に容量を増やすことができます。ですから自動スケールは、クラウドを使用する場合の方がより重要になってきます。当社では、ビジネスメトリクス(プラットフォームを使用しているカスタマの数など)とテクニカルメトリクス(現在のCPU使用率など)の組み合わせをベースとして、自動スケーリングを行っています。
InfoQ: サービス管理はどのように自動化するのでしょうか?
Schwarz: ロールアウトに関わる日々のサービス運用は自動化されましたが、当社のマルチクラウドシステムのメリットすべてを向上するためには、それ以上のものが必要だということが分かってきたのです。クラウドプロバイダを使えば新たなゾーンをセットアップするのは比較的簡単ですが、バックエンドサービスの重要部分を新しいゾーンに移行するには、多くの作業者が何週間も費やして、非常に面倒な手作業のプロセスを行わなくてはなりませんでした。Upによってサービスのゾーン配置が自動化されたので、エンジニアリングに時間を掛ける必要はもうありません。さらに、先程述べたようなサービスの自動スケーリングにも着手しています。