This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. The development, release, and timing of any products, features, or functionality may be subject to change or delay and remain at the sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
wip @alexander-sosna @andrewn devops data_stores 2024-02-06

데이터베이스 플랫폼

현재 GitLab.com 아키텍처

GitLab.com은 Terraform, Chef 및 Ansible을 이용해 GCP에서 관리되는 가상 머신에서 실행되는 4개의 PostgreSQL 클러스터를 사용합니다. Cells를 사용하면 4개 이상의 PostgreSQL 클러스터를 생성할 수 있으며, 50개의 Cells를 사용하려면 50개 이상의 PostgreSQL 클러스터가 필요합니다.

현재 4개의 다른 데이터베이스 클러스터가 있으며, 각 클러스터는 단일 프로덕션 데이터베이스를 호스팅합니다.

데이터베이스 설명 크기 스케일링 여유공간
Main 모든 데이터의 기본 위치 20TB 이상 매우 적음
CI 모든 CI/CD 관련 데이터 20TB 이상 매우 적음
Registry 컨테이너 레지스트리 데이터 2TB 미만 많은 여유공간
Embedding pgvector를 실행하여 AI 훈련 데이터 저장 2TB 미만 많은 여유공간

데이터는 organization_id로 분할되며, organization_id는 1개의 Cell에 속할 수 있습니다.

Cells를 롤아웃하는 동안 대부분의 데이터는 현재 데이터베이스 클러스터에 그대로 유지될 것이므로, 이러한 대형 모노리식 시스템의 요구사항을 고려하는 것이 중요합니다.

향후 아키텍처

다가오는 Cells 프로젝트의 요구사항은 다릅니다. 현재 업무 추정치에 따르면, 각 Cell은 현재의 대형 모놀리식에 비해 상대적으로 적은 수의 사용자를 호스트할 것으로 예상되며, 많은 수의 작은 데이터베이스 클러스터를 짧은 시일 내에 생성하는 새로운 과제가 있습니다.

정확한 요구사항은 시간이 지남에 따라 발전할 것이지만, 다음이 요청됩니다:

현재의 자동화에는 각 클러스터에 대한 전용 Chef 역할을 생성하는 등 많은 매뉴얼 단계가 포함되어 있습니다. 새로운 클러스터를 만드는 변경 프로세스는 여러 개의 합병 요청과 동료 검토뿐만 아니라 변경 요청에 따른 실행이 가장 많은 오버헤드입니다. 이는 새로운 요구 사항과 호환되지 않습니다.

그러나 Cells는 첫 번째 Cell에 대해 반복적으로 시작하여 하나의 데이터베이스 클러스터가 필요합니다. 따라서 현재 플랫폼은 적어도 Cells 1.0에서 사용할 수 있지만, 모든 데이터가 새로운 Cell 로컬 데이터베이스 클러스터에 저장될 때까지 유지될 수 있습니다.

또한 현재 데이터를 새로운 데이터베이스 플랫폼으로 마이그레이션하는 것도 가능하며, 이 작업이 완료되기 전에는 새로운 작은 Cells에 걸쳐 전체 공유를 유지할 수 있어야 합니다.

요구사항

요구사항은 현재 GitLab.com의 대형 데이터 리포지터리 및 개별적인 Cells에 대한 우리의 추정치로 나눌 것입니다.

요구사항은 다음과 같은 범주로 나눌 수 있습니다. 이것들은 높음, 낮음, 낮음일 수 있습니다.

  • 높음은 GitLab.com을 운영하는 데 필요합니다.
  • 중간은 현재 운영에 필요하지만 대체될 수 있습니다.
  • 낮음은 원하는 경우입니다.

공통 요구사항

