기타/기타

Envoy 오픈소스란 무엇인가

pymin 2023. 1. 26. 16:40
반응형

 

엔보이 란?

Envoy는 대규모 최신 서비스 지향 아키텍처용으로 설계된 L7 프록시 및 통신 버스입니다. 

 

 

이 프로젝트는 다음과 같은 신념에서 탄생했습니다.

네트워크는 애플리케이션에 투명해야 합니다. 네트워크 및 애플리케이션 문제가 발생하면 문제의 원인을 쉽게 확인할 수 있어야 합니다.

 

실제로 앞에서 언급한 목표를 달성하는 것은 매우 어렵습니다. Envoy는 다음과 같은 높은 수준의 기능을 제공하여 이를 시도합니다.

 

Out of Process 아키텍처: Envoy는 모든 애플리케이션 서버와 함께 실행되도록 설계된 독립형 프로세스입니다. 모든 Envoy는 각 애플리케이션이 localhost와 메시지를 송수신하고 네트워크 토폴로지를 인식하지 못하는 투명한 통신 메시를 형성합니다. 프로세스 외 아키텍처는 서비스 간 통신에 대한 기존 라이브러리 접근 방식에 비해 두 가지 실질적인 이점이 있습니다.

  • Envoy는 모든 애플리케이션 언어와 호환됩니다. 단일 Envoy 배포는 Java, C++, Go, PHP, Python 등 간에 메시를 형성할 수 있습니다. 서비스 지향 아키텍처에서 여러 애플리케이션 프레임워크 및 언어를 사용하는 것이 점차 보편화되고 있습니다. Envoy는 간극을 투명하게 연결합니다.
  • 대규모 서비스 지향 아키텍처로 작업한 사람이라면 누구나 알고 있듯이 라이브러리 업그레이드를 배포하는 것은 엄청나게 고통스러울 수 있습니다. Envoy는 전체 인프라에서 투명하게 신속하게 배포하고 업그레이드할 수 있습니다.

L3/L4 필터 아키텍처: Envoy의 핵심은 L3/L4 네트워크 프록시입니다. 플러그형 필터 체인 메커니즘을 통해 필터를 작성하여 다른 TCP/UDP 프록시 작업을 수행하고 주 서버에 삽입할 수 있습니다. 원시 TCP 프록시 , UDP 프록시 , HTTP 프록시 , TLS 클라이언트 인증서 인증 , Redis , MongoDB , Postgres 등과 같은 다양한 작업을 지원하도록 필터가 이미 작성되었습니다 .

 

HTTP L7 필터 아키텍처: HTTP는 Envoy 가 추가 HTTP L7 필터 계층을 지원하는 최신 애플리케이션 아키텍처의 중요한 구성 요소입니다. HTTP 필터는 버퍼링 , 속도 제한 , 라우팅/전달 , Amazon의 DynamoDB 스니핑 등과 같은 다양한 작업을 수행하는 HTTP 연결 관리 하위 시스템에 연결할 수 있습니다 .

 

퍼스트 클래스 HTTP/2 지원: HTTP 모드에서 작동할 때 Envoy  HTTP/1.1과 HTTP/2를 모두 지원합니다. Envoy는 양방향에서 투명한 HTTP/1.1에서 HTTP/2 프록시로 작동할 수 있습니다. 즉, HTTP/1.1 및 HTTP/2 클라이언트와 대상 서버의 모든 조합을 연결할 수 있습니다. 권장되는 서비스 대 서비스 구성은 모든 Envoy 간에 HTTP/2를 사용하여 요청과 응답을 다중화할 수 있는 영구 연결 메시를 생성합니다.

 

HTTP/3 지원(현재 알파 버전): 1.19.0부터 Envoy는 이제 HTTP/3 업스트림 및 다운스트림을 지원하고 HTTP/1.1, HTTP/2 및 HTTP/3의 모든 조합을 양방향으로 변환합니다.

 

