GH GambleHub

후방 호환성

이전 버전과의 호환성

이전 호환성-시스템이 업데이트 될 때 기존 클라이언트/소비자를 수락하고 올바르게 처리하는 시스템의 속성. 간단하게: 새로운 버전의 서비스/이벤트를 릴리스하고 기존 통합은 계속 변경되지 않습니다.

열쇠: 계약을 위반하지 마십시오. 모든 진화는 이미 발표 된 것을 재건하는 것이 아니라 추가하는 것입니다.

기본 원칙

1. 첨가제 우선

새로운 필드/메소드/이벤트가 선택적으로 추가됩니다 존재하는 것은 제거되지 않으며 의미를 변경하지 않습니다

2. 최소 보증 계약 (MGC)

스크립트의 의미를 잃지 않는 필드/작업 세트 인 커널을 정의하십시오. 핵심은 안정적입니다. 다른 모든 것은 확장입니다.

3. 관용 독자

고객은 알 수없는 필드를 무시하고 새 enum (폴백) 값을 올바르게 처리합니다.

4. 버전 정책

변경 사항 위반-주요 회선 ('/v2 ',' 지불. v2 ',' 이벤트. v2 '). 미성년자-첨가제.

5. 관찰 가능성-계약의 일부

클라이언트 버전, 형식, 기능 플래그는 로그/트랙 및 메트릭으로 표시됩니다. 이를 통해 마이그레이션을 관리 할 수 있습니다.

안전 대 위험한 변화

일반적으로 안전 (BC-OK)

선택한 필드 (JSON/Avro/Proto '옵션 '/' nullable') 를 추가합니다.

새로운 엔드 포인트/메소드/이벤트를 추가하

추가 값이있는 Enum 확장 (내약성 판독기 포함).
검증 약화 (최대화, 대체 형식 추가).
의미없는 헤더/메타 데이터를 추가하십시오.

위험한 (깨기)

필드 삭제/이름 변경, 기존 필드의 유형 또는 필수 변경

상태/오류 코드 의미론 변경.
다른 필드에 프로토 태그를 재사용하십시오.
이벤트 분할 키를 변경합니다 (집계 순서를 나눕니다).
SLA/타임 아웃을 강화하여 오래된 고객이 떨어지기 시작했습니다.

상호 작용 스타일별

REST/SHT + JSON

첨가제: 새로운 필드- '선택', 서버에는 이전 클라이언트의 필드가 필요하지 않습니다.
버전: 전공-운송 중 ('/v2 ') 또는 미디어 유형; 미성년자-확장을 통해 및 '? = '/' 를 포함합니까? fields = '.
오류: 균일 한 형식; 전공없이 코드/의미를 변경하지 마십시오.
ETag/If-Match: 경주없이 안전한 업데이트를 위해.
이념성: POST를위한 'Idempotency-Key' - 오래된 고객은 퇴각에 미치는 영향을 두 배로 늘리지 않습니다.

gRPC/프로토 타입

태그는 변경되지 않습니다. 삭제된 태그를 재사용할 수 없습니다.
새로운 필드- '선택 '/' 반복'; 기본 값은 이전 코드에서 올바르게 처리됩니다.
스트리밍: 미성년자 내에서 메시지의 순서/의무를 변경하지 마십시오.
오류-안정적인 상태 세트; 새로운 의미론 → 새로운 방법/서비스 ('.v2').

이벤트 중심 (Kafka/NATS/Pulsar) + Avro/JSON/Proto

명명: '도메인. 행동. v {major} '.
코어 vs 농축: 코어 안정; 농축 - 개별 유형/테마 ('농축').

스키마 호환성 모드: 더 자주 BACKWARD; CI는 호환되지 않는 변경 사항을 차단합니다

파티셔닝: 키 (예: 'payment _ id') - 계약의 일부; 그것을 바꾸십시오-깨기.

그래프 QL

필드/유형 추가-OK; '@ underled' 및 마이그레이션 창을 통해 삭제/이름을 변경하십시오.
메이저없이 "nullable → nulable" 을 올리지 마십시오.
모니터 복잡성/깊이-한계 변경 = 계약 변경.

BC를 보존하는 데 도움이되는 <> 패턴

역 피라미드 모델: 코어를 안정화하고 선택적으로 확장하십시오.
기능 협상: 클라이언트 보고서 지원 기능 ('X-Capabilities '/handshake), 서버 조정.
이중 실행/이중 방출: 마이그레이션 중에 'v1' 과 'v2' 를 동시에 유지하십시오.
어댑터: 프록시/게이트웨이는 "무거운" 클라이언트에 대한 'v1 ² v2' 요청을 변환합니다.
확장 및 계약 (DB 용): 먼저 새 것을 추가하고 쓰기/읽기 시작한 다음 이전 것을 삭제하십시오.

거버넌스 및 프로세스