요구사항 설명 우선순위 Cloud SQL k8s operator
GitLab 지원 작은 변경 없이 GitLab 애플리케이션을 지원할 수 있는 능력 높음
PostgreSQL Major 릴리스 6개월 이내의 안정적 릴리스 지원, 개발 및 인프라 팀이 통합에 작업할 수 있어야 합니다. 높음 ✅/?
PostgreSQL Major 릴리스 3개월 이내의 안정적 릴리스 지원, 개발 및 인프라 팀이 통합에 작업할 수 있어야 합니다. 중간 ✅/?
PostgreSQL 패치 릴리스 7일 이내의 마이너 릴리스(버그 수정) 지원 높음 ✅/?
PostgreSQL 보안 수정 모든 보안 수정은 보안 SLA를 따라야 하며, 중요한 경우 24시간 이내에 해결되어야 합니다. 높음
PostgreSQL 베타 릴리스 최신 PostgreSQL 베타 릴리스 지원, 개발 및 인프라 팀이 초기 테스트를 할 수 있어야 합니다. 낮음
거의 제로 다운타임 업그레이드 업그레이드는 APDEX 저하가 몇 초가 아니라 분 또는 시간이 걸리지 않도록 가능해야 합니다. 높음 ?
HA 솔루션 현재 Patroni 솔루션보다 우수하거나 해당하는 고가용성 및 장애 조치 자동화. 스위치오버/페일오버가 인간 개입없이 몇 초 내에 가능해야 합니다. 높음
로깅 통합 Postgres의 구조화된 로깅을 사용할 수 있어야 합니다. 높음
메트릭스 Prometheus / Grafana 모니터링 설정 통합. 높음
PostgreSQL 확장 - 운영 (높음) 다음과 같은 확장이 현재 필요합니다:
- pg_stat_statements
- pg_wait_sampling
- amcheck
- pgvector
- pg_trgm
- btree_gin
- btree_gist
- plpgsql
- pg_repack
높음
PostgreSQL 확장 - 디버그 (중간) 다음과 같은 확장이 디버깅에 사용됩니다: - pg_stat_kcache
- pgstattuple
- pageinspect
- pg_buffercache
중간
PostgreSQL 확장 - 마이그레이션/샤딩 (낮음) 아직 사용 중이 아니지만 향후 중요해질 수 있는 확장은 다음과 같습니다:
- postgres_fdw
- file_fdw
낮음
디버깅 도구 우리는 현재 성능 원인을 찾기 위해 strace와 같은 도구를 사용합니다. SaaS에서는 제공업체가 이러한 분석을 수행할 의지와 능력이 있는지 확인해야 합니다. 중간
베이스 백업 자동화된 및 매뉴얼 베이스 백업, 구성 가능한 유지 정책. 높음
빠른 백업/복원 디스크/볼륨 스냅숏과 같은 자동화된 고속 백업, 구성 가능한 유지 정책, 원자적 스냅숏 또는 일관된 데이터를 보장하기 위해 pg_start_backup / pg_stop_backup과 통합 높음
점진적 백업 보다 빠른 백업 제공으로 RTO를 줄일 수 있는 보다 빈번한 백업 수행 가능. 중간 ❌/?
백업 익스포트 백업을 일반적인 스토리지(예: GCS 버킷)로 익스포트할 수 있는 기능. 높음
WAL 아카이빙 재해 복구, 분석 및 데이터 복구를 위한 WAL 아카이빙, 예측하지 않은 삭제를 되돌릴 수 있어야 합니다. 높음
스트리밍 복제 스트리밍 복제가 필요한 원격 위치, 재해 복구 및 미래 마이그레이션을 위해. 높음
논리 복제 논리 복제를 원격 위치로, 제로 다운타임 업그레이드 및 미래 마이그레이션을 위해. 높음 ✅ / ?
읽기 부하 분산 읽기 부하를 분산시키기 위해 스탠바이가 단시간에 배포 가능해야 하며, 성능 병목 현상을 완화시키는 적절한 자동화도 수용 가능합니다. 높음
지역 배포 DR 요구 사항을 위해 개별 스탠바이의 지역을 정의할 수 있어야 합니다. 낮음
데이터베이스 Lab 통합 Database Lab은 백엔드 개발자들이 사용하며 통합되어야 합니다. 낮음 ✅ / ?

현재 플랫폼 요구 사항

성능

성능은 중요한 요소입니다. 첫 번째 작업은 성능 개요를 정의하고 그에 부합하는 테스트 방법을 신뢰할 수 있는 방법으로 설정하는 것입니다.

{- TODO: 성능 요구 사항과 테스트 절차 정의 -}