HTTP L7 라우팅: HTTP 모드에서 작동할 때 Envoy는 경로, 권한, 콘텐츠 유형, 런타임 값 등에 따라 요청을 라우팅하고 리디렉션할 수 있는 라우팅 하위 시스템을 지원합니다 . 이 기능은 Envoy를 프런트/에지로 사용할 때 가장 유용합니다. 프록시이지만 서비스 대 서비스 메시를 구축할 때도 활용됩니다.

 

gRPC 지원: gRPC 는 기본 다중 전송으로 HTTP/2 이상을 사용하는 Google의 RPC 프레임워크입니다. Envoy  gRPC 요청 및 응답을 위한 라우팅 및 로드 밸런싱 기반으로 사용하는 데 필요한 모든 HTTP/2 기능을 지원합니다. 두 시스템은 매우 상호보완적입니다.

 

서비스 검색 및 동적 구성: Envoy는 중앙 집중식 관리를 위해 계층화된 동적 구성 API 집합을 선택적으로 사용합니다. 계층은 백엔드 클러스터 내의 호스트, 백엔드 클러스터 자체, HTTP 라우팅, 청취 소켓 및 암호화 자료에 대한 동적 업데이트를 Envoy에 제공합니다. 더 간단한 배포를 위해 DNS 확인을 통해 백엔드 호스트 검색을 수행 할 수 있으며 (또는 완전히 건너뛸 수도 있음) 추가 계층은 정적 구성 파일로 대체됩니다.

 

상태 확인: Envoy 메시를 구축하는 권장 방법은 서비스 검색을 최종적으로 일관된 프로세스로 취급하는 것 입니다 . Envoy에는 업스트림 서비스 클러스터의 활성 상태 확인을 선택적으로 수행할 수 있는 상태 확인 하위 시스템이 포함되어 있습니다. 그런 다음 Envoy는 서비스 검색 및 상태 확인 정보의 조합을 사용하여 정상적인 로드 밸런싱 대상을 결정합니다. Envoy는 이상 감지 하위 시스템 을 통해 수동 상태 확인도 지원합니다 .

 

고급 로드 밸런싱: 분산 시스템의 여러 구성 요소 간의 로드 밸런싱 은 복잡한 문제입니다. Envoy는 라이브러리가 아닌 자체 포함된 프록시이기 때문에 단일 위치에서 고급 로드 밸런싱 기술을 구현하고 모든 애플리케이션에서 액세스할 수 있습니다. 현재 Envoy에는 자동 재시 도, 회로 차단 , 외부 속도 제한 서비스를 통한 글로벌 속도 제한 , 요청 섀도잉  이상치 감지 에 대한 지원이 포함되어 있습니다. 요청 경주에 대한 향후 지원이 예정되어 있습니다.

 

프런트/에지 프록시 지원: 에지 에서 동일한 소프트웨어를 사용하면 상당한 이점이 있습니다(관찰 가능성, 관리, 동일한 서비스 검색 및 로드 밸런싱 알고리즘 등). Envoy에는 대부분의 최신 웹 애플리케이션 사용 사례에 대한 에지 프록시로 적합하도록 하는 기능 세트가 있습니다. 여기에는 TLS 종료, HTTP/1.1 HTTP/2 및 HTTP/3 지원 , HTTP L7 라우팅 이 포함 됩니다.

 

동급 최고의 관찰성: 위에서 언급한 바와 같이 Envoy의 주요 목표는 네트워크를 투명하게 만드는 것입니다. 그러나 문제는 네트워크 수준과 애플리케이션 수준 모두에서 발생합니다. Envoy는 모든 하위 시스템에 대한 강력한 통계 지원을 포함합니다. statsd (및 호환 제공자)는 현재 지원되는 통계 싱크이지만 다른 것을 연결하는 것은 어렵지 않습니다. 통계는 관리 포트 를 통해서도 볼 수 있습니다. 

 

 

반응형