>  기사  >  클라우드 네이티브 애플리케이션에서 동기 및 비동기 통신 디코딩

클라우드 네이티브 애플리케이션에서 동기 및 비동기 통신 디코딩

百草
百草원래의
2024-04-09 14:14:291506검색

클라우드 네이티브 애플리케이션을 설계하려면 서로 효율적으로 통신해야 하는 마이크로서비스와 서버리스 구성 요소로 구성된 복잡한 시스템을 관리해야 합니다. HTTP 또는 gRPC를 통한 동기 통신 호출, 지정된 시간 범위 내에서 응답을 기다리고 실시간 피드백을 제공하며 즉각적인 응답이 필요한 시나리오에 적합합니다. 비동기식 통신은 메시지 브로커(예: RabbitMQ 또는 Kafka)를 활용하여 즉각적인 응답 없이 메시지를 교환하므로 시스템 확장성이 향상됩니다. 각 통신 모드의 장단점을 이해함으로써 설계자는 이러한 독립적인 요소를 효과적으로 조정하여 확장 가능하고 안정적인 고성능 클라우드 네이티브 애플리케이션을 제공하는 시스템을 설계할 수 있습니다.

클라우드 네이티브 애플리케이션에서 동기 및 비동기 통신 디코딩

각각의 기능을 수행하지만 작업을 완료하려면 서로 효과적으로 통신해야 하는 여러 개의 독립적인 부품으로 구성된 복잡한 기계를 만든다고 상상해 보세요. 이는 상호 연결된 마이크로서비스와 서버리스 구성 요소로 구성된 클라우드 네이티브 애플리케이션을 설계할 때 직면하는 과제입니다. 이 기사에서는 애플리케이션 경계 내외에서 이러한 독립적인 요소를 효과적으로 조정할 수 있는 강력하고 탄력적인 통신 시스템을 설계하는 방법을 자세히 살펴봅니다.

이러한 세분화된 서비스는 내부 및 외부 상호 작용을 위해 다양한 동기식 또는 비동기식 통신 방법을 사용합니다. 동기 통신에서는 한 서비스가 HTTP 또는 gRPC를 사용하여 다른 서비스를 호출하고 지정된 시간 내에 응답을 기다린 후 계속됩니다. 이와 대조적으로 비동기식 통신에는 즉각적인 응답을 기대하지 않고 메시지를 교환하는 작업이 포함됩니다. RabbitMQ 또는 Kafka와 같은 메시지 브로커는 안정적인 전달을 보장하기 위해 메시지를 버퍼링하는 중개자 역할을 합니다. 클라우드 네이티브 애플리케이션에서는 통신 패턴의 조합을 사용하는 것이 실용적인 접근 방식인 경우가 많습니다. 동기식 통신부터 시작해 보겠습니다.

동기통신이란 무엇인가요?

동기 커뮤니케이션은 대화와 같습니다. 한 서비스(서비스 A라고 함)가 요청을 한 다음 다른 서비스(서비스 B) 또는 외부 API의 응답을 기다립니다. 이는 질문을 하고 답변을 기다리는 것과 비슷합니다. 서비스 A는 HTTP를 통해 요청을 보내고 기다립니다. 서비스 B의 응답을 기다리거나 최대 대기 시간이 만료될 때까지 기다립니다. 이 대기 기간 동안 서비스 A는 응답을 기다리기 위해 활동을 일시 중지하는 것처럼 일시적으로 차단됩니다. 이 모드는 요청-응답 모드라고도 하며 비교적 구현이 간단합니다. 그러나 광범위한 사용에는 신중한 고려가 필요한 문제가 발생할 수 있습니다.

동기식 통신의 과제

동기식 통신은 클라우드 네이티브 툴킷의 강력한 도구이기는 하지만 신중하게 고려해야 하는 고유한 과제도 함께 제공됩니다.

시간적 결합