다음과 같은 부하 피크를 관찰했으며 이를 지표로 활용할 수 있습니다:

  • 주 서버에서 ~100k 읽기-쓰기 TPS
    • 메인 주 서버에서 ~80k TPS
    • CI 주 서버에서 ~32k TPS
  • 대역 서버들 간 분산된 ~1M 읽기 전용 TPS
    • 메인 대역 서버에서 ~714k TPS
    • CI 대역 서버에서 ~150k TPS

셀 요구 사항

요구 사항 설명 우선 순위
API API를 통해 트래픽을 받을 수 있는 준비된 PostgreSQL 클러스터를 설정합니다. 높음
100개 이상 관리 100개 이상의 클러스터를 효율적으로 관리할 수 있어야 합니다. 높음
동질적인 데이터베이스 모든 데이터베이스는 동일한 방식으로 작동해야 하며 각 배포마다 특별한 데이터베이스가 없어야 합니다. 중간

{- TODO: 성능 요구 사항 정의 및 다양한 이해 관계자에게 확인. @rnienaber와 논의한 대로, 우리는 가장 큰 레퍼런스 아키텍처를 기준으로 시작할 것입니다. -}

분해

또한 메인 데이터베이스를 분해하여 보안 및 관리 관련 테이블을 별도의 Postgres DB로 분해할 수 있는지 평가 중입니다.

실제 셀 크기와 데이터 양에 따라 각 데이터베이스에 대해 개별 클러스터를 유지하거나 한 셀당 여러 데이터베이스를 호스팅하기 위해 단일 클러스터를 사용해야 하는지를 확인해야 합니다. 셀의 최대 크기를 예단할 수 없게하기 위해, 각 데이터베이스에 대해 전용 클러스터를 사용할 수 있는 옵션을 구현해야 합니다.

현재 Dedicated / GET / Cells 도구는 분해를 지원하지 않습니다. GET 및 별도의 분해를 지원하는 것은 중간 복잡성의 작업으로 가능할 수 있습니다. 지정된 셀 크기에 대한 예측이 변경되지 않는다면, 셀 내에서의 분해가 필요하지 않을 수 있습니다. 따라서 첫 번째 반복에서는 셀 당 단일 데이터베이스 클러스터만 필요하며, 이외에는 지원되지 않을 것입니다.

개요 - 가능한 해결책

PostgreSQL 이외의 제공 품목

우리는 AlloyDB와 같은 PostgreSQL 호환성을 주장하는 PostgreSQL 이외의 품목을 간단히 살펴보았습니다. 비용과 리스크가 예상되는 이점에 비해 상당한 비율을 차지하지 않는다는 결론을 내렸습니다. 현재 PostgreSQL 자체에는 추가적인 조사가 정당화될만한 본질적인 결점이 없습니다.

자세한 내용은 아래에서 확인할 수 있습니다:

Cloud SQL

Cloud SQL은 구글의 표준 PostgreSQL 제공 품목입니다. 이는 상류 버전과 100% 호환되는 것으로 주장되는 사용자 지정 포크이며 Cloud SQL 문서에서는 단순히 PostgreSQL로 참조됩니다. GitLab은 현재 Cloud SQL을 지원되는 PostgreSQL 구현으로 인식합니다.

