API를 통한 데이터 동기화
1) 동기화가 필요한 이유와 목표는 무엇입니까
도메인 일관성: 프로필, 지갑, 디렉토리, 한계, KYC.
지연 시간 단축: 중요한 프로세스 (지불, 보너스) 에 대한 거의 실시간.
탄력성: 이벤트 손실없이 네트워크/공급자 중단 경험.
경제학: 델타 및 패키지 화를 통해 출구/CPU를 최소화하십시오.
성공 지표: 소스와 소비자 사이의 지연, 신선도, 중복 비율, 충돌 비율, GB/hour of blue.
2) 동기화 모델
2. 1 풀 (폴링)
클라이언트는 간격을두고 변경을 요청합니
장점: 단순성, 부하 제어.
단점: 지연, "빈" 여론 조사, 높은 변화율로 건너 뛸 위험.
개선 사항: If-Modied-Super, Etag/If-None-Match는 _ tock을 변경합니다.
2. 2 푸시 (웹 후크/이벤트)
출처는 이벤트를 수신자에게 보내줍니다.
장점: 거의 실시간의 여론 조사 경제.
단점: 배송, 중복 제거, 보안 (서명, mSL) 이 포함 된 배송이 필요합니다.
요구 사항: 엄청난 소비자, 지수 백오프, 재생.
2. 3 CDC/스트리밍 (데이터 캡처 변경)
트랜잭션 로그/이벤트 로그 (Kafka, Debezium) 에서 변경 사항을 스냅 샷.
장점: 완전성, 순서, 규모.
단점: 복잡성, 작업 유형 (삽입/업데이트/삭제/묘비) 을 제어해야합니다.
2. 4 하이브리드
웹 후크는 "트리거", 폴백 및 조정을 위해 폴링됩니다.
3) 증분 델타
3. 1 워터 마크 (타임 스탬프)
클라이언트는 'last _ seen _ ts' 를 저장하고 '업데이트 된 _ at> 워터 마크' 를 요청합니다.
위험: 시간 드리프트-UTC 및 NTP 사용; 1-2 분 동안 겹치는 창을 가져 와서 ID + 버전으로 디드 업하십시오.
3. 2 토큰/커서 변경
안정적인 시퀀스 토큰: '? 커서 = eyJvZmZzXQiOjEwMDB9 '.
장점: 순서를 변경하기위한 복원력, 규모.
요구 사항: 고갈되지 않은 커서, TTL 및 안전한 재생.
3. 3 번호가 매겨진 오프셋 (자동 증가)
'id> last _ id'. 간단하지만 시퀀스에서 샤딩하고 "구멍" 할 때 분해됩니다.
4) 큰 샘플 페이지 매김
키셋/커서 (선호): '? = 커서 및 한계 = 1000 '-변경시 안정적입니다.
오프셋/제한-간단하지만 비싸며 변경 될 수 있습니다.
항상 안정적인 정렬 키 (예: '(업데이트 된 _ at, id)') 를 지정합니다.
json
{
"items": [ { "id": "u_1", "updated_at": "2025-11-03T16:59:10Z" } ],
"next_cursor": "eyJ1cGRhdGVkX2F0IjoiMjAyNS0xMS0wM1QxNjo1OToxMFoifQ==",
"has_more": true
}
5) 의미론 변경: upsert, 병합, 삭제
5. 1 업저트/합병
'PUT/resource/{ id}' 는 완전한 대체품입니다.
'PATCH/resource/{ id}' - 부분 업데이트 (패치와 유효성 검사).
모든 글에 대한 'Idempotency-Key' 의 이념성.
5. 2 삭제
소프트 삭제 (필드 '삭제 = 참', '삭제 _ at') - 기록 저장; 싱크대는 묘비를 준다.
하드 삭제-사라지기 전에 이벤트 '삭제' 를 제공합니다.
json
{ "id":"u_1", "event":"deleted", "deleted_at":"2025-11-03T17:00:00Z" }
6) 버전 제어 및 경쟁
6. ETag/If-Match 1 개 (낙관적 잠금 장치)
반품 'ETag: "v123"' 을 읽으십시오.
'If-Match: "v123" 에서 업데이트-" 잃어버린 업데이트 "에 대한 보호.
충돌의 경우-409 '오류 _ 코드와의 충돌: "CONFLICT _ VERSION"'.
6. 2 기록 수정
필드 '버전 '/' 업데이트 된 _ at' -델타 계산 및 중복 제거.
6. 3 충돌
정책: 마지막 쓰기, 서버 승리, 필드 별 병합 전략 (예: 합계 → 첨가제, 플래그 → 소스 우선 순위).
7) 주문 및 중복 제거
7. 1 배송 절차
보장: 적어도 한 번은 + demmpotency → 사실상 표준.
중요한 현금 흐름의 경우-demempotency 상점을 통한 정확히 한 번의 효과.
7. 2 개의 이데올로기 키
도메인 필드의 구성: 'source _ id' 이벤트 _ 유형 '시퀀스'.
저장 TTL 24-72 시간 (또는 SLA 이상).
7. 3 중복 제거
수신기에 적용된 마지막 버전/seq를 저장하십시오. 오래된 것을 떨어 뜨립니다.
8) 반복, 타임 아웃, 백오프
검색 가능: 5xx/429/408/타임 아웃; 검색 불가: 400/401/403/404/409/422/410/412.
지수 백오프 + 지터: 1, 2, 4... 30-60 년대까지.
429/503에 대한 재시도 후 존중.
클라이언트 타임 아웃: 연결 3-5, 일반 요청 10-30; 시도의 총 한계 3-6.
9) Lags and SLA 컨트롤
9. SLI/SLO 1 개
SLI Lag: 'arsed _ at' 와 '소비에 적용되는' 사이의 중간/p95 지연.
SLO: 예를 들어, 'p95 지연 60s (28d)', "잃어버린 이벤트의 공유 = 0", "중복의 공유 0입니다. 01%».
오류 예산: 릴리스/실험에 사용하십시오.
9. 2 메트릭
'sync _ lag _ secons', 'events _ resened _ total', 'ements _ apped _ total', 'complete _ total', 'retries _ total', 'backlog _ size', 'curder _ pression _ rate'.
10) 화해 및 백필
주간/시간 조정: 총계/창 해시.
조정 API: 'GET/조정? =... & to =... '체크섬 및 분산을 반환합니다.
백필: DDOS 소스없이 커서가있는 배치로 히스토리 데이터를 안전하게 다시로드합니다. 한계를 관찰하십시오.
11) 계획과 예
11. 웹 후크 이벤트 1 개 (서명)
json
{
"event": "user. updated",
"id": "evt_01HX",
"occurred_at": "2025-11-03T18:00:05Z",
"sequence": 123456,
"data": { "id": "u_1", "email": "a@b. com", "updated_at": "2025-11-03T18:00:02Z" }
}
제목:
- 'X- 시그니처: sha256 =
' - 'X-Event-ID: evt _ 01HX'
- 'X- 재시도: 0.. N'
11. 2 증분 샘플링 (폴링)
'GET/v1/사용자? 업데이트 된 _ after = 2025-11-03T17: 58: 00Z & curder =... & limited = 1000 '
11. 3 Idempotent upsert
POST /v1/users
Idempotency-Key: upsert-u_1-20251103T1800Z
{ "id":"u_1","email":"a@b. com","version":124 }
→ 201/200 (stable)
12) 안전 및 준수
Auth: OAuth2 scopes/JWT; 링크 채널-주문형 mTLS.
캡션: 웹 후크를위한 HMAC 헤드 라인, 회전 비밀.
로그에 마스킹하는 PII 최소화; GDPR/DSAR 업로드/삭제.
RBAC/ABAC: 세입자/조직 액세스, 엄격한 할당량.
13) 관찰 가능성 및 로그
확인: 'env', 'service', 'tentin', 'source', 'curder', 'seq', 'event _ style'.
상관 관계: 입력 → 의 'trace _ id' 는 로그 및 추적에 적용됩니다.
대시 보드: 지연, 백 로그, 커서 속도, 유형 오류, 429/5xx, 비용 (출력/분).
14) FinOps: 동기화 비용
배치 (배치 크기 100-1000) + 압축 (ggip/ml).
변경되지 않은 페이지에 대한 캐싱 및 ETag.
얇은 페이로드: 필드 만 변경되었으며 주문형 전체 리소스에 대한 링크입니다.
백필에 대한 동시성 제한 및 "야간 창".
15) 테스트 및 품질
15. 1 개의 계약 및 부정적인 경우
JSON 체계, 필요한 필드, 안정성 '오류 _ 코드' 를 확인하십시오.
테스트: 고장, 중복, 건너 뛰기 이벤트, 버전 충돌, 429/5xx.
15. 카오스/게임 2 개
주사: 네트워크 지연, 이벤트의 10-30% 감소, 재주문.
기준: 순서/무결성 유지? 손실이 없습니까? SLO 내에서 지연?
16) 구현 점검표
- 선택된 모델 (푸시/풀/하이브리드) 및 진실의 원천.
- 증분 델타: 워터 마크 또는 커서/토큰.
- Pagination: 안정적인 등급의 커서/키셋.
- Idempotency-store, 키 및 TTL; '(id, 버전/seq)' 로 정리하십시오.
- ETag/If-Match 및 충돌 정책 (LWW/서버 승리/병합).
- 시작/백오프/지터, '시작 후' 를 존중하십시오.
- 메트릭스 지연/백 로그/복제/충돌, 대시 보드 및 경고.
- 조정 API + 일일 조정.
- 보안: OAuth2/JWT, 웹 후크 서명, mSL, PII 정책.
- FinOps: 배치 + 압축, 동시성 한계, 출구 할당량.
- 테스트 제품군: 재주문, 중복, 정전, 백필.
17) 구현 계획 (3 회 반복)
1. MVP (1-2 주):
커서 페이지 매김, 워터 마크 델타, demempotent upsert, 기본 지연/백 로그, 재 시도 + 백오프 메트릭.
2. 규모 (2-3 주):
웹 후크는 트리거 + 폴링 폴백, HMAC 서명, 조정, ETag/If-Match, 대시 보드 및 지연에 의한 화상 경보로 사용됩니다.
3. 프로 (3-4 주):
핫 도메인, 자동 백필, DR 스크립트, FinOps 최적화 (배치/브로 틀리), 지연 및보고를위한 SLA 용 CDC/스트리밍 (Kafka/Debezium).
18) 미니 -FAQ
선택할 수있는 것: 워터 마크 또는 커서?
커서/키셋은 재정렬 및 스케일에 더 강합니다. 워터 마크는 시작하기가 더 쉽지만 중복과 데드 업을 추가합니다.
정확히 한 번만 필요합니까?
일반적으로 비싸다. 연습-적어도 한 번은 + demempotency; 정확히 한 번만-화폐 효과에만 해당됩니다.
갈등을 최소화하는 방법?
필드별로 병합 된 ETag/If-Match를 사용하고 "숨겨진" 부작용을 피하십시오.
합계
신뢰할 수있는 동기화는 관찰 성, 반짝임 및 경제적 인 전송에 의해 향상된 증분 델타 + 올바른 페이지 매김 + demempotency 및 버전 제어입니다. 올바른 모델 (푸시/풀/CDC) 을 선택하고 지연에 SLO를 고정하고 충돌 정책과 더러운 시나리오 테스트를 구현하면 데이터 교환이 예측 가능하고 지속 가능하며 비용 효율적이됩니다.