データベースプラットフォーム

このページには今後予定されている製品・機能・機能性に関する情報が含まれています。ここに示す情報は参考目的のみです。購入・計画の決定にこの情報を使用しないでください。製品・機能・機能性の開発、リリース、タイミングは変更または延期される可能性があり、GitLab Inc. の独自の判断に委ねられています。
StatusAuthorsCoachDRIsOwning StageCreated
wip@alexander-sosna@andrewn~devops::data_access2024-02-06

現在の GitLab.com アーキテクチャ

GitLab.com は、Terraform、Chef、および複雑なタスクのための Ansible によって GCP の仮想マシン上で管理される 4 つの PostgreSQL クラスターを使用しています。 Cells では、大幅に多くの PostgreSQL クラスターを作成したいと考えており、50 Cell が必要な場合は 50 以上の PostgreSQL クラスターが必要になります。

@startuml
component "Rails"
component "Container Registry"

database "main"
database "ci"
database "registry"
database "embedding"

component "pgbouncer" as pgbouncermain
component "pgbouncer" as pgbouncerci
component "pgbouncer" as pgbouncerregistry
component "pgbouncer" as pgbouncerembedding

"Rails" --> pgbouncermain
pgbouncermain --> "main"

"Rails" --> pgbouncerci
pgbouncerci --> "ci"

"Rails" --> pgbouncerembedding
pgbouncerembedding --> "embedding"


"Container Registry" --> pgbouncerregistry
pgbouncerregistry --> "registry"


:User: --> "Rails"
:User: --> "Container Registry"
@enduml

現在、単一の本番データベースをホストする 4 つの異なるデータベースクラスターがあります。

データベース説明サイズスケーリングの余裕
Mainすべてのデータのデフォルトの場所20TB 以上ほぼない
CIすべての CI/CD 関連データ20TB 以上ほぼない
RegistryContainer Registry データ2TB 未満余裕あり
EmbeddingAI トレーニングデータを保存するための pgvector の実行2TB 未満余裕あり

データは organization_id によってシャーディングされ、organization_id は 1 つの Cell に存在できます。

Cells のロールアウト中、データのほとんどは現在のデータベースクラスターに残るため、これらの大規模なモノリシックシステムの要件にも対応することが重要です。

将来のアーキテクチャ

今後の Cells プロジェクトでは要件が異なります。 現在の見積もりでは、各 Cell は現在のモノリスと比較して比較的少数のユーザーをホストするため、多数の小さなデータベースクラスターをホストし、短期間でそれらを作成するという新たな課題が生じます。

正確な要件は時間とともに発展しますが、以下が要求されています:

現在の自動化には、各クラスターに専用の Chef ロールを作成するなど、多くの手動ステップが含まれています。 新しいクラスターを作成するための変更プロセスは、複数のマージリクエストとピアレビュー、そして Change Request による実行を必要とする最大のオーバーヘッドです。 これは新たに与えられた要件とは相容れません。

ただし、Cells は 1 つの Cell から始まる反復的な方式で開始され、1 つのデータベースクラスターが必要になります。 したがって、現在のプラットフォームは少なくとも Cells 1.0 には使用でき、すべてのデータが新しい Cell ローカルデータベースクラスターに保存されるまで維持できます。

また、複数の小規模 Cell への完全なシャーディングの前に、現在のデータを新しいデータベースプラットフォームに移行することも可能です。 これが望ましい場合は、現在のモノリスの要件もターゲットプラットフォームで満たす必要があります。

要件

要件は、GitLab.com のモノリシックデータストアに現在必要なものと、個々の Cell に見込まれるものに分けられます。

要件は以下のカテゴリーに分類できます。 それらは 高い中程度低い のいずれかになります。

  • 高い: GitLab.com を運用するために必要。
  • 中程度: 現在運用に必要だが、置き換えが可能。
  • 低い: あれば望ましい。

共通要件

