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
rejected -

이 설계안은 인프라 구성 설계안에 의해 앞지른 바가 있습니다.

Cells: 배포 아키텍처

이 섹션에서는 GitLab.com의 기존 배포 아키텍처를 설명하고, 기대되는 Cells 아키텍처와 대조합니다.

1. 셀 이전 - 단일 아키텍처

이 다이어그램은 Cells 아키텍처를 도입하기 전의 단순화된 GitLab.com 배포 컴포넌트를 나타냅니다. 이 다이어그램은 아키텍처 개요에 관련이 없는 일부 서비스들을 의도적으로 생략했습니다(Cloudflare, Consul, PgBouncers, …). 이러한 서비스들은 셀 로컬로 간주되며(Cloudflare는 예외), 그 예외입니다.

컴포넌트 블록:

  • 독립적으로 배포할 수 있는 별도의 컴포넌트들.
  • 다른 컴포넌트와 독립적이며 다양한 버전 호환성을 제공합니다.

응용 프로그램 레이어 서비스:

  • 강하게 연결되어 있으며 동일한 버전의 응용 프로그램을 실행해야 합니다. !131657에서 자세히 알아보세요.
  • 각 서비스는 여러 노드에 걸쳐 실행되어 처리량을 충분히 제공하기 위해 수평으로 확장됩니다.
  • 다른 서비스와 상호 작용하기 위해 API(REST, gRPC), Redis 또는 DB를 사용하는 서비스.

의존 서비스:

  • 자주 업데이트되고 선택적으로 사용됩니다.
  • 클라우드 관리형 서비스를 사용할 수 있습니다.
  • 각 서비스는 클러스터링되어 다양한 가용 영역에 걸쳐 실행될 수 있어 고가용성을 제공합니다.
  • 객체 리포지터리는 사전 서명된 URL을 제공함으로써 사용자가 직접 액세스할 수도 있습니다.

2. 개발 셀 - 셀러 아키텍처에 맞게 응용 프로그램 조정

개발 셀의 목적은 변경 사항을 테스트하고 검증하기 위해 프로덕션과 유사한 아키텍처를 모델링하는 것입니다. 이는 참조 아키텍처 위에 테스트 셀을 구성함으로써 달성될 수 있습니다. #425197에서 자세히 알아보세요.

셀 이전과 비교했을 때의 차이점:

  • 루팅 서비스는 셀에 의해 개발되었습니다.
  • 개발 셀은 오직 개발 환경에서만 실행되어 셀 프로토타입을 수행할 수 있도록 합니다.
  • 개발 셀은 필수적으로 분리되어야 하는 서비스에만 초점을 맞춘 단순화된 GitLab.com 아키텍처를 나타냅니다.
  • 개발 셀은 프로덕션에서 사용할 목적으로 만들어진 것이 아닙니다.
  • 클러스터 전체의 데이터 공유는 셀 1의 주 데이터베이스에 대한 읽기-쓰기 연결을 통해 이루어집니다: PostgreSQL 메인 데이터베이스 및 Redis 사용자 세션 데이터베이스.

3. 초기 셀 배포 - 단일 아키텍처에서 셀 아키텍처로 변환

개발 셀과 비교했을 때의 차이점:

  • 셀에 의해 클러스터 전체 데이터 제공자가 도입되었습니다.
  • 클러스터 전체 데이터 제공자는 셀 1과 함께 배포되어 직접 클러스터 전체 데이터에 액세스할 수 있게 됩니다.
  • 클러스터 전체 데이터베이스는 주 PostgreSQL 데이터베이스와 격리됩니다.
  • 클러스터 전체 데이터 제공자는 사용자 데이터, 사용자 세션(현재 Redis 세션 클러스터에 저장), 라우팅 정보, 그리고 모든 셀에 걸쳐 클러스터 전체 설정을 저장하고 공유하는 책임을 집니다.
  • 클러스터 전체 데이터베이스 액세스는 비동기적으로 이루어집니다:
    • 읽기 액세스는 항상 데이터베이스 복제본을 사용합니다.
    • 데이터베이스 복제본은 셀과 함께 배포될 수 있습니다.
    • 쓰기 액세스는 전용 클러스터 전체 데이터 제공자 서비스를 사용합니다.
  • 추가 셀은 GitLab Dedicated과 유사한 제어 평면을 통해 배포, 업그레이드, 유지됩니다.
  • 각 셀은 가능한 한 많은 서비스를 독립적으로 실행하도록 목표를 합니다.
  • 셀은 자체 Gitaly 클러스터를 실행하거나 공유 Gitaly 클러스터를 사용하거나 그 둘 다 사용할 수 있습니다. !131657에서 자세히 알아보세요.
  • GitLab이 제공하는 공유 러너는 셀에서 지역적으로 실행될 것으로 예상됩니다.
  • 인프라 컴포넌트는 클러스터 전체에 공유될 수 있으며 다른 셀에서 사용될 수 있습니다.
  • Elasticsearch 서비스를 클러스터 전체로 실행하는 것이 더 나은지 Cell 로컬로 실행하는 것이 더 나은지에 대한 결정은 아직 정의되지 않았습니다.
  • GitLab Pages - gitlab.io 컴포넌트의 확장 방법을 결정 지연합니다.
  • Registry - registry.gitlab.com 컴포넌트의 확장 방법을 결정 지연합니다.

