특정 작업 클래스 처리
경고:
이들은 고급 설정입니다. GitLab.com에서 사용되지만, 대부분의 GitLab 인스턴스는 모든 큐를 듣는 추가 프로세스만 추가해야 합니다. 이는 참조 아키텍처에서 설명된 것과 동일한 접근 방식입니다.
대부분의 GitLab 인스턴스는 모든 프로세스가 모든 큐를 듣도록 구성해야 합니다.
또 다른 대안은 라우팅 규칙을 사용하는 것입니다. 이는 애플리케이션 내 특정 작업 클래스를 구성한 큐 이름으로 방향을 정합니다. 그런 다음 Sidekiq 프로세스는 구성된 큐 중 일부만 듣기만 하면 됩니다. 이렇게 하면 매우 대규모 배포에서 Redis의 부하가 줄어듭니다.
라우팅 규칙
- GitLab 15.4에 도입된 기본 라우팅 규칙 값.
- GitLab 17.0에서 라우팅 규칙으로 대체된 큐 선택기.
참고:
메일러 작업은 라우팅 규칙으로 라우팅할 수 없으며 항상 mailers
큐로 간다. 라우팅 규칙을 사용할 때는 적어도 하나의 프로세스가 mailers
큐를 듣고 있는지 확인해야 합니다. 일반적으로 이는 default
큐와 함께 배치될 수 있습니다.
대부분의 GitLab 인스턴스가 Sidekiq 큐를 관리하기 위해 라우팅 규칙을 사용하는 것을 권장합니다. 이렇게 하면 관리자가 작업 클래스의 속성에 따라 단일 큐 이름을 선택할 수 있습니다. 구문은 [query, queue]
의 쌍으로 이루어진 정렬된 배열입니다:
-
쿼리는 작업자 일치 쿼리입니다.
-
큐 이름은 유효한 Sidekiq 큐 이름이어야 하며, 큐 이름이
nil
이거나 빈 문자열인 경우 작업자는 대신 작업자의 이름으로 생성된 큐로 라우팅됩니다. (더 많은 정보는 사용 가능한 작업 클래스 목록을 참조하세요).
큐 이름은 사용 가능한 작업 클래스 목록에 있는 기존 큐 이름과 반드시 일치할 필요는 없습니다. -
작업자와 일치하는 첫 번째 쿼리가 해당 작업자를 위해 선택되며, 나중의 규칙은 무시됩니다.
라우팅 규칙 마이그레이션
Sidekiq 라우팅 규칙이 변경된 후에는 작업을 완전히 잃지 않도록 마이그레이션에 주의해야 합니다. 이는 작업 큐가 긴 시스템에서 특히 중요합니다. 마이그레이션은 Sidekiq 작업 마이그레이션에서 언급된 마이그레이션 단계를 따름으로써 수행할 수 있습니다.
스케일된 아키텍처의 라우팅 규칙
라우팅 규칙은 애플리케이션 구성의 일부로 GitLab 노드(특히 GitLab Rails 및 Sidekiq 노드) 전반에 걸쳐 동일해야 합니다.
자세한 예시
이것은 다양한 가능성을 보여주기 위한 종합적인 예시입니다. 헬름 차트 예시도 사용 가능합니다. 이것들은 권장 사항이 아닙니다.
-
/etc/gitlab/gitlab.rb
파일을 편집하세요:sidekiq['routing_rules'] = [ # CPU에 바인딩되지 않은 고급 긴급성 작업자를 `high-urgency` 큐로 라우팅 ['resource_boundary!=cpu&urgency=high', 'high-urgency'], # 데이터베이스, gitaly 및 전역 검색 작업자를 `throttled` 큐로 라우팅 ['feature_category=database,gitaly,global_search&urgency=throttled', 'throttled'], # 외부 세계와 접촉하는 모든 작업자를 `network-intensive` 큐로 라우팅 ['has_external_dependencies=true|feature_category=hooks|tags=network', 'network-intensive'], # 와일드카드 매칭, 나머지를 `default` 큐로 라우팅 ['*', 'default'] ]
그런 다음
queue_groups
를 생성된 큐 이름과 일치하도록 설정할 수 있습니다. 예를 들어:sidekiq['queue_groups'] = [ # 두 개의 고급 긴급성 프로세스 실행 'high-urgency', 'high-urgency', # 조정된, 네트워크 집약적, 수입을 위한 하나의 프로세스 실행 'throttled,network-intensive,import', # 기본 및 메일러 큐에서 하나의 '캐치올' 프로세스 실행 'default,mailers' ]
-
파일을 저장하고 GitLab을 재구성하세요:
sudo gitlab-ctl reconfigure
작업자 일치 쿼리
GitLab은 라우팅 규칙에 의해 사용되는 속성을 바탕으로 작업자를 일치시키기 위한 쿼리 구문을 제공합니다.
쿼리는 두 가지 구성 요소로 이루어져 있습니다:
- 선택할 수 있는 속성.
- 쿼리를 구성하는 데 사용되는 연산자.
사용 가능한 속성
큐 일치 쿼리는 Sidekiq 스타일 가이드에서 설명된 작업자 속성을 기반으로 작동합니다. 우리는 작업자 속성의 하위 집합을 기반으로 쿼리를 지원합니다:
-
feature_category
- 큐가 속하는 GitLab 기능 범주입니다. 예를 들어,merge
큐는source_code_management
범주에 속합니다. -
has_external_dependencies
- 큐가 외부 서비스에 연결되는지 여부입니다. 예를 들어, 모든 가져오기(importer)는 이 값을true
로 설정합니다. -
urgency
- 이 큐의 작업이 얼마나 빨리 실행되어야 하는지를 나타냅니다.high
,low
, 또는throttled
일 수 있습니다. 예를 들어,authorized_projects
큐는 사용자 권한을 새로 고치는 데 사용되며,high
긴급도입니다. -
worker_name
- 작업자 이름입니다. 이 속성을 사용하여 특정 작업자를 선택합니다. 아래 사용 가능한 작업 클래스 목록에서 모든 사용 가능한 이름을 찾을 수 있습니다. -
name
- 작업자 이름에서 생성된 큐 이름입니다. 이 속성을 사용하여 특정 큐를 선택합니다. 이는 작업자 이름에서 생성되므로 다른 라우팅 규칙의 결과에 따라 변경되지 않습니다. -
resource_boundary
- 큐가cpu
,memory
, 또는unknown
으로 제한되는지 여부입니다. 예를 들어,ProjectExportWorker
는 메모리에서 데이터를 로드한 후 내보내기 위해 저장해야 하므로 메모리 제한이 있습니다. -
tags
- 큐에 대한 단기 주석입니다. 이러한 주석은 릴리즈에서 릴리즈로 자주 변경될 것으로 예상되며, 완전히 제거될 수 있습니다.
has_external_dependencies
는 boolean 속성입니다: 정확한 문자열 true
만 true로 간주되며, 나머지는 모두 false로 간주됩니다.
tags
는 집합(set)으로, =
는 교집합을 확인하고, !=
는 이분산 집합을 확인합니다. 예를 들어, tags=a,b
는 태그 a
, b
또는 둘 다 가진 큐를 선택합니다. tags!=a,b
는 두 태그 모두 없는 큐를 선택합니다.
사용 가능한 연산자
라우팅 규칙은 다음과 같은 연산자를 지원합니다. 우선 순위가 높은 것부터 낮은 것까지 나열됩니다:
-
|
- 논리적OR
연산자입니다. 예를 들어,query_a|query_b
(여기서query_a
와query_b
는 다른 연산자로 구성된 쿼리)는 두 쿼리 중 하나라도 일치하는 큐를 포함합니다. -
&
- 논리적AND
연산자입니다. 예를 들어,query_a&query_b
(여기서query_a
와query_b
는 다른 연산자로 구성된 쿼리)는 두 쿼리에 모두 일치하는 큐만 포함합니다. -
!=
-NOT IN
연산자입니다. 예를 들어,feature_category!=issue_tracking
은issue_tracking
기능 범주에서 모든 큐를 제외합니다. -
=
-IN
연산자입니다. 예를 들어,resource_boundary=cpu
는 CPU에 제한된 모든 큐를 포함합니다. -
,
- 집합 연결 연산자입니다. 예를 들어,feature_category=continuous_integration,pages
는continuous_integration
범주 또는pages
범주에서 모든 큐를 포함합니다. 이 예시는 OR 연산자를 사용하여도 가능하지만, 더 간결하게 표현할 수 있으며 낮은 우선 순위를 가집니다.
이 구문에 대한 연산자 우선 순위는 고정되어 있습니다: AND
가 OR
보다 높은 우선 순위를 가지도록 할 수 없습니다.
위 표준 큐 그룹 구문과 마찬가지로, 전체 큐 그룹으로서 단일 *
는 모든 큐를 선택합니다.
사용 가능한 직업 클래스 목록
기존 Sidekiq 직업 클래스와 큐의 목록은 다음 파일을 확인하세요: