スケーラブルなマルチリージョンSaaSソリューション
1つのインスタンスからグローバルネットワークへ。ディストリビューション、プロモーション、デプロイメントをSaaSへ
他の多くのプロダクションDevOpsエンジニアリングチームと同様に、私たちJFrogチームも20以上のクラウドリージョンにまたがるAWS、Azure、GCPに1日に数回、新しいバージョンリリースをデプロイしています。このプロセスは以前は何時間も要し、他のチームによるメンテナンスと並行して行われた場合は失敗する可能性さえありました。
2021年に進行中のクラウド改善の一環として、自社のSaaS環境、つまりエンドユーザーへのあらゆる種類のソフトウェアリリースのSaaS展開に対応するために使用しているシングルインスタンスの設定を変更することにしました。私たちは1つのメインサイトから大規模な地域にわたってソフトウェアを配布したいと考え、それには大規模な自動化が必要で、完全な証明とテスト、スケーラブルなインフラを使用する必要がありました。
私たちは「自分たちのドッグフードを食べる」ことに決め、シングルインスタンスのJFrog ArtifactoryをマルチインスタンスのJFrog Platformにアップスケールし、さらに分散エッジをセットアップしました。
当社の使用例
以前はプロダクション環境で1つのJFrog ArtifactoryインスタンスをプライベートDockerおよびHelmレジストリとして使用することで多くのメリットを享受していました。そのおかげでバイナリアーティファクトを信頼できる唯一の情報源から、あらゆるJFrogクラウドリージョンに保存、共有、デプロイすることができたのです。
複数プロダクションリージョンの単一障害点
このシングルインスタンス方式の最大のメリットは、そのシンプルさにあります。しかしスケーラブルではありません。シングルインスタンスの設定は需要が少ない環境では最も効率的な選択肢かもしれませんし、設定も比較的簡単です。しかし、同じ設定で静的コンテンツと動的コンテンツの両方を提供する場合、需要が大きくなり非効率的になります。また、1つのインスタンスを使用することで、たった1つの不具合や故障が原因でシステム全体が動かなくなるという事態を招く可能性があり、潜在的なリスクを抱えています。
さらに、従来は数週間から数カ月ごとにリリースされるバージョン単位でのデリバリが一般的でした。新しいバージョンがリリースされるたびに運用チームが手作業でソフトウェアをアップデートしなければなりませんでした。それが今、すべて変わりました。
ソリューション
JFrog Platformは開発者のコードからプロダクション稼動までシームレスで安全なソフトウェアリリースの流れを可能にします。
私たちの構成はマルチクラウドでHA冗長ネットワークアーキテクチャを構成しています。つまり、単一障害点がなく、Artifactory Edgeのノードが1つでも稼働していれば、社内システムの運用を継続できます。これにより、稼働率は最大で「ファイブナイン」まで向上しました。
.JFrog Cloudは現在、当社のクラウドArtifactory Edgeからプロダクション用ランタイムクラスターへの何百万ものダウンロードを処理しています。インターネットや他のJFrogサーバーから配信されるものはありません。
複数のプロダクションリージョンに対するマルチインスタンスアプローチ
私たちの日々の仕事の流れ:Dev2Cloudのプロダクションフロー
社内ではクラウドプロダクションに新しいバージョンを提供する方法について、厳格なフォワードコントロールを実施しました。以下はその2つの例です。
- RnDデリバリーグループのみが関連する製品のCIジョブを介して、エッジおよびクラウドステージングにバージョンをデプロイおよびプロモートします。
- CIジョブでクラウドプロダクション環境にプロモートまたはデモートするのはプロダクションデリバリーグループのみです。エッジにデプロイされていないバージョンをプロモートされた場合は失敗します。
1. ソフトウェア配布 – RnDデリバリーグループ
今日、私たちのすべてのデリバリーチームは信頼できる不変のリリース・バンドルを使用して、リリースをArtifactory Edgeにプロモートする方法を知っています。これには社内のオフィシャルなJFrog Platformリリースやchart依存関係、外部のサードパーティ依存関係が含まれます。
2. ソフトウェアデリバリー – プロダクションデリバリーグループ
JFrog Distributionは大規模なデプロイメントと同時ダウンロードを高速化し、ハイレベルな同期ダウンロードをサポートします。
私たちはE2Eクラウドのプロビジョニング、デプロイメント、メンテナンスを担当する社内デプロイサービス(上記ソリューションセクションの図中のJFrog内部クライアントを参照)を開発しました。このサービスはHelm chartとDockerイメージ(基本的に私たちのワークロードをデプロイするもの)を含むリリースバンドルをDevCenterから取得します。
無限のスケーラビリティ – ネットワークの高速化と耐障害性
大規模なインフラのフットプリント、ユーザー、ダウンロードの急増に対応するため、ソフトウェアの更新を迅速にリリースするにはDNSソリューションが必要です。私たちのチームはスケーラブルなHAソリューションを確実にし、規模に応じたネットワーク使用率と耐障害性を向上させるために、多大な投資を行っています。DNSソリューションのためのいくつかの異なるオプションを検討した後、私たちはレイテンシールーティングポリシー(DNSソリューション)にAWS R53を使用することに決定しました。
私たちのユースケースではソフトウェアのリリースバンドル(DockerイメージとHelm Chart)のコレクションを用意し、異なる地域のクライアントが単一のエンドポイント(レイテンシールーティングポリシー)を介して利用可能なArtifactory Cloud Edgeのいずれかからダウンロードできるようにしています。
レイテンシーベースのレコードは関連するヘルスチェックを適用することで、トラフィックを最適なレイテンシーと往復時間の短いエッジにルーティングできるため、最適な選択肢となります。AWS R53をに使用することで、権威あるサーバーがDNS階層を横断して最終的な回答を取得するため、最終回答解決までの時間を短縮するALIASレコードを使用する利点を得られます。
結果
1年近くプロダクション運用を続けた結果、クラウドのデプロイメントに大きな改善が見られました。JFrog Platformを利用することで大規模でインフラ非依存からあらゆるクラウドサーバーにアップデートをリリースする際に、デプロイのスピード、ガバナンス、ネットワークの利用率を向上させることができました。
JFrog Academyの無料アカウントを作成し、今日から学習をはじめましょう。
最後に
私たちの経験ではマルチインスタンスアプローチは非常に好評なため、初期設定を多少増やしてもいいのであれば、最初からマルチインスタンスにすることをお勧めします。
分散型クラウドソリューションの設計と実装に貢献してくれたメンバーに感謝します。Eran Nissan、Eldad Assis、Matan Katz、Asaf Federman、Ronny NivそしてAWSの方々に特に感謝いたします。さらに、JFrog Distributed* Cloud機能、プロセス、設計上の決定についてサポートと支援をしてくれたCTO、クラウドプロダクション、DevOpsの各チームにも感謝します。
JFrog Cloudのためにさらなる高度な機能を作り続ける私たちのチームからの興味深いアップデートにご期待ください。