Atlassianは最近、400万のJiraデータベースをAmazon Auroraに移行し、コスト削減とJira Cloudプラットフォームの信頼性向上を目指した。多くのファイルが関与し、マネージドサービスの制約があるため、チームは従来のクラウド移行戦略が実行不可能であったため、プロセスを調整するカスタムツールを開発した。
Atlassianのエンジニアリングブログの記事で、チームは最大4000のデータベースを持つ数千のPostgreSQLクラスターを移行する際の技術的な課題と成果について説明している。
AtlassianのJiraのアーキテクチャは、テナントごとに1つのデータベースを使用する(テナント数が少ない場合に通常正当化されるアプローチ)もので、これにより400万以上のPostgreSQLデータベースが存在する。Atlassianのプリンシパルサイト信頼性エンジニアPat Rubis氏は次のように説明している。
テナントごとに1つのデータベースを持つことは一般的ではありませんが、Atlassianの大規模なスケールでの隔離、スケーラビリティ、および運用制御を最大化するためにこのアプローチを選択しました。これにより、1つのテナントのデータが他のテナントによって偶然または悪意を持ってアクセスされることを防ぎ、異なるサイズのテナントに対して負荷を分散し、パフォーマンスを最適化するためにフリートを水平にスケールすることが可能です。
特定のアーキテクチャのため、チームは負荷の均等な分散を維持するために、インスタンス間でデータベースをリバランスする必要がある。2023年後半、チームはJira Cloudプラットフォームのすべてのアカウントを含むフリート全体をAmazon Auroraに再プラットフォーム化することを決定した。目標は、Auroraの優れたSLA(99.99%)を活用し、リーダーインスタンスの自動スケーリングによる弾力性を高め、コスト最適化を達成することだった。
プロジェクトは数か月間続くと見積もられ、テナントのダウンタイムと移行コストを最小限に抑えることが目指された。AWS Step Functionsを使用してオーケストレーションされ、アプリケーションサーバー上のテナントのデータベースエンドポイントを即座に上書きするためにフィーチャーフラグに依存していた。通常、Amazon RDS for PostgreSQLインスタンスをAuroraに変換することは簡単な作業だが、インスタンスごとのデータベースの多さにより、各テナントが独自の接続エンドポイントと資格情報を持つため、すべてのテナントを一斉に切り替える必要があった。
さらに、1つのJiraデータベースはディスク上に約5,000のファイルがあり、PostgreSQLインスタンスごとのファイル総数は数百万に達し、Aurora側の制限に達した。新しいレプリカインスタンスがステータスチェック活動を行う際にタイムアウトし、クラスターを安全に変換するAtlassianの能力に影響を与えた。移行をオーケストレーションするために「ドレイニング」と呼ばれる異なるアプローチが考案され、最初に変換されるインスタンス上のテナント数を減らし、クラスター間で移動するデータベースの数を制御した。
出典:Atlassianブログ
移行プロセス中の通常の運用への影響を最小限に抑えるために、プロジェクトの課題の1つは、ソースとデスティネーションの同時実行性を制御することだった。Rubis氏は次のように付け加えている。
最終的には、各リージョンで移行をするためにどれだけの追加インフラストラクチャを望むか(およびそのコスト)と、各リージョンが完了するまでにどれだけの時間を許容するかのバランスを見つける必要がありました。
ピーク時には、Atlassianは1日あたり最大90,000件のJiraデータベースを移行し、平均で1日あたり38,000件のデータベースを移行した。AtlassianのシニアエンジニアリングマネージャーであるCassian Cox氏はLinkedInで次のようにコメントしている。
これはAtlassianでの私の時間の大部分を占めた大規模なインフラストラクチャ作業でした。これにより、スケーラビリティ、信頼性、およびコスト効率の大幅な改善が実現しました。
出典:Atlassianエンジニアリングブログ
プロジェクト全体では、2,403個のRDSデータベースインスタンスが変換され、260万のデータベースが移行され、180万のデータベースがソースインスタンスからドレインされた。
全体として、チームはJiraで使用されるデータベースファイルの総数を274億以上と見積もっているが、達成されたコスト削減に関する追加の指標や詳細は公開していない。
Atlassianが経験した起動タイムアウトのしきい値は、現在Amazon Auroraのクォータおよび制約ページには記載されていない。