Web

[Web] Service Mesh

Hoo_Dev 2024. 5. 7. 14:48

MSA의 통신의 복잡함 해결

  • 각 서비스 간의 통신의 복잡함 → 서비스 간 연결 구조를 알기 어려워 장애가 생겼을 시 위치 파악이 어려움
    • ex) 클라이언트 → 서비스A → 서비스B 로 통신을 한다고 했을 때, 서비스B가 느려지거나 장애가 생긴다면 서비스 A에서 파악이 어려움
    • 위와 같은 상황을 해결하기 위한 기술 → Service Mesh

Service Mesh

MSA의 단점을 인프라 단계에서 해결

Service Mesh

  • 서비스와 서비스간의 통신이 있을 때, 서비스마다 프록시를 둠.
    • 서비스간의 통신은 프록시를 통해서 해결하고, 한쪽 서버에서 장애가 났을 때 프록시가 서킷 브레이커 역할을 대신해준다.
      • 서킷 브레이커(Circuit breaker)?
        • 디자인 패턴의 종류
        • 서비스A → 서킷 브레이커 → 서비스B 를 예시로 들었을 때, 서비스B가 장애가 발생했다면 서킷브레이커는 서비스B와의 통신을 끊고, 서비스A에게 에러를 반환하여 서비스A가 서비스B를 기다리지 않고 에러 로직을 처리 할 수 있도록 한다.
        • Netflix에서 이러한 마이크로서비스 패턴을 오픈소스화 함
  • 컨트롤 플레인과 데이터 플레인을 통해 관리
    • 컨트롤 플레인(Control Plane)
      • 프록시들에게 설정 정보를 넣어주고, 수행할 작업을 알려줌
      • 서비스 검색, TLS 읹으서 발급, 매트릭 집계 등 데이터 플레인이 작동하는데 필요한 컴포넌트를 제공
    • 데이터 플레인(Data Plane)
      • 설정 정보 값을 바탕으로 트래픽을 제어
      • 모든 서비스에 대한 인바운드/아웃바운드 트래픽을 관장
        • 인바운드(inbound)?
          • 네트워크에 들어오는 정보
          • 메시지가 클라이언트에서 서버로 향하는 것
          • ex) 첨부파일을 서버에 저장 할 때(업로드)
        • 아웃바운드(outbound)
          • 네트워크에서 나가는 정보
          • 클라이언트의 요청을 처리하고, 메시지가 서버에서 클라이언트로 다시 향하는 것
          • ex) 첨부파일을 다운로드 할 때(다운로드)

Service Mesh 종류

  • Spring Cloud Netfix
    • Java언어만 지원하는 Library 형식으로 코드와의 결합도가 높음
  • Istio 솔루션
    • 결합도가 낮음