要件説明優先度Cloud SQLCrunchy K8s OperatorAmazon RDS
GitLab のサポート最小限の変更、または変更なしで GitLab アプリケーションをサポートする能力高い
PostgreSQL メジャーリリース開発チームとインフラチームが統合に取り組めるよう、6 ヶ月以内に安定版リリースをサポートする高い
PostgreSQL メジャーリリース開発チームとインフラチームが統合に取り組めるよう、3 ヶ月以内に安定版リリースをサポートする中程度✅/partial
PostgreSQL パッチリリース7 日以内のマイナーリリース(バグ修正)のサポート高い
PostgreSQL セキュリティ修正セキュリティ SLA に従ったセキュリティ修正、クリティカルは 24 時間以内高い✅/partial
PostgreSQL ベータリリース開発チームとインフラチームが早期にテストできるよう、現在の PostgreSQL ベータリリースをサポートする低い✅/only preview env
ほぼゼロダウンタイムアップグレードAPDEX 劣化が分や時間ではなく秒単位でのみアップグレードを可能にする高い✅/partial, requires engineering efforts✅/partial
HA ソリューション現在の Patroni ソリューションと同等以上の高可用性とフェイルオーバー自動化。人間の介入なしに秒単位のスイッチオーバー/フェイルオーバーで、スプリットブレーンシナリオを許可しない高い
ロギング統合Postgres 上で構造化ロギングが利用可能高い✅/Configurable & Sidecar option
メトリクスPrometheus / Grafana 監視セットアップへの統合高い
PostgreSQL 拡張機能 - 運用(高)現在必要な拡張機能:
- pg_stat_statements
- pg_wait_sampling
- amcheck
- pgvector
- pg_trgm
- btree_gin
- btree_gist
- plpgsql
- pg_repack
高い✅/not wait_sampling, repack;but option to rebuild image
PostgreSQL 拡張機能 - デバッグ(中程度)デバッグに使用する拡張機能: - pg_stat_kcache
- pgstattuple
- pageinspect
- pg_buffercache
中程度✅/not kcache;but option to rebuild image✅/not kcache
PostgreSQL 拡張機能 - マイグレーション / シャーディング(低)現在は使用していないが将来重要になる可能性がある拡張機能:
- postgres_fdw
- file_fdw
低い✅/not file_fdw
デバッグツール現在、strace などのツールを使用して PostgreSQL プロセスにフックしてパフォーマンスの根本原因を見つけています。SaaS では、代わりにサービスプロバイダーがそのような分析を行う意志と能力があることを確認する必要があります。中程度✅/On-demand package install or container image rebuild
サードパーティツールによるバックアップカスタムバックアップ/アーカイブリポジトリと保持ポリシーを持つ wal-g、pgBackRest などのサードパーティツールによる自動および手動ベースバックアップ高い
ディスクベースのバックアップ/リストアディスク/ボリュームスナップショットのような自動および手動の高速バックアップ、設定可能な保持ポリシー、アトミックスナップショットまたは一貫したデータを保証する pg_start_backup / pg_stop_backup との統合高い✅/Clone-only, no multi-AZ support yet; on roadmap.
増分バックアップ増分バックアップの実行をカスタマイズし、より頻繁なバックアップを実行できるようにして RTO を削減する中程度
バックアップエクスポートGCS バケットなどの汎用ストレージへのバックアップエクスポート能力高い❌/only S3 .parquet
ローカルストリーミングレプリケーション読み取り専用ワークロードのオフロードと水平スケーリングのために、同一リージョンへのストリーミング物理レプリケーションが必要高い
マルチリージョンストリーミングレプリケーションDR と将来のマイグレーションのために、マルチリージョンなどのリモートロケーションへの SR が必要高い
外部ストリーミングレプリケーション本番環境外、別のアカウント、または別のクラウドプロバイダーの外部 PostgreSQL データベースへの SR は、DR、テスト、将来のマイグレーションに必要になる場合がある中程度
WAL アーカイブレプリケーションWAL アーカイブレプリケーションはホットスタンバイフィードバックとストリーミングレプリケーションの影響を排除し、分析(例: 長い/遅いクエリやレポートの実行)、クエリテスト、パフォーマンスデバッグに有用高い
WAL 遅延アーカイブレプリケーションWAL 遅延アーカイブレプリケーションにより、レプリカが継続的に以前の時点(例: 8 時間前)で回復し続けることができ、人的エラーなどの問題に対して非常に迅速なディザスタリカバリ方法を提供する中程度
論理レプリケーション論理レプリケーションはゼロダウンタイムアップグレード、将来のマイグレーション、またはあらゆる種類のインフラストラクチャ変更(PostgreSQL の物理レプリケーションをサポートしない可能性がある)に必要高い✅ / ?
読み取り負荷分散読み取り負荷を分散するためのスタンバイは、パフォーマンスのボトルネックを軽減するために短期間でデプロイ可能である必要があり、適切な自動化も許容される高い✅/use pgBackRest instead of volume snapshot
リージョンデプロイDR 要件のために個々のスタンバイのリージョンを定義できる必要がある低い
Database Lab 統合Database Lab はバックエンド開発者が使用しており、統合される必要がある低い✅ / ?✅ / ?

