Cells: 組織移行
| Status | Authors | Coach | DRIs | Owning Stage | Created |
|---|---|---|---|---|---|
| proposed | @dbalexandre, @mkozono | @ayufan, @sxuereb | @sranasinghe, @luciezhao | ~devops::tenant scale | 2024-05-01 |
概要
すべてのユーザーデータは Organization でラップされ、隔離を提供し、特に Legacy Cell から別の Cell への Organization の移動を可能にします。
Protocells では、Organization に移行してから Cell に移行できるトップレベルグループで構成されるコホートを定義します。
コホートの定義が作業の最初の部分ですが、Legacy Cell から Cell に Organization を移動するためのツールも構築する必要があります。
このデザインドキュメントは、ソースから宛先に Organization を移動する移行ツールに焦点を当てています。コホートとトップレベルグループの移行についてのみ言及し、それらの実装の詳細には触れません。
動機
Cells は GitLab.com を水平スケールするという主要な目標を達成して初めて成功します。スケールするためには、データベーススケーリングの限界に達する前に負荷を永続的に削減するために、Legacy Cell にある既存データを新しい Cell に移行する必要があります。この移行機能は、GitLab が成長するにつれて GitLab.com サービスを将来に備えるために不可欠です。
ゴール
- 中断可能: コンピューターの障害やオペレーターによる停止など、移行が中断された場合は、中断した箇所から再開できる必要があります。
- 手放し: 移行はバックグラウンドで実行され、チームメンバーのラップトップで移行を実行する必要がありません。
- コードの再利用: Geo は一方の GitLab インスタンスから別のインスタンスへデータを複製するために構築されており、私たちも同じことをしていますが、Organization レベルで行います。
- データ損失なし: ソース Cell に存在するすべてのデータが宛先 Cell で利用可能である必要があります。つまり、Object Storage、Postgres、Advanced Search、Exact Code Search、Git、Container Registry などのすべてのデータタイプを考慮する必要があります。
- Cell のダウンタイムなし: Organization を移行する際、ソース Cell と宛先 Cell は転送される Organization を除いてダウンタイムを発生させてはなりません。
- 目に見えるダウンタイムなし: Organization はデータ移行中であることを認識すべきではありません。ゼロダウンタイムは実現できませんが、最初はある程度のダウンタイム/読み取り専用から始め、プロファイルの高い顧客を移行するにつれて継続的に改善します。
- 大規模 Organization のサポート: テラバイト規模のデータを適時に移行できる必要があります。つまり、ツールをデータにスケーラブルにする必要があります。
- 並行性: 複数の Organization を互いに影響を与えることなく同時に移行できる必要があります。
- Cell ローカル: すべての移行に対する単一障害点を防ぐために、移行は宛先 Cell で実行される必要があります。
- 最小限の使い捨て作業: 移行ツールを複数回書き直すのではなく、イテレーションする必要があります。
- オブザーバビリティ: 常に移行の状況と問題の有無を把握できる必要があります。
- Cell 対応: 移行ツールは、Topology Service の情報も更新して、正しい Cell へのリクエストルーティングを開始する必要があります。
- ユーザーに見えるパフォーマンス影響なし: 移行はソースまたは宛先 Cell のいずれのパフォーマンスも低下させてはなりません。
- ロールバック機能: Organization をソースの宛先に戻す必要がある場合、これが可能である必要があります。
- ドライラン サポート: オペレーターは実際にデータを移動することなく、検証と時間見積もりでテスト移行を実行できる必要があります。
- セキュリティ: 転送中のすべてのデータは暗号化され、Cell 間の通信は適切な認証と認可を使用する必要があります。
非ゴール
- どの Organization がどの Cell に存在するかの決定。
- セルフホスト型インストールのサポート。
- 任意の災害復旧ツールの代替となること。
コホート定義
Protocells の終了基準を満たすために、上位 1,000 のアクティブな名前空間の相当部分を移行する必要があると予想されます。これらはデータベース時間の約 67% を消費しています。
コホートとは、単一のコレクションとして他の Cell に段階的に転送/移行するために選択された GitLab ルート名前空間とそのデータのセットです。
コホート命名規則: テストコホートには 0 を使用します。これは本番コホートに進む前に正常に完了する必要があるためです。後続のコホート(A、B、C など)は、順次依存関係なしに並行して実行できることを示すために文字を使用します。
| コホート ID | コホート名 | コホートサイズの目安 | 目的 | 簡略化された資格基準 | 終了基準への影響 | 詳細 |
|---|---|---|---|---|---|---|
| コホート 0 | テストコホート | 最大 100 組織 | テスト名前空間を使用して、エンドツーエンドの転送・移行プロセスをテストする | なし | 移行計画 | |
| コホート A | 非アクティブな無料ユーザーのサブセット | 最大 5,000 組織 | 実際の本番環境で Protocells を確立し、移行プロセスを改善する | - 非アクティブなルート名前空間 - 無料プラン - プライベートのみ | データベースサイズへの微小な影響 | |
| コホート B | アクティブなオプトインベータ | 最大 1,000 組織 | 実際の日常的なアクティブユーザーによる経験を積む | - オプトイン / ガイド付き - アクティブなルート名前空間 - 無料または有料 - プライベートのみ | WAL、LWLock、データベースサイズへの微小な影響 | ADR-001: 基準 |
| コホート C | 上位 1,000 オプトイン | 最大 300 組織 | Legacy Cell の負荷を軽減する | - オプトイン / ガイド付き - データベース時間による上位 1,000 のルート名前空間 - プライベートのみ - 前提条件: 機能同等性 | WAL 飽和とデータベースサイズを少なくとも 20% [1] 減少 | |
| コホート D | アクティブなロングテールオプトイン | 約 10,000 組織 | Legacy Cell の負荷を軽減する | - オプトイン / セルフサービス - アクティブなルート名前空間 - プライベートのみ - 前提条件: 機能同等性 - 無料または有料 | WAL 飽和とデータベースサイズを少なくとも 10% [2] 減少 |
[1]: 20% の目標は、上位 1,000 の名前空間が消費するデータベース時間の 67% の 1/3 から導出されています。[2]: 10% の目標は、ロングテールのデータベース時間 33% の 1/3 を移動する可能性から来ています。
移行設計ドキュメント
データベース移行サービス(DMS)
- DMS ブループリント - AWS DMS を使用した GCP から AWS への PostgreSQL データ移行戦略
- DMS と専用ツールの統合 - DMS を Instrumentor、AMP、テナントモデルスキーマに統合する
コホート移行計画
- コホート 0: テスト移行 - エンドツーエンドプロセスを検証するための 100 テスト TLG の初期移行
決定事項
- ADR-001: コホート B 基準 - アクティブオプトインベータコホートの資格と登録基準
