Geo프록시를 사용하면 이제 보조 시스템에서 웹 요청을 주 프라이머리(primary)를 통해 Workhorse를 경유하여 프록시하므로, 보조 시스템으로 이동하는 사용자는 읽기-쓰기 UI를 보고, 주 프라이머리에서 할 수 있는 모든 작업을 수행할 수 있습니다.
요청 수명주기
최상위 수준 뷰
프록시 상호작용은 다음 다이어그램을 통해 고수준에서 설명할 수 있습니다.
프록시 검색 메커니즘
Geo프록시가 활성화되면 프라이머리로 요청을 프록시해야 하는지 여부 및 프라이머리의 URL(데이터베이스에 저장된대로)를 알기 위해 Workhorse는 내부 API를 주기적으로 확인합니다. 프록시를 활성화해야 하는 경우 내부 API는 프라이머리 URL 및 JWT로 서명된 데이터를 응답하여 모든 요청에 대해 프라이머리로 전달합니다.
깊이 있는 요청 흐름 및 프록시와 로컬 데이터 가속
구현을 상세하게 설명하면, 요청된 보조 시스템의 Workhorse는 데이터를 프록시할지 여부를 결정합니다. 데이터 유형을 로컬로 제공할 수 있는 경우(라운드트립 요청을 저장할 수 있는 경우), 데이터를 즉시 반환합니다. 그렇지 않으면, 트래픽이 주 프라이머리의 내부 URL로 전송되며, 주 프라이머리의 Workhorse에서 정확히 직접 요청과 동일하게 제공됩니다. 그런 다음 응답은 동일한 연결에서 보조 시스템의 Workhorse를 통해 사용자에게 다시 프록시됩니다.
로그인
프라이머리에 프록시된 인증 필요한 요청
Git pull
역사적인 이유로 push_from_secondary 경로를 통해 Git pull을 전달하는 데 사용됩니다. 혼란을 피하기 위해 이 경로의 이름을 바꾸는 문제가 있습니다.
HTTP(s)를 통한 Git pull
가속된 리포지터리
보조 시스템에서 리포지터리가 존재하고 주 프라이머리와 동기화되었다고 감지되면, 프록시하는 대신 해당 리포지터리를 직접 제공합니다.
프록시된 리포지터리
요청된 리포지터리가 동기화되지 않은 경우 또는 최신 상태가 아닌 것으로 감지되면, 최신 변경 내용을 가져오기 위해 요청이 주 프라이머리로 프록시됩니다.
SSH를 통한 Git pull
SSH 작업은 Workhorse 요청을 위한 메커니즘을 통해 프록시되지 않고, GitLab Shell을 통해 SSH 작업이 Git HTTP 요청으로 보조 시스템에서 주 프라이머리로 프록시됩니다.
가속된 리포지터리
보조 시스템에 리포지터리가 존재하고 주 프라이머리와 동기화되었다고 감지되면, 해당 리포지터리를 직접 제공합니다.
프록시된 리포지터리
요청된 리포지터리가 동기화되지 않았거나 최신 상태가 아닌 것으로 감지되면, 최신 변경 사항을 가져오기 위해 요청이 기본 리포지터리로 프록시됩니다.
Git 푸시
SSH를 통한 Git 푸시
SSH 작업은 Workhorse 대신 GitLab Shell을 통해 수행되므로 Workhorse 요청에 사용되는 메커니즘을 통해 프록시되지 않습니다. SSH 작업의 경우, 2차 Rails 내부 API에서 프라이머리 사이트로 Git HTTP 요청으로 프록시됩니다.
HTTP(S)를 통한 Git 푸시
요청된 리포지터리가 동기화되지 않았거나 최신 상태가 아닌 것으로 감지되면, 요청은 프라이머리로 프록시되며, 푸시는 /-/push_from_secondary/$SECONDARY_ID/*로 형식화된 로컬 경로로 리디렉션이 됩니다. 이 경로를 통한 요청은 프라이머리로 프록시되어 푸시를 처리합니다.