본문 바로가기

DevOps

[Envoy] Envoy Proxy Architecture

반응형

# 1. 개요

MSA(Micro Service Architecture)를 사용하는 기업이 많아지면서 MSA 서비스 네트워크 통신은 어떻게 처리할지 고민하게 되었고, HTTP , HTTP2 뿐만 아니라 gRPC, Kafka, MongoDB 등 여러 Protocol 간의 통신을 어떻게 효율적으로 처리할지, 분산 추적 및 헤더 등에 대한 관리는 어떻게 할지 고민하게 되었다.

 

이에 따라 L7 기능을 갖춘 Proxy의 필요성이 느껴지게 되었고 그 중 가장 널리 사용되고 있는 Envoy에 대해서 간단하게 설명하도록 하겠다.

 

- L7과 L4는 아래의 차이점이 존재하며, 당연히 L4 레벨의 통신이 좀 더 빠를 수 밖에 없다.

   하지만 좀 더 많은 정보를 기반으로 프록시 및 라우팅을 설정할 수 있는 것이 L7 계층이다.

 

[1] L7 : Application Layer에서 Proxy를 수행하며, Client가 요청을 하면 Header 등 추가 정보를 확인하여 그에 따라 Response를 보내줘야 한다.

 

[2] L4 : Transport Layer에서 Proxy를 수행하며, Client가 요청을 하면 IP, Port, TCP 수준의 정보를 확인하여 그에 따라 Response를 보내줘야 한다.

 

 

# 2. 기능

 

[1] L7 Proxy 뿐만 아니라 L4 Proxy의 역할도 수행

: TCP, HTTP Proxy 및 TLS 인증 모두 가능하다.

 

[2] L7 수준에서의 기능 지원

: Rate Limiting, 버퍼링, 라우팅 및 포워딩 등 다양한 기능

 

[3] HTTP/2 , gRPC 지원

 

[4] retry, Circuit Breaker, Speed Limiting 등 기능 지원

 

[5] Health Check 지원

 

[6] MongoDB, DynamoDB 등 프록시 지원

 

 

# 3. Envoy Proxy 아키텍쳐 및 구성 요소

 

- 다운스트림 / 업스트림


- 클러스터 : 호스트 / Endpoint 그룹
    - 로드밸런싱 정책 O


- 리스너 : downstream 클라이언트들을 위한 Port (Frontend HAProxy와 유사)
    - TCP/HTTP Filters
    - TLS


- 네트워크 필터 : 어떻게 Envoy가 Listener, Cluster와 매핑하는지 정의
    - TCP Proxy 네트워크 필터 (envoy.filters.network.tcp_proxy)
    - HTTP Proxy 네트워크 필터 (envoy.filters.network.http_connection_manager)
    - MongoDB/MySQL 네트워크 필터


- 쓰레딩 모델
    - Single 프로세스 & 멀티 쓰레디드 모델
    - 각각의 Thread는 단일 커넥션을 맺음
    - 각 쓰레드들은 서로가 무엇을 하는지 모르고, 자신의 업무만 처리함

 

- 커넥션 풀 : 클러스터 내 각각의 Host 들은 1개 이상의 Connection Pool을 얻는다.
    - 커넥션 풀은 워커 쓰레드 당 하나씩 얻는다.

 

 

 

 

 

 

 

 

 

반응형