다음을 통해 공유


클라우드 네이티브 통신 패턴

이 콘텐츠는 Azure용 클라우드 네이티브 .NET 애플리케이션 설계 eBook 에서 발췌한 것으로, .NET 문서에서 제공되거나 오프라인 상태에서도 읽을 수 있는 PDF(무료 다운로드 가능)로 제공됩니다.

Azure용 클라우드 기본 .NET 앱 eBook 표지 썸네일.

클라우드 네이티브 시스템을 구축할 때 통신은 중요한 디자인 결정이 됩니다. 프런트 엔드 클라이언트 애플리케이션은 백 엔드 마이크로 서비스와 어떻게 통신하나요? 백 엔드 마이크로 서비스는 어떻게 서로 통신하나요? 클라우드 네이티브 애플리케이션에서 통신을 구현할 때 고려해야 할 원칙, 패턴 및 모범 사례는 무엇인가요?

통신 고려 사항

모놀리식 애플리케이션에서 통신은 간단합니다. 코드 모듈은 서버의 동일한 실행 공간(프로세스)에서 함께 실행됩니다. 이 방법은 모든 항목이 공유 메모리에서 함께 실행될 때 성능 이점이 있을 수 있지만, 밀접하게 연결된 코드로 인해 유지 관리, 발전 및 크기 조정이 어려워집니다.

클라우드 네이티브 시스템은 다수의 소규모 독립 마이크로 서비스로 마이크로 서비스 기반 아키텍처를 구현합니다. 각 마이크로 서비스는 별도의 프로세스에서 실행되며 일반적으로 클러스터에 배포된 컨테이너 내에서 실행됩니다.

클러스터는 가상 머신 풀을 함께 그룹화하여 고가용성 환경을 형성합니다. 컨테이너화된 마이크로 서비스 배포 및 관리를 담당하는 오케스트레이션 도구로 관리됩니다. 그림 4-1은 완전 관리형 Azure Kubernetes Services를 사용하여 Azure 클라우드에 배포된 Kubernetes 클러스터를 보여 줍니다.

Azure의 Kubernetes 클러스터

그림 4-1. Azure의 Kubernetes 클러스터

클러스터 전체에서 마이크로 서비스는 API 및 메시징 기술을 통해 서로 통신합니다.

마이크로 서비스는 많은 이점을 제공하지만 간단하지만은 않습니다. 이제 구성 요소 간의 로컬 In-Process 메서드 호출이 네트워크 호출로 대체됩니다. 각 마이크로 서비스는 네트워크 프로토콜을 통해 통신해야 하므로 시스템이 복잡해집니다.

  • 네트워크 정체, 대기 시간 및 일시적인 오류 문제는 여전합니다.
  • 복원력(즉, 실패한 요청 다시 시도)은 필수적입니다.
  • 일부 호출은 일관된 상태를 유지하기 위해 멱등성이어야 합니다.
  • 각 마이크로 서비스는 호출을 인증하고 권한을 부여해야 합니다.
  • 각 메시지는 직렬화한 다음 역직렬화해야 합니다. 이는 비용이 많이 들 수 있습니다.
  • 메시지 암호화/암호 해독 중요해집니다.

Microsoft에서 무료로 제공하는 책 .NET 마이크로 서비스: 컨테이너화된 .NET 애플리케이션을 위한 아키텍처는 마이크로 서비스 애플리케이션의 통신 패턴에 대한 심층적인 내용을 제공합니다. 이 장에서는 Azure 클라우드에서 사용할 수 있는 구현 옵션과 함께 이러한 패턴에 대한 대략적인 개요를 제공합니다.

이 장에서는 먼저 프런트 엔드 애플리케이션과 백 엔드 마이크로 서비스 간의 통신을 다룹니다. 그런 다음 백 엔드 마이크로 서비스가 서로 통신하는 방법을 살펴보겠습니다. Up 및 gRPC 통신 기술을 살펴보겠습니다. 마지막으로 서비스 메시 기술을 사용하여 새롭고 혁신적인 통신 패턴을 살펴보겠습니다. 또한 Azure 클라우드가 클라우드 네이티브 통신을 지원하기 위해 다양한 종류의 지원 서비스를 제공하는 방법도 알아보겠습니다.