마이크로서비스용 애플리케이션 아키텍처: 사이드카 패턴

우리의 마이크로서비스 애플리케이션 아키텍처는 어떤 모습이어야 합니까?

권한 부여, 캐싱, 구성 비밀 관리 및 관찰 가능성과 같은 교차 절단 문제를 해결하기 위해 사이드카를 사용하는 방법을 함께 살펴보겠습니다.


범분야적 우려



교차 절단 문제를 설명하는 것으로 시작하겠습니다.

애플리케이션의 비즈니스 코드 외부에 있는 일부 요구 사항은 애플리케이션의 여러 계층에서 필요합니다.

예를 들어 로깅, 구성, 캐싱, 권한 부여, 관찰 가능성…



전통적인 개발



전통적인 방법은 개발 서비스 내에서 이 모든 도구를 코딩하고 사용하는 것입니다. 동일한 언어로 작성된 다른 서비스가 있는 경우 서비스 간에 해당 코드를 공유하고 서비스 간에 패키지/라이브러리로 사용할 수 있습니다.



그래서 나쁜 시나리오는 무엇입니까?

서비스가 둘 이상의 언어로 작성된 환경에서는 이러한 요구 사항을 각 언어로 다시 구현해야 했습니다.

귀하(또는 귀하의 팀)가 다른 언어로 동일한 기능을 반복해서 작성한다고 상상해 보십시오...



이 경우 동일한 코드를 작성하는 대신 해결책이 있습니까?

가장 먼저 떠오르는 것은 이러한 요구 사항에 대해 별도의 API 서비스를 작성하는 것입니다.

이것이 올바른 해결책입니까?

우리는 어떤 문제에 직면할 수 있습니까?



소비자 서비스의 수가 증가할 때 이러한 공유 서비스를 확장하는 방법은 무엇입니까?

애플리케이션 코드를 네트워크를 통해 액세스하는 다른 서비스로 이동하면 애플리케이션에 대한 네트워크 대기 시간(지연)이 발생합니다. 응용 프로그램 속도가 느려집니다.

그렇다면 같은 이야기를 다른 언어로 다시 쓰고 싶지 않거나 네트워크 대기 시간에 직면하고 싶지 않다면 어떻게 하시겠습니까?

답변: 사이드카 패턴을 사용하겠습니다.

사이드카 패턴







그렇다면 이 사이드카는 무엇일까요?

Kubernetes에서 실행되는 포드 내에서 여러 컨테이너를 실행할 수 있습니다. 기본 애플리케이션 컨테이너 옆에서 실행되는 컨테이너를 사이드카라고 부를 수 있습니다.

이러한 추가 기능은 단일 언어로 개발할 수 있으며 이를 애플리케이션에 "주입"할 수 있습니다. 우리는 Go 언어로 사이드카를 개발하고 이를 마이크로서비스에 주입합니다.

이 "주입"작업은 이름이 Dynamic Admission Webhook인 개념을 기반으로 Kubernetes에서 수행됩니다. 자세한 내용은 글 말미에 출처 링크를 남겨두겠습니다.



포드가 확장되면 추가 사이드카도 함께 이동합니다.

또한 사이드카에서 공유되는 포드용으로 특별히 생성된 네트워크 인터페이스를 사용하면 localhost를 통해 이루어지기 때문에 네트워크 대기 시간을 무시할 수 있습니다.



사이드카로 무엇을 할 수 있습니까?
  • 포드 네트워크 구성
  • 포드 네트워크 요청/응답이 중단/조작될 수 있음
  • 서비스 메시를 만들 수 있음
  • 마이크로서비스 런타임 구현을 수행할 수 있음

  • 예를 들어 Istio Service Mesh는 사이드카로 작동할 수 있습니다. 팟(Pod)의 전체 네트워크 제어는 수신 istio-proxy가 사이드카로 인계하고 수신 및 발신 요청/응답을 조작할 수 있습니다.



    다양한 네트워크 규칙을 작성할 수 있습니다. 전체 네트워크가 istio-proxy 사이드카를 통과할 때 모든 네트워크 프로세스에 대한 메트릭 데이터가 있으며 마이크로 서비스 간 서비스 호출을 시각화할 수 있습니다.




    여기에서 내 게시물을 완료하고 싶습니다. 여러분과 함께 사이드카 접근 방식을 간단히 살펴보겠습니다. 다음 포스트에서 만나요.


    자원

    https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/

    https://betterprogramming.pub/understanding-kubernetes-multi-container-pod-patterns-577f74690aee

    https://istio.io/



    Let's Connect
    



    Github

    Github에서 저를 지원할 수 있습니다: Support mstrYoda on Github

    좋은 웹페이지 즐겨찾기