4. 하이브리드 셀 배포 - 초기 완전한 셀 아키텍처

초기 Cells 배포와 비교했을 때의 차이점:

  • 셀 N과 셀 1 사이의 결합이 제거되었습니다.
  • 클러스터 전체 데이터 제공자가 셀 1에서 격리되었습니다.
  • 클러스터 전체 데이터베이스(PostgreSQL, Redis)가 클러스터 전체 데이터 제공자와 함께 실행될 수 있도록 이동되었습니다.
  • 클러스터 전체 데이터에 대한 모든 응용 프로그램 데이터 액세스 경로는 클러스터 전체 데이터 제공자를 사용합니다.
  • 일부 서비스들은 여러 셀에 걸쳐 공유됩니다.

5. 대상 셀 - 완전히 분리된 셀 아키텍처

하이브리드 셀 배포와 비교했을 때의 차이점:

서비스의 분리

각 서비스는 요구 사항, 서비스 확장과 관련된 위험, 위치(클러스터 전체 또는 셀 로컬) 및 셀 간 데이터 이주 능력에 대해 개별적으로 고려될 수 있습니다.

클러스터 전체 서비스

서비스 유형 사용 설명
루팅 서비스 GitLab 빌트인 클러스터 전체 데이터 제공자 모든 GitLab SaaS 도메인의 요청을 셀로 리디렉션할 수 있는 일반적인 목적의 루팅 서비스
클러스터 전체 데이터 제공자 GitLab 빌트인 PostgreSQL, Redis, 이벤트 큐? 모든 클러스터화된 서비스에 사용자 프로필 및 라우팅 정보를 제공합니다

아키텍처에 따르면 위 서비스들은 클러스터 전체로 실행되어야 합니다:

  • 이러한 서비스는 Cells 아키텍처에서 도입된 추가 서비스입니다.

셀 로컬 서비스

서비스 유형 사용 클러스터 전체에서 셀로 이주  
Redis 클러스터 관리형 서비스 디스크 스토리지 문제 없음  
GitLab 러너 관리자 관리형 서비스 API, Google Cloud VM 인스턴스 사용 문제 없음 API와 CI 작업 실행에 대한 중대한 변경이 필요합니다

아키텍처에 따르면 위 서비스들은 셀 로컬로 실행되어야 합니다:

  • 셀 로컬 서비스에 의해 보유된 소비자 데이터는 다른 셀로 이주될 수 있어야 합니다.
  • 서비스에 의해 생성된 컴퓨트가 상당히 크며, 단일 셀 장애에 대한 높은 내구성의 영향을 줄이는 것이 강력하게 원하는 바입니다.
  • Cells 아키텍처 관점에서 클러스터 전체로 서비스를 실행하는 것이 복잡합니다.

하이브리드 서비스

서비스 유형 사용 클러스터 전체에서 셀로 이주  
GitLab Pages GitLab 빌트인 루팅 서비스, Rails API 문제 없음 .gitlab.io 또는 사용자 정의 도메인 아래 생성된 CI 페이지를 제공합니다.
GitLab 레지스트리 GitLab 빌트인 객체 리포지터리, PostgreSQL 분할 시 비자명한 데이터 마이그레이션 GitLab 컨테이너 레지스트리를 제공하는 서비스
Gitaly 클러스터 GitLab 빌트인 디스크 스토리지, PostgreSQL 문제 없음: Gitaly 노드 균형을 맞추기 위한 마이그레이션 루틴이 내장돼 있습니다. Gitaly는 Git 리포지터리 데이터를 보유합니다. 여러 Gitaly 클러스터가 응용 프로그램에서 구성될 수 있습니다.
Elasticsearch 관리형 서비스 샤딩에 필요한 많은 노드 시간 소요됨: 처음부터 클러스터 재구성 모든 프로젝트를 대상으로 검색
객체 리포지터리 관리형 서비스   직관적이지 않음: 버킷 간에 선택적으로 마이그레이션하는 것이 매우 어려움 GitLab에서 제공하는 사용자 및 CI 업로드 파일을 보유합니다.

아키텍처에 따르면 위 서비스들은 클러스터 전체 또는 셀 로컬로 실행되어야 합니다:

  • 하이브리드 서비스가 클러스터 전체로 실행될 수 있는 능력은 몇몇 서비스가 공유되기 때문에 셀 간 데이터 마이그레이션에 필요한 작업량을 줄일 수 있습니다.
  • 클러스터 전체로 실행되는 하이브리드 서비스는 단일 셀 장애에 대한 내구성 증가로 인해 셀 가용성과 내구성에 부정적인 영향을 미칠 수 있습니다.

위와 같은 서비스들은 클러스터 전체 또는 셀 로컬로 실행될 수 있는 것으로 허용됩니다:

  • 위 서비스를 클러스터 전체로 실행시키는 능력은 몇몇 서비스가 공유되기 때문에 셀 간 데이터 마이그레이션에 필요한 작업량을 줄일 수 있습니다.
  • 클러스터 전체로 실행되는 하이브리드 서비스는 단일 셀 장애에 대한 내구성 증가로 인해 셀 가용성과 내구성에 부정적인 영향을 미칠 수 있습니다.