GH GambleHub

트랜잭션 메시징

거래 메시징은 로컬 상태 변경 (데이터베이스/캐시) 과 브로커/버스의 메시지 간의 일관성을 보장하는 일련의 아키텍처 기술입니다. 목적: 실패, 배상, 스케일링 및 다중 임차의 경우 "상태가 고정되어 있거나 복제되지 않습니다".

1) 배달 의미론

최대 한 번: 빠르고 저렴하며 손실이 가능하며 테이크가 없습니다.
적어도 한 번: 메시지를 잃지 않으면 중복이 가능합니다 → demempotency가 필요합니다.
(유효) 정확한 한 번: 기술 (아웃 박스/받은 편지함, 생산자/소비자 거래, dedup) 의 조합으로 달성 된 비즈니스 효과에 대한 손실 및 눈에 띄는 테이크가 없습니다.

2) "두 글자" 가 위험한 이유

순진한 논리는 "먼저 데이터베이스에 쓰고 나서 버스로 보내십시오" (또는 그 반대로) 단계 사이에 떨어지면 중단됩니다. 데이터가 수정되고 이벤트가 손실됩니다. 이벤트는 사라졌지 만 데이터는 없습니다. 거래 메시징은이 격차를 해소합니다.

3) 기본 패턴

3. 1 송신기 (제조업체)

한 지역 거래에서 비즈니스 변경 사항과 행을 '아웃 박스' 테이블에 씁니다. 별도의 게시자가 Outbox를 읽고 retras 및 backoff가있는 브로커에 게시합니다. 손실은 제외되었다; 소비자들 사이에서 demmpotency에 의해 복식이 소멸됩

3. 받은 편지함/Idempotent 소비자 2 명

효과를 실행하기 전에 소비자는 '받은 편지함 (소비자, 이벤트 _ id)' 에서 'INSERT' 를 기본 키로 만듭니다. 키 충돌 = 이미 처리 된 이벤트 → 건너 뛰기. 이것이 "효과적으로 정확히 한 번" 달성되는 방법입니다.

3. 3 오프셋 거래가 포함 된 읽기 프로세스 쓰기

로그 지향 버스 템플릿: 소비자는 배치를 읽고 동일한 거래에서 비즈니스 변경 및 "통과 된 오프셋" 을 기록합니다. "커밋 후 브로커는 소비 된 메시지를 고려합니다. 이것은 효과에 중복없이 "읽기 → 낙하 → 반복" 을 제거합니다.

3. 서비스 간 효과를위한 4 TSS/Sagas

일관된 다단계 프로세스가 필요한 경우 TCC 또는 사가를 사용하십시오. 단계 및 보상 수준에서 메시지 (명령/이벤트 전송 및 트랜잭션).

4) Idempotent 생산자 및 소비자

프로듀서: 안정적인 'messation _ id '/' idempotency _ key', 동일한 키로 재 지정하면 가입자에게 새로운 효과가 발생하지 않습니다. 키별로 순서를 유지합니다.
소비자: '받은 편지함' + 비즈니스 dempotency (upsert/merge, 최신 버전/개정 확인).

5) 질서와 인과 관계

한 객체의 이벤트가 순서대로 도착하도록 비즈니스 키 (예: '집계 _ id', '테넌트 _ id') 로 참여하십시오.
로트 내부에 연속 번호/타임 스탬프를 유지하십시오. DLQ에서 다시 그릴 때 "키로 순차적으로" 관찰하십시오.
글로벌 오더가 중요하지 않은 경우 키별로 로컬 오더를 보장하고 도메인 불변량을 수정하십시오.

6) 오프셋 및 수정 효과

옵션 A: "DB의 오프셋"

도메인 데이터를 변경하는 동일한 트랜잭션에 "마지막으로 처리 된 오프셋 (파티션, 오프셋)" 을 작성하십시오. 다시 시작할 때 반복되는 효과를 피하면서 다음 오프셋에서 계속하십시오.

옵션 B: 중개인 거래

일부 중개인은 한 생산자/소비자 거래에서 메시지 및 오프셋의 원자 기록을 지원합니다. 가능한 경우 사용하지만 항상 소비자에 대한 demotency로 보충하십시오.

7) Retrai, 백오프, DLQ

지수 백오프 및 지터를 사용하여 복구 가능한 오류 (타임 아웃, 5xx) 만 반복하십시오.
복구 불가능 (스키마/유효성) -메타 데이터 (테넌트, 키, 오프셋, 이유) 가있는 DLQ에서 즉시 사용하십시오.
DLQ (배치, 속도 제한) 에서 리드레이브를 사용하고 반복하기 전에 회로를 확인하고 키별로 순서를 관찰하십시오.

8) 다중 임대 및 지역

메시지 메타 데이터 및 파티션 키에 '테넌트 _ id', '플랜', '영역' 을 포함하십시오.
임차인의 공정성: "잡음" 클라이언트가 나머지 예산을 공제하지 않도록 게시/처리를 제한합니다.
거주지: 도메인 데이터와 동일한 영역에 메시지 및 아웃 박스를 저장합니다. 지역 간 복제 - 비동기 집계.

