팁 (조언)
이 콘텐츠는 eBook, Architecting Cloud Native .NET Applications for Azure에서 발췌한 것으로, .NET Docs 또는 오프라인에서 읽을 수 있는 다운로드 가능한 무료 PDF로 제공됩니다.
이 책 전체에서는 마이크로 서비스 기반 아키텍처 접근 방식을 채택했습니다. 이러한 아키텍처는 중요한 이점을 제공하지만 다음과 같은 많은 과제를 제시합니다.
Out-of-process 네트워크 통신. 각 마이크로 서비스는 네트워크 정체, 대기 시간 및 일시적인 오류를 도입하는 네트워크 프로토콜을 통해 통신합니다.
서비스 검색. 마이크로 서비스는 자체 IP 주소 및 포트가 있는 컴퓨터 클러스터에서 실행할 때 어떻게 서로 검색하고 통신하나요?
복원력. 수명이 짧은 오류를 관리하고 시스템을 안정적으로 유지하려면 어떻게 해야 할까요?
부하 분산 - 인바운드 트래픽은 어떻게 마이크로 서비스의 여러 인스턴스에 분산됩니까?
보안. 전송 수준 암호화 및 인증서 관리와 같은 보안 문제는 어떻게 적용되나요?
분산 모니터링. - 여러 소비 마이크로 서비스에서 단일 요청에 대한 추적 가능성 및 모니터링을 상호 연결하고 캡처하려면 어떻게 해야 하나요?
다양한 라이브러리 및 프레임워크를 사용하여 이러한 문제를 해결할 수 있지만 구현에 비용이 많이 들고 복잡하며 시간이 많이 걸릴 수 있습니다. 또한 인프라 문제가 비즈니스 논리와 결합됩니다.
서비스 메시
더 나은 방법은 서비스 메시라는 진화하는 기술입니다. 서비스 메시는 서비스 통신 및 위에서 언급한 다른 문제를 처리하는 기본 제공 기능을 갖춘 구성 가능한 인프라 계층입니다. 서비스 프록시로 이동하여 이러한 문제를 분리합니다. 프록시는 비즈니스 코드로부터 격리를 제공하기 위해 별도의 프로세스( 사이드카라고 함)에 배포됩니다. 그러나 사이드카는 서비스에 연결됩니다. 사이드카는 서비스와 함께 만들어지고 수명 주기를 공유합니다. 그림 6-7은 이 시나리오를 보여줍니다.
그림 6-7. 사이드카가 있는 서비스 메시
이전 그림에서는 프록시가 마이크로 서비스와 클러스터 간의 통신을 가로채고 관리하는 방법을 확인합니다.
서비스 메시는 논리적으로 두 개의 서로 다른 구성 요소인 데이터 평면 과 컨트롤 플레인으로 분할됩니다. 그림 6-8에서는 이러한 구성 요소와 해당 책임을 보여 줍니다.
그림 6-8. 서비스 메시 컨트롤 및 데이터 평면
일단 구성되면 서비스 메시는 매우 기능적입니다. 서비스 검색 엔드포인트에서 해당 인스턴스 풀을 검색할 수 있습니다. 메시는 특정 인스턴스에 요청을 보내 결과의 대기 시간 및 응답 유형을 기록할 수 있습니다. 메시는 최근 요청에 대해 관찰된 대기 시간을 포함하여 여러 요인에 따라 빠른 응답을 반환할 가능성이 가장 큰 인스턴스를 선택할 수 있습니다.
인스턴스가 응답하지 않거나 실패하면 메시는 다른 인스턴스에서 요청을 다시 시도합니다. 오류를 반환하는 경우 메시는 부하 분산 풀에서 인스턴스를 제거한 후 다시 실행합니다. 요청 시간이 초과되면 메시가 실패하고 요청을 다시 시도할 수 있습니다. 메시는 메트릭 및 분산 추적을 캡처하고 중앙 집중식 메트릭 시스템에 내보낸다.
Istio 및 Envoy
현재 몇 가지 서비스 메시 옵션이 있지만 Istio 는 이 문서 작성 당시 가장 인기 있는 옵션입니다. Istio는 IBM, Google 및 Lyft의 합작 투자입니다. 새 애플리케이션 또는 기존 분산 애플리케이션에 통합할 수 있는 오픈 소스 제품입니다. 이 기술은 마이크로 서비스를 보호하고, 연결하고, 모니터링하는 일관되고 완전한 솔루션을 제공합니다. 해당 기능은 다음과 같습니다.
- 강력한 ID 기반 인증 및 권한 부여를 사용하여 클러스터에서 서비스 간 통신을 보호합니다.
- HTTP, gRPC, WebSocket 및 TCP 트래픽에 대한 자동 부하 분산
- 풍부한 라우팅 규칙, 다시 시도, 장애 조치(failover) 및 오류 주입을 통해 트래픽 동작을 세밀하게 제어합니다.
- 액세스 제어, 속도 제한 및 할당량을 지원하는 플러그형 정책 계층 및 구성 API입니다.
- 클러스터 수신 및 송신을 포함하여 클러스터 내의 모든 트래픽에 대한 자동 메트릭, 로그 및 추적입니다.
Istio 구현의 주요 구성 요소는 Envoy 프록시라는 프록시 서비스입니다. 각 서비스와 함께 실행되며 다음 기능에 대한 플랫폼 중립적 기반을 제공합니다.
- 동적 서비스 검색.
- 부하 분산 -
- TLS 종료.
- HTTP 및 gRPC 프록시.
- 회로 차단기 복원력.
- 상태 검사.
- 카나리아 배포를 사용하여 업데이트 롤링
앞에서 설명한 것처럼 Envoy는 클러스터의 각 마이크로 서비스에 사이드카로 배포됩니다.
Azure Kubernetes Services와 통합
Azure 클라우드는 Istio를 수용하고 Azure Kubernetes Services 내에서 직접 지원합니다. 다음 링크는 시작하는 데 도움이 될 수 있습니다.
참고문헌
.NET