>  기사  >  시스템 튜토리얼  >  안정적인 메시징 서비스 구현 살펴보기

안정적인 메시징 서비스 구현 살펴보기

WBOY
WBOY앞으로
2024-01-09 19:49:521129검색
소개 분산 트랜잭션은 종종 서비스 지향의 문제점입니다. 많은 시나리오에서는 비즈니스를 통해 분산 트랜잭션을 피하지만 여전히 분산 트랜잭션에 의존해야 하는 몇 가지 시나리오가 있습니다
하나의 공통 솔루션

분산 트랜잭션 문제를 해결하는 방법은 다양하며, 다양한 솔루션을 제공하는 인터넷 블로그도 많습니다. 정리하면 일반적으로 다음 두 가지 방법으로 나눌 수 있습니다. 1. 2단계 커밋(줄여서 2PC): 일반적인 분산 트랜잭션 솔루션입니다. 이 방법에서 코디네이터 노드는 참가자 노드의 작업을 조정하고 커밋 또는 롤백 시 모든 노드가 합의에 도달하도록 하는 역할을 담당합니다.

엄격한 분산 트랜잭션과 2단계 커밋은 강력한 일관성을 달성하기 위한 메커니즘입니다. 엄격한 분산 트랜잭션은 원자성을 보장해야 하는 분산 시스템의 여러 참가자 노드가 수행하는 일련의 작업, 즉 모두 성공하거나 모두 실패하는 것을 의미합니다. 이 메커니즘은 모든 참가자 노드가 트랜잭션 실행 중에 동일한 프로토콜을 따르고 코디네이터 노드의 안내를 통해 트랜잭션을 구현하도록 요구합니다

유연한 분산 트랜잭션은 분산 시스템에서 트랜잭션을 처리하는 방법입니다. 최선의 커밋 전략을 채택합니다. 즉, 트랜잭션 제출을 완료하기 위해 최선을 다하지만 일부 작업이 실패할 수도 있습니다. 유연한 분산 트랜잭션에서는 일반적으로 TCC(Try-Confirm-Cancel) 모드를 사용하여 트랜잭션 관리를 구현합니다. TCC 모델은 거래를 시도, 확인, 취소의 세 단계로 분해합니다.

먼저 분산 트랜잭션에 대한 전제 조건 보장을 해결하십시오. 메시지의 반복 전송이 비즈니스에 영향을 미치지 않도록 인터페이스는 멱등원이어야 합니다

2 신뢰할 수 있는 메시징 시스템 디자인(느낌이 좋고 비교적 간단하므로 공유하겠습니다)

안정적인 메시징 서비스 구현 살펴보기위와 같이

실행 시작 예:

시도해 보세요{
if(prepare()) { //사전 전송 단계 doService(); //비즈니스 로직 실행
updateMsgStatus();//상태 확인을 위한 메시지 업데이트
}
}

1 메시지를 사전 전송하고 단계를 시도해 보세요. 사전 전송 메시지가 실패하면 아직 비즈니스가 실행되지 않은 것이므로 시스템 A와 B는 여전히 일관성이 있으며 처리가 필요하지 않습니다

이해하기 쉽습니다

2 미리 보낸 메시지가 성공하고 비즈니스 로직이 실행되기 시작합니다. 실행이 성공하면 업데이트된 미리 전송된 메시지의 상태가 전송 확인으로 변경됩니다. 이때 비즈니스 로직 실행이 실패하면 현재 전송된 메시지는 새로운 상태로 업데이트되지 않습니다. 이때 메시지 확인 시스템이 작동을 시작하고 비즈니스 시스템 1로 돌아가서 메시지 상태를 확인합니다. 업무 수행에 실패한 것으로 확인되면 사전 전송 상태를 실패 상태로 업데이트합니다.

3 이때 비즈니스 실행이 성공적으로 이루어지고 전송 확인 메시지가 업데이트되면 정상이며 완벽한 것입니다. 메시지 업데이트가 실패하더라도 메시지 확인 시스템은 계속해서 상태를 확인하고 메시지가 삭제되었는지 또는 전송이 확인되었는지 업데이트합니다.

4명의 메시지 발송자가 소비를 시작합니다

1> 예를 들어 소비가 실패하고 불일치가 발생하면 메시지 복구 시스템에서 메시지 상태를 감지하고 메시지를 다시 보냅니다

2>업무 실행이 실패하면 메시지가 확인되지 않습니다. 메시지 복구 시스템은 메시지 상태를 감지하여 메시지를 다시 보냅니다

3> 요청이 실패하면 위의 논리를 사용하여 이의신청을 다시 보내야 합니다. 물론, 최대 횟수를 초과하면 항상 보낼 수는 없습니다.

배달 못한 편지 대기열에 들어가서 수동 개입을 기다립니다.

4> 요청이 성공하면 메시지가 성공적으로 소비됩니다. 이는 완벽하며 안정적인 메시지 서비스 문제를 해결합니다

셋, 열심히 제출하세요

실시간 성능이 약한 일부 시나리오에서 성공적인 메시지 푸시를 보장하기 위해 실패한 메시지가 반복적으로 제출되는 것은 비교적 간단합니다.

예를 들어 거래가 완료되면 제3자 메시지를 푸시하세요. 이때 하드 제출을 사용할 수 있습니다

이 기사는 오픈 소스 중국 커뮤니티 [http://www.oschina.net]에서 재인쇄되었습니다.

위 내용은 안정적인 메시징 서비스 구현 살펴보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제