1. 계약 카탈로그 (Schema Registry): 호환성 정책이있는 단일 진실 소스.
2. CI/CD의 라이터 및 diff 검사: OpenAPI-diff, Buf-breaking, Avro/JSON Schema 호환성 검사.
3. CDC/소비자 주도 계약: 공급자는 실제 소비자 계약에 대해 테스트됩니다.
4. 황금 샘플: 회귀를위한 참조 쿼리/응답/이벤트.
5. 관리 변경: 속보, 일몰 계획, 커뮤니케이션에 대한 RFC/ADR.

이전 버전의 제거 및 제거

더 이상 사용되지 않는 마크 ('@ 더 이상 사용되지 않음', 설명, 헤더 'Deprencation', 'Sunset').
마이그레이션 창: 사전 발표 된 날짜, 테스트 벤치, 코드 예.
사용 원격 측정: 누가 'v1' 에 있습니까? 버전 별 세그먼트 메트릭/로그.
트래픽이 0으로 이중으로 실행 된 다음 삭제하십시오.

관찰 가능성 및 운영 지표

버전 별 요청/메시지 비율.

릴리스 후 구형 클라이언트의 오류/타임 아웃 공유

호환되지 않는 페이로드의 비율 (게이트웨이/스트림 필터의 체계에 의한 검증).
소비자 마이그레이션 지연 (얼마나 많은 사람들이 'v1' 을 듣는가).

후진 호환성 테스트

Schema-diff: 실패하십시오.рNL이/이름 변경/유형 변경을 제거/변경합니다.
계약 테스트: 기존 SDK/클라이언트는 새로운 구현과 경쟁합니다.
E2E 카나리아: 새 버전으로의 이전 트래픽 중 일부, p95/p99 비교, 코드, 배송.
이벤트 재생: 프로젝션은 불일치없이 이전 로그에서 새로운 논리로 수집됩니다.
결함 주입: 지연/부분 응답-오래된 클라이언트는 떨어지지 않습니다.

REST (첨가제)

그것은:
json
{ "id": "p1", "status": "authorized" }
그것은:
json
{ "id": "p1", "status": "authorized", "risk_score": 0. 12 }

'risk _ score' 를 무시하고 오래된 고객은 계속 작동합니다.

프로토 타입 (태그)

proto message Payment {
string id = 1;
string status = 2;
optional double risk_score = 3 ;//new field, safe
}
//Tags 1 and 2 cannot be changed/deleted without v2

이벤트 (핵심 + 강화)

'지불. 승인 된. v1 '- 커널 (최소 사실).
'지불. 풍부합니다. v1 '- 부품; 핵심 소비자는 농축에 의존하지 않습니다.

안티 패턴

Swagger-wash: 구성표가 업데이트되었지만 서비스는 이전 방식으로 (또는 그 반대로) 동작합니다.
숨겨진 휴식 시간: 버전없이 필드/상태의 의미를 변경했습니다.
원형 태그의 재사용: "조용한" 데이터 손상.
열심히 일하는 고객: 익숙하지 않은 분야/enum에 속합니다. 관용적 인 독자가 없습니다.
메가 엔드 포인트: 올인원-모든 변경 사항이 잠재적 스크랩이됩니다.

시험판 점검표

  • 변화는 추가 적입니다. 핵 (MGC) 은 손대지 않았습니다.
  • Linters/diff 점검이 통과되었습니다. 깨는 깃발이 없습니다.
  • 클라이언트 SDK가 업데이트되었습니다 (또는 추가 확장에 필요하지 않음).
  • 고객을위한 내성 독자 활성화; 에넘 폴록이 확인되었습니다.
  • 메트릭/로그에는 버전 및 기능 플래그가 포함되어 있습니다.
  • 잠재적 인 파손의 경우 '/v2 ', 이중 실행 및 일몰 계획이 있습니다.
  • 문서/예제가 업데이트되었으며 황금 세트가 있습니다.

FAQ

앞뒤로-차이점은 무엇입니까?
뒤로-새로운 서버는 이전 클라이언트와 협력합니다. 앞으로-새로운 클라이언트는 기존 서버에서 올바르게 작동합니다 (허용 가능한 리더 및 깔끔한 기본 전체 원-전체 호환성.

큰 변화를 위해 항상 '/v2 '를해야합니까?
예, 불변/유형/키/의미가 깨지면. 그렇지 않으면 선을 유지하고 추가 적으로 진화하십시오.

에넘은 어떻습니까?
이전 값의 의미를 변경하지 않고 새 값을 추가하십시오. 고객은 알 수없는 값으로 대체해야합니다.

이미 "파손" 했다면 어떨까요?
이중 실행, 통신 및 마이그레이션 가이드가 포함 된 롤백, 핫 픽스 어댑터, 'v2' 릴리스.

합계

뒤로 호환성은 진화의 원칙입니다. 커널을 안정화시키고, 추가 적으로 확장하고, 허용 가능한 리더를 구현하고, 자동화 된 점검을 자동화하고, 의식적인 비난을 유지하십시오. 이렇게하면 고객이 "보이지 않는" 변화의 잔해에 빠지지 않고 플랫폼을 빠르게 개발할 수 있습니다.

Contact

문의하기

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

통합 시작

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

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

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