NO.17 서로 다른 클라우드 네이티브 애플리케이션 서비스 간의 통신 방식은 무엇인가요?
클라우드 네이티브란 무엇인가요?
클라우드 네이티브 기술은 컨테이너, 마이크로서비스, 서버리스 기능, 개발 파이프라인, 코드로 표현되는 인프라, 이벤트 중심 애플리케이션, 애플리케이션 프로그래밍 인터페이스(API)를 사용하는 것이 특징입니다. 클라우드 네이티브를 사용하면 더 빠른 소프트웨어 개발과 복원력 있고 관리 가능하며 관찰 가능하고 글로벌 엔터프라이즈 수준으로 동적으로 확장할 수 있는 애플리케이션을 구축할 수 있습니다.
클라우드 네이티브 애플리케이션을 구축할 때는 백엔드 서비스가 서로 통신하는 방식에 민감해야 합니다. 이상적으로는 서비스 간 통신이 적을수록 좋습니다. 하지만 백엔드 서비스는 작업을 완료하기 위해 서로 의존하는 경우가 많기 때문에 항상 피할 수 있는 것은 아닙니다.
마이크로서비스 간 직접 HTTP 호출은 비교적 간단하게 구현할 수 있지만, 이를 최소화하기 위해 주의를 기울여야 합니다. 우선, 이러한 호출은 항상 동기식이며 결과가 반환되거나 요청 시간이 초과될 때까지 작업을 차단합니다. 독립적으로 발전하고 자주 배포할 수 있는 독립적인 서비스였던 마이크로서비스가 이제는 서로 결합되어 있습니다. 마이크로서비스 간의 결합이 증가함에 따라 마이크로서비스의 아키텍처적 이점은 감소합니다.
일부 시스템에서는 다른 마이크로서비스에 직접 HTTP 호출을 한 번만 하는 드문 요청을 실행하는 것이 허용될 수 있습니다. 하지만 여러 마이크로서비스에 직접 HTTP 호출을 호출하는 대량 호출은 바람직하지 않습니다. 지연 시간을 증가시키고 시스템의 성능, 확장성 및 가용성에 부정적인 영향을 미칠 수 있습니다. 더 심각한 문제는 그림 4-9와 같이 일련의 긴 직접 HTTP 통신으로 인해 동기식 마이크로서비스 호출의 깊고 복잡한 체인이 발생할 수 있다는 점입니다:
메시지 큐는 생산자와 소비자가 메시지를 전달하는 중개 구조입니다. 큐는 비동기식 지점 간 메시징 패턴을 구현합니다.
이벤트
메시지 대기열은 생산자가 소비자에게 비동기적으로 메시지를 보낼 수 있는 커뮤니케이션을 구현하는 효과적인 방법입니다.
참조:
https://www.xenonstack.com/blog/cloud-native-architecture/
https://www.oracle.com/sa/cloud/cloud-native/
https://www.oracle.com/technetwork/topics/entarch/cloud-native-app-development-wp-3664668.pdf