現在のプラットフォーム要件

パフォーマンス

パフォーマンスは重要な要素です。最初のタスクはパフォーマンスの概要を定義し、それが満たされているかどうかをテストするための信頼性の高い方法を確立することです。

{- TODO: パフォーマンス要件とテスト手順を定義する -}

以下の負荷ピークを観察しており、参考として使用できます:

Cells 要件

要件説明優先度
APIAPI を通じてトラフィックを受け取る準備が整った PostgreSQL クラスターをプロビジョニングする高い
100 以上の管理100 以上のクラスターを効率的に管理できる必要がある高い
均一なデータベースすべてのデータベースは同じように動作する必要があり、デプロイメントごとに特別扱いは不要中程度

TODO: パフォーマンス要件を定義し、異なるステークホルダーと確認する。@rnienaber と議論し、最大のリファレンスアーキテクチャから始めます。

分解

GitLab.com のアプリケーションデータは現在、MainCI の 2 つの別々のデータベースクラスターに分解されています。 分解「セキュアおよびソフトウェアサプライチェーンセキュリティ関連テーブルを別の Postgres DB に分解する」によって、現在のプラットフォームにより多くのヘッドルームとスケーラビリティを得るために Main データベースをさらに分解できるかどうかを評価しています。

Cells では、組織をより少ない飽和 Cell に移動することで水平スケーリングするという設計上の選択があります。 Cells は分解が合理的な規模になるまで垂直スケールすべきではありません。 そのため、Cells 内での分解は必要なく、現在の Dedicated / GET / Cells ツールではサポートされて いません。 将来的に GET と Dedicated で分解のサポートを追加することは、中程度の複雑さのタスクとして可能です。

これに沿って、Cell ごとに単一のデータベースクラスターのみがプロビジョニングされ、必要なすべてのデータベースをホストできます。

概要 - 可能なソリューション

PostgreSQL 以外の提供

AlloyDB のように特定レベルの PostgreSQL 互換性を主張する非 PostgreSQL について簡単に検討しました。 コストとリスクが期待されるメリットとの比較において意味のある割合にないという結論に達しました。 さらなる調査を正当化する PostgreSQL 自体の固有の欠点は現在ありません。

詳細は以下を参照してください:

Cloud SQL

Cloud SQL は Google の標準的な PostgreSQL 提供です。 これはカスタムフォークであり、アップストリームリリースと 100% 互換性があると主張されており、Cloud SQL ドキュメントでは単に PostgreSQL と呼ばれています。 GitLab は現在、Cloud SQL をサポートされた PostgreSQL 実装として認識しています。

