본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Fly Proxy

원문 보기 위키 갱신

Fly Proxy는 공용 인터넷과 Fly.io 플랫폼 사이, 그리고 Fly.io에서 실행되는 모든 것을 포함하는 전역 WireGuard 메시 내부에 있는 편재한 라우팅 계층이에요. 모든 Fly.io 에지와 워커는 Fly Proxy를 실행해 우리 인프라 주위로 데이터를 옮기는 무거운 작업을 수행해요: 트래픽 관리와 로드 밸런싱, 프로토콜 핸들러 적용, 서비스 연결을 처리하죠.

Fly Proxy가 하는 일 요약:

  • 클라이언트 연결을 받아 가장 가까운 지역의 앱 Machine에 매칭
  • WireGuard 터널을 통한 Fly.io 서버 간 백홀 처리
  • 6PN(사설 네트워크)의 사설 Flycast 주소로 요청 라우팅
  • 앱 Machine에 요청 로드 밸런싱
  • 다른 프로토콜에 대한 연결 처리:
    • 대부분의 공용 앱에 대해 기본적으로 TLS 종료
    • Postgres 연결에 대한 TLS 종료
    • TCP 연결에 PROXY 프로토콜 헤더 작성
  • 앱에 대한 트래픽 기반 Machine autostop/autostart
  • fly-replay 응답 헤더를 사용한 동적 요청 라우팅

출처: 문서

본문

Fly Proxy가 들어오는 공용 요청을 라우팅하는 방법

앱 사용자 중 한 명이 Fly.io의 앱에 요청을 하면, 그 요청은 우리의 가장 가까운 에지 서버에 도착해요. (에지 서버의) Fly Proxy는 요청의 세부사항을 확인하고, 적절한 헤더를 추가하고, HTTP 트래픽을 HTTPS로 리다이렉트하고, 알맞은 헤더를 통해 WireGuard 터널 백홀을 거쳐 앱의 Machine을 호스팅하는 가장 가까운 정상 워커 서버로 라우팅해요. (이번엔 워커의) Fly Proxy는 로컬 가상 인터페이스를 통해 앱을 실행하는 Machine으로 요청을 보내, 앱이 자기 일을 하게 해요. Fly Proxy는 Machine에서 워커로, 워커에서 에지 서버로, 다시 사용자로의 응답을 처리해요.

Fly Proxy는 앱, Machine, 서비스에 대한 모든 정보를 corrosion에서 얻어요. 이는 Fly.io 플랫폼의 거의 모든 것의 상태를 저장하는 우리의 서비스 카탈로그예요. Corrosion은 모든 에지와 지역을 포괄하는 고도로 분산된 gossip 기반 서비스 디스커버리를 제공해요.

Fly Proxy가 사설 네트워크(6PN)를 통해 요청을 라우팅하는 방법

앱은 기본적으로 Fly Proxy의 도움 없이 사설 네트워크에서 서로 통신할 수 있어요. 하지만 Fly Proxy 기능을 사용하고 싶다면 Flycast로 할 수 있어요.

앱에 Flycast 주소를 할당하면 트래픽은 사설 네트워크 안에 완전히 머무르면서 Fly Proxy를 통해 라우팅돼요. App 1이 같은 사설 네트워크의 App 2에 요청하면, App 1의 Machine을 호스팅하는 워커의 Fly Proxy가 요청의 세부사항을 확인하고, 적절한 헤더를 추가하고, 같은 WireGuard 터널 백홀을 통해 App 2의 Machine을 호스팅하는 가장 가까운 정상 워커로 라우팅해요. 그 서버의 Fly Proxy는 앱 2를 실행하는 Machine으로 요청을 보내요.

로드 밸런싱

Fly Proxy는 앱 구성의 동시성 설정, 현재 부하, 근접성의 조합을 사용해 앱의 개별 Machine으로 요청을 라우팅해요.

Fly Proxy가 부하를 어떻게 밸런싱하는지 설명하는 자세한 정보와 예시는 Load balancing을 참조하세요.

연결 핸들러

연결 핸들러 설정은 특정 프로토콜의 TCP 요청을 앱에 도달하기 전에 어떻게 변환할지 Fly Proxy에 알려줘요. 대부분의 표준 웹 서비스는 기본적으로 http와 tls 핸들러를 모두 사용하며, PROXY 프로토콜을 사용하는 앱을 위한 선택 핸들러가 있어요. Postgres 연결은 자체 pg_tls 핸들러를 받아요.

핸들러는 필수가 아니에요. 사용하지 않으면 Fly Proxy는 변경 없이 TCP를 앱에 전달할 뿐이에요.

연결 핸들러에 대해 자세히 알아보세요.

Machine autostart 및 autostop

Fly Proxy는 들어오는 요청에 따라 기존 Machine을 시작하고 멈출 수 있어요. 그래서 앱이 추가 Machine을 계속 실행하지 않으면서도 수요의 버스트를 수용할 수 있어요.

Fly Proxy는 autostop/autostart에 대해 로드 밸런싱과 같은 동시성 설정을 사용해 Machine에 초과 용량이 있어 멈출 수 있는 시점을 결정해요.

autostop/autostart 작동 방식과 구성 방법에 대해 자세히 알아보세요.

fly-replay를 사용한 동적 요청 라우팅

fly-replay 응답 헤더는 Fly Proxy가 원래 요청을 앱의 다른 지역이나 Machine, 심지어 조직의 다른 앱으로 재전달(replay)하도록 지시해요. 앱은 지역, Machine 또는 앱을 지정하는 fly-replay 헤더로 응답을 보내야 하고, Fly Proxy는 지시대로 전체 요청을 재생해요.

동적 요청 라우팅에 대해 자세히 알아보세요.

더 알아보기 (Learn more)