솔루션 전체에서 동기식 통신에 지나치게 의존하면 시간적 결합 문제가 발생할 수 있습니다. 이는 많은 수의 동기 호출이 함께 연결되어 클라이언트 애플리케이션이 응답을 수신하는 데 더 오랜 시간이 걸릴 때 발생합니다.

가용성 종속성

동기 통신을 위해서는 모든 통신 서비스를 동시에 사용할 수 있어야 합니다. 백엔드 서비스에 예기치 않은 로드가 발생하면 클라이언트 애플리케이션이 시간 초과 오류로 인해 실패하여 전체 성능에 영향을 미칠 수 있습니다.

네트워크 품질 영향

네트워크 품질은 사용 가능한 대역폭 및 서비스 백엔드 서비스 간 응답에 필요한 기간을 포함하여 동기식 통신의 성능에 직접적인 영향을 미칠 수 있습니다.

이러한 과제에도 불구하고 동기식 통신은 특정 시나리오에서 매우 유용할 수 있습니다. 다음 섹션에서는 동기식 통신이 더 나은 선택이 될 수 있는 몇 가지 사용 사례를 살펴보겠습니다.

동기식 통신을 사용하는 경우

경우에 따라 동기식 통신을 사용하는 것이 더 나은 옵션일 수 있습니다.

실시간 데이터 액세스 또는 결과 보장

동기식 통신은 즉각적이거나 실시간 피드백이 필요할 때 효율성을 높입니다. 예를 들어, 고객이 전자상거래 웹사이트에서 주문을 하면 전자상거래 프런트엔드는 재고 시스템을 확인하여 해당 품목의 재고가 있는지 확인해야 합니다. 애플리케이션이 주문 처리를 계속하려면 재고 시스템의 응답을 기다려야 하기 때문에 이는 동기식 작업입니다.

관련 작업 순서 조정

서비스가 이전 작업에 종속된 일련의 작업을 수행해야 하는 상황에서 동기식 통신은 순서를 유지할 수 있습니다. 작업 순서가 중요한 작업 흐름에 특히 적합합니다.

트랜잭션 무결성 유지

여러 구성 요소에서 데이터 일관성을 유지하는 것이 중요한 경우 동기식 통신은 원자성 트랜잭션을 유지하는 데 도움이 될 수 있습니다. 이는 데이터 무결성이 중요한 금융 거래와 같은 시나리오에 적합합니다.

동기식 커뮤니케이션은 강력한 도구이지만 어려움도 따릅니다. 좋은 소식은 비동기식 통신 옵션도 있다는 것입니다. 이는 동기식 방법과 함께 작동할 수 있는 보완적인 스타일입니다. 이에 대해서는 다음 섹션에서 더 자세히 살펴보겠습니다.

비동기 통신이란 무엇인가요?

비동기 통신 패턴은 서비스 간 통신을 위한 동적이고 효율적인 방법을 제공합니다. 동기 통신과 달리 비동기 통신을 사용하면 서비스가 즉각적인 응답을 기다리지 않고 요청을 시작할 수 있습니다. 이 모델에서는 응답이 즉각적이지 않거나 별도의 채널(예: 콜백 대기열)에 비동기적으로 도착할 수 있습니다. 이 통신 모델은 AMQP(Advanced Message Queuing Protocol)와 같은 프로토콜과 메시지 브로커 또는 이벤트 브로커를 포함한 메시징 미들웨어에 의존합니다.

이 메시징 미들웨어는 최소한의 비즈니스 로직으로 중개자 역할을 합니다. 소스 또는 생산자 서비스로부터 메시지를 수신하여 원하는 소비자 서비스로 전달합니다. 메시징 미들웨어를 통합하면 이러한 분리된 접근 방식의 탄력성과 내결함성을 크게 향상시킬 수 있습니다. 비동기 통신에는 다양한 구현이 포함됩니다. 이에 대해 더 자세히 살펴보겠습니다.