メリット説明優先度/重要度
DBaaS最小限の運用オーバーヘッド。理論的には最も効率的。必要な DB を定義するだけでサービスとして提供されます。高い
アウトソーシングフック、インターフェース、監視、アラート、および予測を超えたインフラストラクチャを維持する必要がありません。高い
運用拡張機能GitLab.com を実行するために必要な主要な拡張機能が利用可能です。高い
API提供されているすべての機能の API がすでに提供されています。高い
デメリット / リスク説明優先度/重要度
製品ロックインCloud SQL は一方通行のドアの決定です。現在、PostgreSQL のストリーミングレプリケーションインターフェースを提供する任意の宛先にデータをレプリケートできます。GCP のアクティビティはベースバックアップのエクスポートなし、WAL アーカイブなし、ストリーミングレプリケーションなしなど複数の措置によってユーザーの移行を妨げます。移行には大幅なダウンタイムが必要であり、GitLab.com の現在の可用性目標では受け入れられません。高い / ブロッカー
リリース遅延PostgreSQL のリリースを合理的な期間内に入手し、計画の情報源として信頼できるロードマップを持つことが重要です。Google は保証を提供せず、3 ヶ月以内に GA を提供するという見積もりのみです。この見積もりは PG16 では正確ではなく、2023-09-14 にリリースされ、2024-02-16 現在利用可能ではありません。これは孤立したケースではなく、PG152023-05-24 に利用可能になりリリースから 7 ヶ月後のことです。高い / ブロッカー
バグ修正遅延データ整合性や未解決の脆弱性に関するクリティカルなバグの修正は、理想的には数時間以内、少なくとも数日以内に利用可能である必要があります。Google は保証を提供せず、30 日間の見積もりのみです。この見積もりは正確ではありません。15.32023-05-11 にリリースされ2024-02-16 現在利用可能ではなく、リリースから 281 日が経過しています。その間、15.415.515.6 のバージョンもリリースされており、Cloud SQL は 4 パッチレベル遅れています。高い / ブロッカー
ゼロダウンタイムアップグレードなしアップグレードは APDEX 劣化が分や時間ではなく秒単位のみで可能である必要があります。メンテナンス時間について一貫性のないデータがあり、10 秒から 30 分以上まであり、データセットでこの主張を検証する必要があります。高い / ブロッカー
ベースバックアップテスト、データ分析、データベースチーム用の Database Labs へのエクスポート、またはディザスタリカバリ準備のためにベースバックアップを定期的にエクスポートしています。Google は現在、GCS バケットなどの汎用ストレージへのバックアップのエクスポートを許可していません。高い / ブロッカー
外部ストリーミングレプリケーションCloudSQL はマルチリージョン物理レプリケーションをサポートしていますが、外部データベースへの物理レプリケーションはサポートしていません。中程度
WAL アーカイブ遅延レプリケーションCloudSQL は遅延レプリケーションを設定するための recovery_min_apply_delay をサポートしていません。ただし、hot_standby_feedback が無効になっており、大規模なクエリにより遅延が生じる場合、CloudSQL は自動的にレプリカをストリーミングからアーカイブレプリケーションに移動します。中程度
可観測性: DBデータベースマシンへのフルアクセスを持たないことで可観測性(例: strace/perf)が失われます。低レベルのデバッグには GCP が必要ですが、現在これが適時に行われるという証拠はありません。中程度
可観測性: クエリ現在持っている可観測性のほとんどは得られますが、Cloud SQL ではデータベースプロセスへのアクセスがないため、ロック競合などのデータベース内部を掘り下げる能力がありません。50k ユーザーなどの小さなインスタンスでは中程度かもしれませんが、より大きなインスタンスでは高くなる可能性があります。中程度
データベースエンジニアへのエスカレーションCloud SQL の専門家に適時に確実に連絡できる特定のサポートパスは見つかりませんでした。S1 インシデントでは Cloud SQL の専門家が数分以内に連携できる必要があります。高い

上記の情報のほとんどは公式の Cloud SQL ドキュメントにあります。GCP チームから口頭で見積もりをもらいました(ミーティングノート Discuss Cloud SQL and AlloyDB with GitLab (internal)を参照)。

検証すべき事項

Cells イテレーションに基づいてスコープを分割 https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/cells/#cells-iterations