9) 관찰 및 감사

추적: 상관 관계 '이벤트 _ id '/' 집계 _ id '/' saga _ id' 는 "읽기 → 프로세스 → 쓰기/커밋" 에 걸쳐 있습니다.
메트릭: 게시/처리 지연 (p95/p99), 성공률, DLQ 속도, 재구성 성공, "복제 억제".
통나무: 성공의 약자; 오류 (이유, 시도, 키, 오프셋) 에 대한 세부 정보.
감사: 누가 다시 그리거나 롤백했는지, 어떤 배치와 결과를 얻었습니다.

10) 안전 및 준수

페이로드에서 PII를 최소화하십시오. DLQ/로그로 전송 할 때 마스크.
외부 버스의 서명/암호화 메시지; 서비스간에 mTLS를 사용합니다.
세입자/지역당 유효 기간 및 "잊을 권리" 를 관리하십시오.

11) 전형적인 통합 체계

1. 서비스 소스 (쓰기 측)

로컬 트랜잭션: 도메인 레코드 + 아웃 박스.
출판사: 배치, 'SKIP LOCKED', 백오프, 세입자 당 한계.
지연 모니터링 '현재-발생 _ at'.

2. 서비스 소비자 (읽기 측)

배치 → 'INSERT받은 편지함 (소비자, 이벤트 _ id)' 을 시도하면 성공하면 효과를 실행합니다.
동일한 거래에서 "통과 된 오프셋" (옵션 A) 을 수정하거나 중개인의 거래 (옵션 B) 에 의존합니다.
오류: 정책별로 다시 트레이 또는 DLQ.

3. 투사/재료 화보기

demempotent 업데이트 (upsert), 컴팩트 한 중복 키, 주기적 체크섬 검증 만 가능합니다.

12) 설정 템플릿 (예)

yaml producer:
idempotency_key: event_id partition_key: "{tenant_id}:{aggregate_id}"
retry:
max_attempts: 8 initial_ms: 200 max_ms: 8000 strategy: exponential_full_jitter

consumer:
batch: 500 offset_commit: "with_domain_tx"  # или "broker_tx"
inbox_enabled: true concurrency_per_partition: 4 dlq:
enabled: true batch_redrive: 200 rate_limit_per_sec: 50 order_by_key: true

observability:
metrics:
- processing_lag_ms
- publish_success_ratio
- dlq_rate
- redrive_success_ratio tracing_tags: [event_id, tenant_id, aggregate_id, partition, offset]

13) 사전 판매 점검표

  • "두 글자" 제거: 생산자의 아웃 박스 또는 소비자의 한 거래에서 오프셋 및 효과를 수정합니다.
  • Idempotent 소비자: '받은 편지함 '/dedup 저널, 비즈니스 demempotency 운영.
  • 비즈니스 키로 분할하면 로컬 주문이 따릅니다.
  • 백오프 + 지터 복귀, 오류 분류, 메타 데이터가 풍부한 DLQ.
  • 복용하고 안전합니다. 플레이 북이 있습니다.
  • 다중 임차인 제한 및 우선 순위; '테넌트 _ id/플랜/지역' 태그.
  • 원격 측정: 지연, 성공률, "복제 억제", p95/p99로 경고.
  • PII/보존/암호화 정책이 시행됩니다.
  • 테스트: 단계, 중복, 키 순서, 질량 재 그리기 사이를 떨어 뜨립니다.

14) 전형적인 오류

아웃 박스/오프셋 트랜잭션없이 버스로 전송하고 별도의 단계로 데이터베이스에 기록하십시오.

dempotency → 부작용이없는 소비자는 부작용을 복제합니다

"올 수있는 것" 이라는 세계적 질서는 비싸고 거의 정당화되지 않습니다 키별로 충분합니다.
제한없이 대규모 재 추첨 → 2 차 사건.
추적/지연 지표 부족 → "숨겨진 저하".
DLQ/로그에서의 PII 혼합.

15) 빠른 레시피

SaaS 이벤트: '테넌트 _ id: colligate _ id' 로 분할하여 전송 대 + idempotent 소비자 (받은 편지함).
ETL/프로젝션: 한 번의 거래에서 오프셋을 수정 한 읽기 프로세스 쓰기는 500-1000을 기록합니다.
높은로드: 출판 샤딩, 'SKIP LOCKED', 임차인 당 WFQ, 지연 제어.
엄격한 준수 영역: 지역 아웃 박스, 페이로드 암호화, 리드라이브 유지 및 감사.

결론

거래 메시징은 데이터와 메시지를 연결하는 분야입니다. 아웃 박스/받은 편지함, demempotency, 효과와 함께 고정을 상쇄하고 DLQ와 함께 관리하는 배상을 결합하면 글로벌 잠금 장치없이 정확하게 한 번에 한 번 동작을 얻을 수 있으며 충돌, 피크 및 복잡한 멀티 테넌트 악용에도 불구하고 SLO를 유지합니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.