일대일 통신

일대일 메시지 통신에서는 생성자가 메시지 브로커를 사용하여 메시지를 수신자에게 구체적으로 전달합니다. 일반적으로 메시지 브로커는 안정적인 통신을 보장하고 최소 한 번과 같은 전달 보장을 제공하기 위해 대기열을 사용합니다. 구현은 전달된 메시지가 구독자 서비스에서 작업을 트리거하는 데 사용되는 명령 역할을 하는 명령 패턴과 유사합니다.

사용 방법을 설명하기 위해 온라인 소매점의 예를 살펴보겠습니다. 온라인 비즈니스는 웹사이트의 신뢰성에 크게 좌우됩니다. 이 모델은 내결함성과 메시지 보장을 제공하여 고객이 웹사이트에서 주문하면 백엔드 이행 시스템이 처리할 주문을 받도록 보장합니다. 메시지 브로커는 백엔드 시스템이 종료되더라도 메시지를 보관했다가 처리할 수 있을 때 전달합니다. 예를 들어, 전자 상거래 애플리케이션에서 고객이 주문할 때 메시지 브로커를 사용하여 주문 서비스(생산자)에서 이행 서비스(소비자)에게 주문 세부 정보를 메시지로 보낼 수 있습니다. 이것은 일대일 의사소통의 예입니다.

클라우드에서의 비동기식 일대일 통신

일대일 메시지 모드의 확장은 비동기식 요청-응답 모드입니다. 이 경우 디스패처는 응답을 기대하지 않고 메시지를 보냅니다. 그러나 일부 특정 시나리오에서는 소비자가 프로덕션 서비스에 응답하기 위해 동일한 메시지 브로커 인프라 대기열의 대기열을 활용해야 합니다. 소비자의 응답에는 초기 요청 또는 응답 주소와 관련된 ID와 같은 추가 메타데이터가 포함될 수 있습니다. 생산자는 즉각적인 응답을 기대하지 않으므로 별도의 생산자 워크플로에서 이러한 응답을 관리합니다. 주문이 완료되면 이행 서비스(소비자)가 프런트엔드 주문 서비스(생산자)에 응답하여 고객이 웹사이트에서 업데이트할 수 있도록 합니다.

클라우드에서의 비동기 일대일 요청-응답 통신

두 서비스가 지점 간 통신을 할 때 단일 소비자 통신이 유용합니다. 그러나 게시자가 특정 이벤트를 여러 구독자에게 보내야 하는 상황이 있으며, 이는 다음과 같은 패턴으로 이어집니다.

일대다 통신

이 통신 방법은 단일 구성 요소(게시자)가 여러 구성 요소와 서비스(구독자)에게 이벤트를 방송해야 하는 경우 매우 유용합니다. 일대다 커뮤니케이션은 온라인 포럼과 유사한 주제 개념을 사용합니다.

여러 사용자가 자신의 팔로어가 자신의 시간에 읽고 필요에 따라 응답할 수 있는 기사를 게시할 수 있는 온라인 포럼과 같습니다. 마찬가지로, 애플리케이션에는 생산자 서비스가 쓸 수 있고 소비자 서비스가 읽을 수 있는 주제가 있을 수 있습니다. 실제 응용 프로그램에서 가장 인기 있는 패턴 중 하나입니다.

전자상거래 플랫폼에는 제품 가격을 업데이트하는 서비스가 있으며 여러 서비스(예: 구독 서비스, 추천 서비스 등)에 이 정보가 필요하다는 점을 다시 생각해 보세요. 가격 업데이트는 메시지 브로커의 주제에 메시지로 전송될 수 있습니다. . 관심 있는 모든 서비스(구독자)는 주제를 듣고 가격 업데이트를 받을 수 있습니다. 이는 일대다 통신의 예입니다. 이 패턴을 구현하는 데 사용할 수 있는 여러 도구가 있으며 가장 널리 사용되는 도구로는 Apache Kafka, Redis Pub/Sub, Amazon SNS 및 Azure Event Grid가 있습니다.