Cells 1.0(初期スコープ)

(フォーカス: Cells 1.0 リリースの基盤的な検証と統合タスク)

Cells 1.0 のターゲットは、SaaS GitLab.com 提供を使用する社内顧客向けのソリューションを提供し、Cells の基盤的な作業を行うことです。

  • CloudSQL のデータベース可観測性と自動テレメトリー収集ツールを GitLab の可観測性スイートに評価・統合する。
  • CloudSQL のバックアップとリカバリー戦略(ポイントインタイムリカバリー(PITR)を含む)を検証し、ゾーンの停止またはハードウェア障害時のダウンタイムを最小化するために CloudSQL の高可用性(HA)設定を確認する。
  • SSL/TLS 証明書の設定と検証により、PostgreSQL 接続が暗号化されることを確認する。
  • 自動ストレージ増加の動作 – 複数の連続したストレージ増加をトリガーし、増加間の「クールオフ」期間、運用上の遅延、パフォーマンス低下を観察する。
  • インスタンススケーリングのダウンタイム – HA あり/なしでスケールアップ/ダウン時のダウンタイムを測定する。
  • マイナーバージョンアップグレードの影響 – HA あり/なしでのマイナーバージョンアップグレード中のダウンタイムを検証する。
Cells 1.5(将来の検討事項と機能強化)

(フォーカス: 後のイテレーションの機能と検証)

Cells 1.5 のターゲットは、Cells 1.0 アーキテクチャを基に構築された SaaS GitLab.com 提供を使用する既存および新規エンタープライズ顧客向けの移行ソリューションを提供することです。

  • 書き込みと読み取り専用ワークロードの両方に対して接続プーリングソリューションを検証する:
  • CloudSQL Proxy を評価する
  • データベース移行オプションを比較する:
  • 50k リファレンスアーキテクチャでの PostgreSQL メジャーバージョンアップグレードの時間と影響を評価する。
    • CloudSQL には AWS RDS Blue/Green デプロイメントの直接的な相当物がないため、ソリューションを社内で設計する必要があります。
  • 読み取りレプリカまたはバックアップからの新しいクラスターの作成にどのくらいかかるか? 10GB100GB1TB2TB
  • 遅延レプリカを含むディザスタリカバリオプションを評価する。
  • ストレージ増加のパフォーマンス影響 – 手動ストレージ増加前後のクエリパフォーマンスを測定する。
  • 高負荷ストレステスト – 大量のデータセットをロードし、持続的な書き込み集約的な操作を CloudSQL がどのように処理するかを測定する。
Dedicated デプロイメントとの差分を評価する
  • より細かい粒度(10 秒未満)の拡張モニタリングを、カスタムクエリ(例: pg_stat_activitypg_stat_statements)を含む Postgres Exporter と、より頻繁なスクレイピングを行う Prometheus を使用して実装するオプションを評価する。
  • スタンバイレプリカへの読み取り操作のオフロードを評価する。
  • 「Enable auto minor version upgrade」を評価する。
  • 「Dedicated Log Volume」によるパフォーマンス改善を評価する。
  • ロギングレベルを上げて、スロークエリ、一時使用、autovacuum、ロック待機、接続/切断、DDL 文をキャプチャする。
  • pg_stat_statements 設定を構成する。
  • auto_explain をロードして設定する。
  • 「論理バックアップ」ソリューションを実装する。
  • Cloud MonitoringAlerting を確認する。

k8s Operator

現在、実行可能と思われる複数の利用可能な Operator がありますが、要件が満たされることを確認するための詳細な評価とベンチマークが重要です。 ゼロダウンタイムアップグレードが欠けている可能性がある機能の一つです。 現在も独自の自動化を維持しており、Operator がこの機能を提供するまで適応させることができます。

メリット説明優先度/重要度
API提供されているすべての機能の API がすでに提供されています。高い
運用ツールの削減k8s のみをサポートすることで、Chef を通じた VM 管理の必要がなくなります。維持するコードが少なくなり、複雑さが軽減されます。高い
既製の自動化既製の Operator を利用することで、維持する自動化コードの量が削減されます。API を一から開発する必要がありません。高い
データの制御可観測性と制御は放棄されません。他のソリューションへの移行をいつどこで行うかを決定できます。データの保存場所、冗長性レベル、エアギャップバックアップなどを決定できます。中程度
将来を見据えた設計将来的により良いまたはより望ましいソリューションが利用可能になった場合、移行に何ら制限はありません。高い
製品ロックインなし将来離れることができない製品にロックインされません。中程度
デバッグ能力SaaS 提供とは対照的に、問題を適時にデバッグする意志と能力があるベンダーに依存しません。高い
Cells との良好な統合他のセルフホストソリューションと比較して、データベースはワークロードの残りと同じ k8s クラスターで実行されます。これにより外部コンポーネントの統合の必要性と複数の障害ベクターが排除されます。中程度
ほぼゼロダウンタイムアップグレードGitLab の(db-migration/pg-upgrade-logical 自動化を k8s 上での PostgreSQL MVU のほぼゼロダウンタイムを実現するために適応させることができます高い / ブロッカー
デメリット / リスク説明優先度
ノウハウk8s はインフラストラクチャ全体で広く使用されていますが、データベース信頼性には使用されていません。チームでの知識を積み上げる必要があります。中程度
欠けている機能欠けている機能(サポートされていない拡張機能など)は私たちが実装する必要があります。中程度

検証すべき事項

Amazon RDS PostgreSQL

Amazon Relational Database Services PostgreSQL は AWS のマネージドデータベースサービスで、PostgreSQL コミュニティバージョンと完全な互換性を提供します。実際、Amazon は PostgreSQL コミュニティバイナリをRDS インスタンスの基盤となるインフラストラクチャにパッケージしてデプロイするだけです。 GitLab は現在、Amazon RDS PostgreSQL をサポートされた PostgreSQL 実装として認識しています。

メリット説明優先度/重要度
DBaaS最小限の運用オーバーヘッド(理論上)。必要な DB を定義するだけでサービスとして提供されます。高い
アウトソーシングフック、インターフェース、監視、アラート、および予測を超えたインフラストラクチャを維持する必要がありません。高い
運用拡張機能GitLab.com を実行するために必要な主要な拡張機能が利用可能です。高い
API提供されているすべての機能の API がすでに提供されています。高い
GitLab Dedicated 互換性Amazon RDS PostgreSQL は GitLab Dedicated アーキテクチャですでに使用されており、GitLab Dedicated ツールに統合されています。?
ベンダーロックインのリスクが低い現在、RDS インフラストラクチャに完全にロックインされているわけではありません。PostgreSQL ネイティブ論理レプリケーション、S3 へのエクスポート、または RDS データベースを「オンプレミス」に移行をサポートする Amazon DMS を通じた移行が可能です。中程度
PostgreSQL 開発への取り組みAmazon は現在、PostgreSQL ソースコードに対して 9 人のコミッターと主要な貢献者を雇用しています。対照的に、Microsoft は 8 人のコミッター/主要な貢献者、Google はわずか 1 人です。低い
7 日以内のバグ修正/パッチマイナーリリース(バグ修正)が 7 日以内という実証された履歴。一部のパッチは同日にリリースされています。高い
6 ヶ月以内のリリースPostgreSQL メジャーバージョンが常に 6 ヶ月未満で RDS にリリースされ、時には 3 ヶ月未満でリリースされたという実績。高い
ほぼゼロダウンタイムアップグレードMVU のデフォルトの RDS オプションは論理レプリケーションなしの pg_upgrade に基づいており、数十分のダウンタイムが必要です。ただし、ダウンタイムはデータベース更新用 RDS Blue/Green デプロイメントで(通常 60 秒未満まで)削減できます。高い / ブロッカー
RDS エキスパートエンジニアへのエスカレーション内部 RDS エンジニアに適時に連絡できる特定のサポートパスはありません。ただし、RDS サポートには Amazon サポートエスカレーションの一部である SME(専門家)プログラムがあり、S1 インシデントで数分以内に協力できる必要があります。高い
カスタムバックアッププランのサポートAmazon RDS はカスタムバックアッププランをサポートしており、「デイリー」バックアップだけではありません。
デメリット / リスク説明優先度/重要度
サードパーティツールによるバックアップのエクスポートテスト、データ分析、データベースチーム用の Database Labs へのエクスポート、またはディザスタリカバリ準備のためにベースバックアップを定期的にエクスポートしていますが、RDS ではサードパーティのバックアップツールはサポートされていません。外部使用のためのデータエクスポートの唯一のオプションは、すべての消費者がサポートしていない可能性がある Snapshot Export into Apache Parquet 形式、または処理が遅い pg_dump を S3 にエクスポートするです。高い / ブロッカー
外部ストリーミングレプリケーションRDS はクロスリージョン物理レプリケーションをサポートしていますが、外部データベースへの物理レプリケーションはサポートしていません。中程度
WAL アーカイブ遅延レプリケーションRDS PostgreSQL は遅延レプリケーションを設定するための recovery_min_apply_delay をサポートしていません。中程度
デバッグ能力データベースマシンへのフルアクセスを持たないことで可観測性(例: strace/perf)が失われますが、絶対に必要な場合は RDS の内部エンジニアが低レベルのデバッグを実行するためにエスカレートされる可能性があります。現在、これが適時に行われるという証拠があります。中程度
WAL ファイルへの直接アクセスなしRDS インスタンス上で WAL ファイルをエクスポートしたり pg_waldump を実行したりすることはできません。これは頻繁に変更されるオブジェクトとそれぞれのコンテンツをデバッグするために必要な場合がありました。低い

検証すべき事項

  • RDS パフォーマンスインサイトメトリクスをエクスポートする方法を検証する
  • PostgreSQL ログを Elastic にエクスポートする方法は?
  • 書き込みと読み取り専用ワークロードの両方に対して接続プーリングソリューションを検証する
  • 移行オプションを比較する
    • ネイティブ論理レプリケーション
    • Amazon データベース移行サービス
  • 50k リファレンスアーキテクチャでのメジャーバージョンアップグレードの時間と影響を評価する
    • Blue/Green デプロイメントも評価する
  • 読み取りレプリカまたはバックアップからの新しいクラスターの作成にどのくらいかかるか? 10GB100GB1TB
  • Blue/Green メジャーバージョンアップグレード方法でデータベースサービスのダウンタイムはどのくらいか?
    • Blue/Green デプロイメント中の影響を軽減するために pgbouncer または RDS Proxy がリクエストを保持できるかどうかもテストする必要があります。
現在の Dedicated-RDS デプロイメントとの差分を評価する
  • 小さな粒度(10 秒未満)での Enhanced Monitoring の有効化のコスト
  • スタンバイレプリカへの読み取り操作のオフロードを評価する
  • 「Enable auto minor version upgrade」を評価する
  • 「Dedicated Log Volume」によるパフォーマンス向上を評価する
  • ロギングレベルを上げる: スロークエリ、一時使用、autovacuum、ロック待機、接続/切断、DDL 文
  • pg_stat_statements 設定を構成する
  • auto_explain をロードして設定する
  • 「論理バックアップ」ソリューションを実装する
  • アラームを確認する: RDS イベントサブスクリプション、AWS Cloud Watch

現在の自動化のリファクタリング

GitLab.com のすべての PostgreSQL クラスターをホストするための現在のプラットフォームは主に Terraform と Chef に基づいており、GCP の仮想マシンを管理しています。 一部の複雑な操作は Ansible によってオーケストレーションされています。

このアーキテクチャの現在の主な問題は歴史的な成長と技術的負債です。 単一または少数固定のデータベースクラスターをホストするために設計されています。 理論的には任意の数のクラスターをホストすることは可能ですが、手動のステップとオーバーヘッドが必要です。

これらの非効率性は、多数のデータベースクラスター(例: >100)をホストするという推定要件とは相容れません。

例:

  • 各データベースクラスターに対して複数の Chef ロールを作成する必要があります
  • 各データベースクラスターに対して手動でネットワークサブネットを定義して設定ファイルに記述する必要があります
  • ポリシーとして、本番環境の各データベースクラスターに相当するものがステージング環境にある必要があります

これらの欠点とボトルネックは、Chef による自動化の改善や別のツールセットへの置き換えによって解消できます。

メリット説明優先度/重要度
イテレーション、低リスク非効率ではあっても完全に機能するプラットフォームがあるため、一度に 1 ステップずつ反復的に機能強化をデプロイできます。「ビッグバン」マイグレーションがなく、特定の機能がないリスクや新しいプラットフォームの欠点をプロセスの後半で発見するリスクがありません。高い
デメリット / リスク説明優先度/重要度
Chef ノウハウGitLab(および外部)での Chef のノウハウと使用はすでに減少しています。現在のチームには、必要な変更を適時に実装するために必要なノウハウと容量がありません。Chef とドメインの知識を持つ他の SRE を DBRE チームに移動することが必要であり、GitLab の Chef へのコミットメントも必要です。高い / ブロッカー
効率性理想的な結果でも、おそらく DBaaS ソリューションほど効率的にはなりません。中程度
開発/メンテナンス社内で完全な自動化コードを開発・維持する必要があります。高い / ブロッカー
統合各 Cell は単一の k8s クラスターで実行されるため、このソリューションは Cell ローカルにはなりません。これにより複雑さが増し、潜在的な障害ベクターが発生します。中程度

Cells 1.0

Cells 1.0 は Cells の最初のイテレーションであり、2024 年中に GA となる予定です。 この最初のイテレーションでは限られた数のテストユーザーとプロジェクトのみをホストするため、完全な要件はありません。 これはデータベースプラットフォームを学習し、イテレーションする機会です。

開発中に Cell の数は 1 から最大 10 まで増加する可能性があります。 2 番目の Cell が作成されるまでに数ヶ月かかると見込まれており、2 番目のクラスターが必要になります。

Cloud SQL は現在、与えられた高優先度の要件を満たしていませんが、それらを完全に含むロードマップもありません。 それにもかかわらず、Cells 1.0 のタイムラインをブロックしないように、一時的に Cloud SQL を使用します。 そのため、関連するリスクとボトルネックを認識し、同意します。

  • 最終プラットフォームへの移行にはダウンタイムが発生します!
  • サービスの品質は GitLab.com と同等にはなりません。
    • 深いレベルのサポートに対する明確な SLO がありません。
    • 合理的なダウンタイムでのメジャーバージョンアップグレードができません。
  • この解決策を 50k ユーザーのターゲットに向けて確実に成長させることはできず、すでに 3k ユーザーで接続プーリングに問題が生じています。

要件を満たすソリューションの発見を優先し、Cells 1.0 の後に利用可能にします。 最も有望な候補は、PostgreSQL as a Service のような体験を提供する既存の k8s PostgreSQL Operator です。

Cells 1.x

Cells 1.0 で強調されているように、長期的な要件に十分なプラットフォームを構築するリソースを解放するために、一時的なソリューションとして Cloud SQL から始めます。

最初のフェーズでは、利用可能な k8s Operator を評価し、完全な評価のための最も適合する候補を絞り込みます。

現在のデータベースプラットフォーム

現在のデータベースプラットフォームは将来の成長において制限がありますが、現在飽和の限界には達していません。 データベースがいつボトルネックになるかは明確ではありませんが、分解前の過去の経験に基づくと、200% の規模のデータベースは運用上の課題をもたらします。

データベースが 2 倍のサイズになるまでの時間についての予測は現在ありませんが、次の 24 ヶ月以内(2026 年まで)にはそれが起きないと見込むのが妥当です。

これは、重要なデータを Cell に移行するか、ここでもデータベースプラットフォームを改善/変更するための十分な時間を与えます。