대형 MSA의 단일 Application과 Service를 위해 설계된 고성능 분산 c++프록시입니다.
다음 목적을 지니고 태어난 프로젝트이며,
“The network should be transparent to applications. When network and application problems do occur it should be easy to determine the source of the problem.”
네트워크는 애플리케이션에 투명해야하며, 장애가 발생했을시 어디에서 문제가 발생했는지 쉽게 파악할 수 있어야 한다.
디자인 목표는 다음과 같습니다.
모듈화가 잘되어있으며 테스트하기 쉽게 쓰여짐
플랫폼에 구애받지 않는 방식으로 기능을 제공하여 네트워크를 추상화
L7단이기때문에 L4보다는 성능 감소가 다소 존재하지만 가능한 최고 성능을 목표로 함
Background++ -L7과 L4간의 성능차이가 있는 이유-
HTTP레벨에서 프록시 : 전체 요청(request)을 읽고 파싱해야하며 헤더의 정보를 확인하고 무엇을 해야할지 결정. 그 후 전체 응답(response)를 백엔드에서 읽어와 클라이언트에 보내줘야 한다.
downstream host의 요청을 처리해주는 listener의 설정 부분입니다. 10000번 포트로 접근했을때의 처리를 담고 있습니다. filter_chains파트에 filter들을 연속해서 정의하는데, http_connection_manager를 이용하여 모든 트래픽을 service_google이라는 클러스터로 라우팅 하도록 설정하고있습니다.
clusters:- name:service_googleconnect_timeout:0.25stype:LOGICAL_DNS# Comment out the following line to test on v6 networksdns_lookup_family:V4_ONLYlb_policy:ROUND_ROBINload_assignment:cluster_name:service_googleendpoints:- lb_endpoints:- endpoint:address:socket_address:address:www.google.comport_value:443transport_socket:name:envoy.transport_sockets.tlstyped_config:"@type": type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContextsni:www.google.com
1. Overview # 지난 몇년간 컨테이너기술은 코드를 패키징하고 배포하는데 대중적인 기술이 되었습니다. 이런 특징 외에도 컨테이너를 통해 분산 응용 프로그램을 구축하는 방법에 대해서 주목해볼 필요가 있습니다.
이번 글에서는 MicroService Architecture에서 컨테이너들을 다루는 디자인패턴 3개를 소개하겠습니다.