[마이크로서비스아키텍쳐] Lyft가 Envoy를 개발하게 된 배경
Lyft의 아키텍쳐 변천사
1. Monolithic
- 리프트도 처음에는 monolithic하게 출발했다. 그런데 모노리틱한 구조에도 불구하고 어디서 문제가 발생하는지 원인을 트래킹하는 것이 어려웠다.
2. Micro Service
- 점점 사용자가 많아지면서 microservice architecture로 전환하게 되었다.
- haproxy, load balancer, service discovery, 2 DB, 20~30개의 마이크로 서비스를 도입
- 이전 아키텍쳐보다 더 복잡해면서, 어디서 문제가 발생하는지 트래킹하는게 더 어려워졌다...!
- 마이크로 서비스로 전환하며 겪은 문제들...
- 사용하는 언어, 프레임워크, 프로토콜(HTTP/1, HTTP/2, gRPC, databases, caching...), 인프라(IaaS, CaaS, on premise, etc.), 로드 발란서(AWS ELB, F5...)가 다양해짐
- 다양한 마이크로 서비스들이 제각기 다른 구성으로 이루어져 있기에 디버깅하기(stats, tracing, logging...)가 어려워짐
- 일반적으로 서비스에서 필요로하는 retry, circuit breaking, rate limiting, timeout이 언어, 프레임워크, 라이브러리마다 다르게 구현되어 있어서 구현이 어려워짐
- 인증(authentication)과 인가(authorization) 구현이 복잡해짐
- service call이 각 언어의 라이브러리마다 별도로 구현됨
3. 더 발전된 Micro service: Envoy가 추가됨
- Envoy: 코어 스트럭쳐를 오픈소스로 제공하고, 사용자가 그 외 기능을 확장할 수 있도록 구현
Envoy를 통해 풀고자 하는 문제는 1) Networking(서비스 간의 네트워킹) 2)Observability(각 서비스의 상태를 어떻게 관찰할지)였다.
"The network should be transparent to applications. When network and application problems do occur it should be easy to determine the source of the problems." -Envoy의 목적
- Envoy가 제공하는 기능
-
self-contained process: 라이브러리가 아님.
-
L3/L4 filter architecture
-
L7 architecture
-
HTTP/2, gRPC
-
gRPC: 구글이 만든 RPC 프레임워크로 HTTP/2를 multiplexed transport로 이용함.
-
-
service discovery
-
active/passive health checking
-
config discovery ("xDS"): xDS API를 구현하는 control plane을 분리. 각 벤더마다 자신의 버전을 구현 예. Istio
-
advanced load balancing: automatic retries, circuit breaking, global rate limiting, request shadowing, zone load balancing
-
observability: L7 traffic, native support for distributed tracing, wire-level observability of MongoDB, DynamoDB..
-
edge proxy
-
참고) Service Mesh
- 마이크로 서비스 간의 통신을 담당하는 요소
- 통신 및 네트워크 기능을 비즈니스 로직과 분리한 네트워크 통신 인프라
- 모든 서비스의 인프라 레이어로 서비스들 간의 통신을 처리함
- service discovery
- 서비스 라우팅
- failure recovery
- load balancing(트래픽 관리)
- 보안
- 구현: 서비스 내의 sidecar로 구현되어 local network 스택의 일부가 됨
출처
www.youtube.com/watch?v=P719qI2h2yY
velog.io/@tedigom/MSA-제대로-이해하기-4Service-Mesh-f8k317qn1b
[MSA] Internal LoadBalancer Service Mesh
본 포스팅에서는 마이크로서비스를 관리 및 운영하는 Service Mesh에 대해 알아보자. 마이크로서비스를 정의하는 여러가지 의미 중 "서비스 기능 자체만 독립적이고 간결하게 구현하고 외
waspro.tistory.com