클라우드의 비동기 일대다 통신

비동기 통신의 과제

비동기 통신은 많은 이점을 제공하지만 그에 따른 과제도 따릅니다.

복원력 및 내결함성

각각 여러 인스턴스가 있는 수많은 마이크로서비스 및 서버리스 구성 요소를 사용하면 오류가 불가피합니다. 인스턴스가 충돌하거나 압도당하거나 일시적인 오류가 발생할 수 있습니다. 또한 보낸 사람은 메시지가 처리될 때까지 기다리지 않으므로 오류가 발생하면 즉시 이를 인식하지 못할 수도 있습니다. 다음 전략을 채택해야 합니다.

재시도 메커니즘: 일시적 오류에 대해 실패한 네트워크 호출 재시도

회로 차단기 패턴: 리소스 병목 현상을 방지하기 위해 실패한 서비스에 대한 반복 호출 방지

분산 추적

비동기 통신은 여러 서비스에 걸쳐 가능하며, 이로 인해 전체 시스템 성능을 모니터링하는 것이 어려워집니다. 분산 추적을 구현하면 로그와 메트릭을 함께 연결하여 트랜잭션 흐름을 이해하는 데 도움이 됩니다.

복잡한 디버깅 및 모니터링

비동기 통신은 작업이 선형 흐름을 따르지 않기 때문에 디버깅 및 모니터링이 더 어려울 수 있습니다. 이러한 시스템을 효과적으로 디버그하고 모니터링하려면 전문화된 도구와 기술이 필요한 경우가 많습니다.

리소스 관리

비동기 시스템에는 수명이 긴 연결 및 백그라운드 처리가 포함되는 경우가 많으며 이로 인해 리소스 관리 문제가 발생할 수 있습니다. 메모리 누수나 CPU 과다 사용을 방지하려면 리소스를 효율적으로 관리하는 데 주의를 기울여야 합니다.

이러한 과제를 이해하면 클라우드 네이티브 애플리케이션에서 더욱 강력하고 탄력적인 비동기 통신 시스템을 설계하는 데 도움이 될 수 있습니다.

마지막 한마디

동기식 통신 모드와 비동기식 통신 모드 사이의 선택은 이진법이 아니라 애플리케이션의 특정 요구 사항에 따른 전략적 결정입니다.

동기식 통신은 구현하기 쉽고 즉각적인 피드백을 제공하므로 실시간 데이터 액세스, 관련 작업 조정 및 거래 무결성 유지에 적합합니다. 그러나 시간적 결합, 가용성 의존성, 네트워크 품질 영향과 같은 문제에도 직면해 있습니다.

반면, 비동기 통신을 사용하면 서비스가 즉각적인 응답을 기다리지 않고 요청을 시작할 수 있으므로 시스템의 응답성과 확장성이 향상됩니다. 유연성을 제공하며 즉각적인 피드백이 필요하지 않은 시나리오에 이상적입니다. 그러나 복원력, 내결함성, 분산 추적, 디버깅, 모니터링 및 리소스 관리 측면에서 복잡성이 발생합니다.

요약하자면, 클라우드 네이티브 애플리케이션을 위한 강력하고 탄력적인 통신 시스템을 설계하려면 동기 및 비동기 통신 패턴에 대한 깊은 이해가 필요합니다. 각 패턴의 장단점을 신중하게 고려하고 이를 요구 사항에 맞춰 조정함으로써 설계자는 애플리케이션 경계 내외의 독립적인 요소를 효과적으로 조율하여 확장 가능하고 안정적인 고성능 클라우드 네이티브 애플리케이션을 제공하는 시스템을 설계할 수 있습니다.

위 내용은 클라우드 네이티브 애플리케이션에서 동기 및 비동기 통신 디코딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.