Concurrency limiting
Gitaly에서 RPC 및 pack-objects 동시성 제한을 설정하여 서버 과부하를 방지하는 방법을 설명합니다.
Gitaly를 실행하는 서버에 과부하가 걸리지 않도록 다음 항목의 동시성을 제한할 수 있습니다: RPC. 팩 오브젝트(pack-objects). 이러한 제한은 고정값으로 두거나 적응형(adaptive)으로 설정할 수 있습니다. Warning 환경에 제한을 적용할 때는 신중해야 하며, 예기치 않은 트래픽에 대비하는 등 일부 상황에서만 적용합니다. 제한에 도달하면 연결이 끊어져 사용자에게 부정적인 영향을 줍니다. 일관되고 안정적인 성능을 위해서는 노드 사양 조정, 대규모 리포지터리 검토 , 워크로드 점검 등 다른 방안을 먼저 살펴봅니다. RPC 동시성 제한 # 리포지터리를 클론하거나 풀할 때 백그라운드에서 여러 RPC가 실행됩니다. 그중 Git 팩 RPC는 다음과 같습니다: SSHUploadPackWithSidechannel (Git SSH 용). PostUploadPackWithSidechannel (Git HTTP 용). 이러한 RPC는 많은 리소스를 소비하므로 다음과 같은 상황에서 상당한 영향을 줄 수 있습니다: 예기치 않게 트래픽이 급증한 경우. 권장 사례를 따르지 않는 대규모 리포지터리 를 대상으로 실행하는 경우. 이러한 상황에서는 Gitaly 구성 파일의 동시성 제한을 사용해 이 프로세스가 Gitaly 서버에 과부하를 일으키지 않도록 제한할 수 있습니다. 예를 들면 다음과 같습니다: # in /etc/gitlab/gitlab.rb gitaly[ 'configuration' ] = { # ... concurrency: [ { rpc: '/gitaly.SmartHTTPService/PostUploadPackWithSidechannel' , max_per_repo: 20 , max_queue_wait: '1s' , max_queue_size: 10 , }, { rpc: '/gitaly.SSHService/SSHUploadPackWithSidechannel' , max_per_repo: 20 , max_queue_wait: '1s' , max_queue_size: 10 , }, ], } rpc 는 리포지터리별 동시성 제한을 설정할 RPC의 이름입니다. max_per_repo 는 리포지터리별로 해당 RPC에서 동시에 처리 중인 RPC 호출의 최대 개수입니다. max_queue_wait 은 요청이 Gitaly에 의해 처리되기까지 동시성 큐에서 대기할 수 있는 최대 시간입니다. max_queue_size 는 Gitaly가 요청을 거부하기 전까지 동시성 큐(RPC 메서드별)가 커질 수 있는 최대 크기입니다. 이 설정은 해당 RPC에서 동시에 처리 중인 RPC 호출 수를 제한합니다. 제한은 리포지터리별로 적용됩니다. 위 예시에서는 다음과 같이 동작합니다: Gitaly 서버가 제공하는 각 리포지터리는 PostUploadPackWithSidechannel 과 SSHUploadPackWithSidechannel RPC 호출을 최대 20 개까지 동시에 처리할 수 있습니다. 20 개 슬롯을 모두 사용한 리포지터리에 다른 요청이 들어오면 그 요청은 큐에 들