장점 설명 우선 순위 / 중요도
DBaaS 최소한의 작업 부하, 이론상으로 가장 효율적입니다. 필요한 DB를 정의하고 서비스로 제공받기만 하면 됩니다. 높음
외부 위탁 후크, 인터페이스, 모니터링, 경고 및 예측 외의 인프라를 유지할 필요가 없습니다. 높음
Ops. Extensions GitLab.com 운영에 필요한 핵심 확장 기능은 사용 가능합니다. 높음
API 제공되는 모든 기능에 대한 API가 이미 제공됩니다. 높음
단점 / 리스크 설명 우선 순위 / 중요도
제품 락인 Cloud SQL은 일방통행 문입니다. 현재 우리는 PostgreSQL의 스트리밍 복제 인터페이스를 제공하는 것으로 데이터를 어떠한 목적지로도 복제할 수 있습니다. GCP 활동은 기본 백업 익스포트, WAL 아카이빙, 스트리밍 복제 등 여러 가지 조치를 통해 사용자가 마이그레이션하는 것을 금지하고 있습니다. 마이그레이션에는 현재 GitLab.com의 가용성 목표에 준하는 중대한 다운타임이 필요하게 됩니다. 높음 / 차단
릴리스 지연 합리적인 시간 내에 PostgreSQL 릴리스를 받는 것이 필수적이며 신뢰할 수 있는 로드맵이 계획에 대한 진실을 제공해야 합니다. 구글은 예측을 제공하고 보장하지 않으며 3개월 후에 GA를 제공할 것으로 추정합니다. 이 추정치는 올바르지 않습니다. PG162023-09-14에 릴리스되었으며 오늘날 2024-02-16사용 불가합니다. 이는 고립된 사례가 아닙니다. PG152023-05-24에 사용 가능하게 되었습니다. 발표일로부터 7개월 후에 사용가능해졌으며 동안 버전 15.4, 15.515.6가 발표되었으나 아직도 사용가능하지 않아 Cloud SQL은 4개의 패치 레벨을 놓치게 됩니다. 높음 / 차단
버그 수정 지연 데이터 일관성이나 열려있는 취약점과 관련된 심각한 버그의 수정이 몇 시간 내에 완료되어야 하며 최대 한 몇 일 내에 제공되어야 합니다. 구글은 예측치를 제공하며 30일이라고 합니다. 이 추정치는 올바르지 않습니다. 15.32023-05-11에 릴리스되었으며 2024-02-16에 [사용 불가](https://cloud.google.com/sql/docs/postgres/db-versions)합니다. 이렇게 버전들이 발표된 이후에 이동되며 지금까지 몇일동안 사용이 안된 상태입니다. 그사이 버전 15.4, 15.515.6이 발표되었으며 역시 사용이 안된 상태로 남아서 Cloud SQL은 4개의 패치 레벨을 놓치게 됩니다. 높음 / 차단
제로 다운타임 업그레이드 없음 업그레이드는 APDEX 저하시에 초미 아닌 몇 초 내에 가능해야 합니다. 유지 보수 시간에 대한 일관성 없는 데이터를 찾아보았고 10초부터 30분 이상이라는 내용이 있으며 우리의 데이터 세트로이 주장을 유효화시키는 것이 필요합니다. 높음 / 차단
기본 백업 테스트, 데이터 분석, 데이터베이스 팀을 위한 데이터 수출, 또는 재해 복구 준비를 위해 정기적으로 기본 백업을 수출합니다. 현재 구글은 일반적인 리포지터리로의 백업 수출을 거부하고 있습니다. 높음 / 차단
WAL 아카이빙 WAL 아카이빙은 현재 재해 복구, 분석 및 데이터 복원에 사용됩니다. 높음 / 차단
스트리밍 복제 원격 위치로의 스트리밍 복제는 재해 복구 및 미래의 이주에 필요합니다 높음 / 차단
가시성: DB 데이터베이스 머신에 대한 완벽한 액세스가 없어서 관찰 가능성(예: strace/perf)을 잃게 됩니다. 구글에는 데이터베이스 머신에서 저수준 디버깅을 실행하는 것이 시간적으로 이루어질 것이라는 명확한 표시가 없습니다. 중간
가시성: 쿼리 현재 가지고 있는 대부분의 관찰성은 유지할 수 있지만 데이터베이스 내부(예: 잠금 경쟁)와 같은 사항에 대해 Cloud SQL 같은 데이터베이스 프로세스에 액세스할 수 없기 때문에 갖지 못합니다. 작은 인스턴스만 있는 경우(예: 50,000 사용자), 이것은 중간일 수 있지만 큰 인스턴스에 대해서는 높은 수준이 될 수 있습니다. 중간
데이터베이스 엔지니어 전달 신속하게 Cloud SQL 전문가에게 신뢰성 있게 연락할 수 있는 경로를 찾을 수 없었습니다. S1 사건에 대해서 Cloud SQL 전문가가 몇 분 내로 사용 가능해야 합니다. 높음

상기 대부분의 정보는 공식 Cloud SQL 문서에서 찾을 수 있습니다. 일부 예측은 GCP 팀에서 버버적으로 전달된 것입니다. GitLab과 함께 Cloud SQL 및 AlloyDB에 대한 논의 (내부)에서 확인할 수 있습니다.

확인해야 할 사항

  • 제안된 논리 복제 기능(pglogical)을 마이그레이션에 사용할 수 있을까? - 2-4 주로 추정
  • 회의에서는 GCP가 거부했지만 pitr 문서에 나타나는 WAL 및 base_backups에 액세스할 수 있을까? - 1 주 미만으로 추정
  • 50k 참조 아키텍처의 주요 업그레이드에는 얼마나 걸릴까? - 4-5 주로 추정
  • 현재 감시 도구에 대한 충분한 대체물인 Query Insights은 충분한가요?
  • 읽기 복제본을 만드는 데 얼마나 걸리나요? 백업에서 새 클러스터를 만드는 데 얼마나 걸리나요? 10GB, 100GB, 1TB - 1 주로 추정

k8s Operator

현재 여러 사용 가능한 오퍼레이터가 있지만 상세한 평가 및 벤치마킹을 통해 요구 사항이 충족되는지 확인해야 합니다. 이후 무중단 업그레이드 기능을 제공하지 못할 수 있습니다. 현재도 우리는 이 기능에 대한 자체 자동화를 유지하고 있으며 오퍼레이터가 이 기능을 제공할 때까지 적응할 수 있습니다.

Pro 설명 중요도 / 우선순위
API 제공된 모든 기능에 대한 API가 이미 제공됩니다. 높음
운영 도구 감소 k8s만 지원하여 VM을 Chef로 관리할 필요가 없어집니다. 코드 유지 및 복잡성을 줄일 수 있습니다. 높음
외부 자동화 사용 외부 오퍼레이터를 활용하면 유지해야 할 자동화 코드가 줄어듭니다. 우리는 제로부터 API를 개발할 필요가 없습니다. 높음
데이터 제어 감시 및 제어 권한이 양도되지 않습니다. 우리는 데이터를 저장할 위치, 백업 수준 등을 우리가 결정할 수 있습니다. 중간
미래 증명 미래에 더 나은 또는 더 바람직한 솔루션이 제공될 때 어떠한 제약 없이 마이그레이션할 수 있습니다. 높음
제품 잠금 없음 미래에 떠날 수 없는 하나의 제품에 잠기는 것이 없습니다. 중간
디버깅 기능 다른 SaaS 제공물과 비교했을 때, 우리는 문제를 시정하기를 제공자가 즉시하고 능숙하게 디버그할 필요가 없습니다. 높음
Cells와의 통합 용이성 다른 자체 호스팅 솔루션과 비교했을 때, 데이터베이스는 나머지 워크로드와 동일한 k8s 클러스터에서 실행됩니다. 외부 컴포넌트의 통합과 여러 실패 벡터가 제거됩니다. 중간
Cons / Risks 설명 중요도
Know how k8s는 우리 인프라 전체에서 널리 사용되지만 데이터베이스 신뢰성에서는 사용되지 않습니다. 팀 내에서 지식을 쌓아야 합니다. 중간
기능 부재 부재하는 기능들은 우리가 구현해야 합니다. 예를 들어, 지원되지 않는 확장. 중간

확인해야 할 사항

현재 자동화 리팩터링

GitLab.com의 모든 PostgreSQL 클러스터를 호스트하는 현재 플랫폼은 주로 Terraform과 Chef를 사용하여 GCP 가상 머신을 관리합니다. 일부 복잡한 작업은 Ansible을 통해 조정됩니다.

현재 이 아키텍처의 주요 문제는 역사적 성장과 기술적 부채입니다. 이는 단일 또는 고정된 소수의 데이터베이스 클러스터를 호스팅하도록 설계되었습니다. 임의의 수의 클러스터를 호스팅하는 것이 이론적으로 가능하지만 매뉴얼 단계와 오버헤드가 필요합니다.

일부 예시:

  • 각 데이터베이스 클러스터에 대해 여러 Chef 역할을 만들어야 합니다.
  • 각 데이터베이스 클러스터에 대해 네트워크 서브넷을 매뉴얼으로 정의하고 구성 파일에 써야 합니다.
  • 운영 방침에 따라 프로덕션에서 각 데이터베이스 클러스터에는 스테이징에 해당하는 클러스터가 있어야 합니다.

이러한 문제점과 병목현상은 Chef를 개선하거나 대체하여 해결할 수 있습니다.

Pro 설명 중요도 / 우선순위
반복, 낮은 위험 비효율적이지만 완전히 작동하는 플랫폼을 보유하고 있으므로 개선 사항을 점진적으로 배포할 수 있습니다. “큰 폭” 마이그레이션이 없으며 특정 기능이 없거나 새로운 플랫폼의 결점을 나중에 발견하는 위험이 없습니다. 높음
Cons / Risks 설명 중요도 / 우선순위
Chef Know-How Chef의 지식과 사용은 이미 줄어들고 있습니다. 현재 팀은 필요한 변경 사항을 적시에 구현할 수 있는 지식과 역할 지식을 갖추고 있지 않습니다. 다른 SRE를 Chef 및 도메인 지식을 보유하면서 DBRE 팀으로 이동시키는 것이 필요할 것입니다. 높음 / 차단
효율성 이상적인 결과는 아마도 여전히 DBaaS 솔루션만큼 효율적이지 않을 것입니다. 중간
개발 / 유지보수 여전히 내부에서 전체 자동화 코드를 개발하고 유지해야 합니다. 높음 / 차단
통합 각 Cell은 단일 k8s 클러스터에서 실행될 것이므로이 솔루션은 Cell 로컬이 아닐 것입니다. 이로 인해 더 높은 복잡성과 가능한 실패 벡터가 발생할 수 있습니다. 중간

Cells 1.0

Cells 1.0은 Cells의 첫 번째 반복으로 2024년에 GA가 되어야 합니다. 이 첫 번째 반복은 테스트 사용자와 프로젝트의 제한된 수만 호스팅하며 전체 요구 사항이 없습니다. 데이터베이스 플랫폼에 대한 학습과 반복의 기회를 제시합니다.

개발 동안 Cells의 수는 1에서 최대 10으로 증가할 것으로 예상되며, 두 번째 Cell이 생성되고 두 번째 클러스터가 필요할 때까지 여러 달이 걸릴 것으로 예상됩니다.

현재 Cloud SQL은 주요한 요구 사항을 충족시키지 않으며 해당 요구 사항이 완전히 포함된 로드맵도 없습니다. Cells 1.0 타임라인을 해제하기 위해 임시로 Cloud SQL을 사용할 것이며, 이에 따른 위험과 병목 현상에 동의합니다.

  • 최종 플랫폼으로 마이그레이션할 때 다운타임이 발생할 것입니다!
  • 서비스 품질은 GitLab.com과 동일하지 않을 것입니다.
    • 깊은 수준의 지원에 대한 명확한 SLO가 없습니다.
    • 합리적인 다운타임으로 주요 버전 업그레이드가 없습니다.
  • 신뢰할 수 있는 이 솔루션을 50k 사용자로 성장시키지 못할 것이며, 우리는 이미 3k 사용자에 대한 연결 풀링에 문제가 있음을 알 수 있습니다.

요구 사항을 충족하는 솔루션을 찾아야 하며, Cells 1.0 이후로 이를 사용할 수 있도록 만들기를 우선시합니다.

Cells 1.x

Cells 1.0에서 강조했듯이 장기 요구 사항을 충족하기 위한 충분한 플랫폼을 구축하기 위해 임시로 Cloud SQL을 시작으로 시작합니다.

첫 번째 단계는 사용 가능한 k8s 오퍼레이터를 평가하고 가장 적합한 후보를 완전한 평가하기 위한 페이즈입니다.

현재 데이터베이스 플랫폼

현재 데이터베이스 플랫폼은 미래 성장에 제약이 있지만 현재는 포화 상태에는 도달하지 않았습니다. 데이터베이스가 병목 현상이 될 때가 명확하지 않지만, 이전 분해 이전의 경험에 따르면 크기가 200%인 데이터베이스는 운영상의 어려움을 야기합니다.

현재로서는 데이터베이스 크기가 두 배로 증가하는 데 얼마나 걸릴지 예측할 수 없지만, 다음 24개월 이내인 2026년까지는 그럴 것으로 예상됩니다.

이는 중요한 데이터를 셀로 이전하거나, 여기서 데이터베이스 플랫폼을 개선/변경할 충분한 시간을 제공합니다.