Workhorse를 사용하는 기능
GitLab Workhorse가 없으면 효율적으로 동작하지 않는 GitLab의 주요 기능과 Workhorse의 동작 방식을 설명합니다.
Workhorse 자체는 기능이 아니지만, GitLab에는 Workhorse 없이는 효율적으로 동작하지 않는 여러 기능이 있습니다. 효율성의 이점을 설명하기 위해, 2020Q3 GitLab.com에서 확인한 수치 를 살펴보면, Rails 애플리케이션 스레드는 평균 약 200 MB의 RSS를 사용하는 반면, Workhorse 고루틴은 약 200 KB를 사용합니다. Workhorse를 사용하는 기능의 예시: 1. HTTP를 통한 git clone 및 git push # Git clone, pull, push는 대량의 데이터를 전송하고 GitLab 측에서 CPU 집약적인 작업이 발생하기 때문에 느립니다. Workhorse 없이는 Git 리포지터리에 대한 HTTP 접근이 일반 웹 접근과 경쟁하게 되어, 훨씬 더 많은 Rails 애플리케이션 서버를 실행해야 합니다. 2. CI 러너 롱 폴링 # GitLab CI 러너는 GitLab 서버를 폴링하여 새로운 CI job을 가져옵니다. Workhorse는 CI 러너가 새로운 CI job을 기다리며 대기할 수 있는 일종의 "대기실" 역할을 합니다. Go의 효율성 덕분에 적은 비용으로 대기실에 많은 러너를 수용할 수 있습니다. 이 대기실 메커니즘 없이는 훨씬 더 많은 Rails 서버 용량을 추가해야 합니다. 자세한 내용은 롱 폴링 문서 를 참조하세요. 3. 파일 업로드 및 다운로드 # 파일 업로드 및 다운로드는 파일이 크거나 사용자의 연결 속도가 느리기 때문에 느릴 수 있습니다. Workhorse는 Rails를 대신하여 느린 부분을 처리할 수 있습니다. 이를 통해 CI 아티팩트, 패키지 리포지터리, LFS 객체 등의 기능 효율성이 향상됩니다. 4. 웹소켓 프록시 # 웹 터미널과 같은 기능은 사용자의 웹 브라우저와 인터넷에서 직접 접근할 수 없는 GitLab 내부 컨테이너 간의 지속적인 연결을 필요로 합니다. Rails 애플리케이션 스레드를 이러한 연결 프록시에 전용으로 사용하면 Workhorse가 처리하는 것보다 훨씬 더 많은 메모리가 소모됩니다. 5. Web IDE # 보안을 위해 Web IDE의 일부 기능은 별도의 오리진에서 실행되어야 합니다. 이 접근 방식을 지원하기 위해 Web IDE는 Workhorse에 의존하여 Web IDE 에셋으로 들어오고 나가는 특정 요청을 적절히 라우팅하고 데코레이션합니다. Web IDE 에셋은 정적 프론트엔드 에셋이므로, 이 작업을 Rails에 의존하는 것은 불필요한 오버헤드입니다. 6. AI 보조 기능 (GitLab Duo Workflow) # GitLab Duo Chat 및 GitLab Duo Agent Platform을 포함한 GitLab AI 보조 기능은 Workhorse에 의존하여 GitLab Duo Workflow Service에 대한 요청을 프록시합니다. Workhorse는 GitLab Rails 애플리케이션과 GitLab Duo Workflow Service 사이의 브릿지 역할을 하며, 다음을 지원합니다: 웹소켓 프록시 : 실시간 AI 상호작용을 위해 클라