GH GambleHub

운영 및 → 관리 서비스 의존성

서비스 종속성

1) 왜 필요한가

모든 생산 플랫폼은 카운트입니다. 사용자 → Edge/API → 도메인 서비스 → 회전/스트림 → DB/caches → 외부 제공 업체 (결제, KYC, 게임 제공 업체). 그래프의 한쪽 가장자리에있는 오류는 종종 네트워크 전체에서 "보행" 됩니다. 지연이 커지고 배상이 트리거되고 대기열이 막히고 계단식 오류가 발생합니다. 의존성 관리는 "폭발 반경" 을 줄이고 릴리스를 예측할 수 있도록합니다.

목표:
  • 통화의 전체 그래프를보고 누가 누구에 의존하는지 이해하십시오.
  • 캐스케이드 고장 및 "폭풍을 예방하십시오".
  • 호환성 및 SLO 프로모션을 기반으로 계획 릴리스.
  • MTTR 올리기: 진정한 근본 원인을 더 빨리 찾으십시오.

2) 종속성의 유형

Synchronous (RPC: REST/gRPC/GraphQL): 대기 시간/가용성에 의한 하드 연결. 타임 아웃, 차단기, 재 트레이 예산이 필요합니다.
비동기 (이벤트/스트림: Kafka/Rabbit/Pulsar): 보다 안정적인 연결성이지만 지연/백 로그 및 전달 의미론이 있습니다 (적어도 한 번, demmpotency).
스토리지 (DB/Cache/Object store): 공유 리소스 → 컨텐츠, 연결 제한/IOPS, 퇴거, 복제.
외부 제공 업체 (PSP/KYC/게임 제공 업체): 할당량, 통화 통화, 서비스 창, 법적 SLA.
운영 (릴리스, phicheflags, 구성): 설정, 비밀, 스키마 레지스트리를 통한 간접 종속성.

3) 서비스 카탈로그 및 종속성 그래프

디렉토리에서 수정한 내용 (백 스테이지/서비스 카탈로그/CMDB):
  • 소유자 (Squad/chat/On-call rota), 리포, 환경, 아티팩트.
  • API 계약 (OpenAPI/AsyncAPI), 버전, 호환성 (뒤/앞으로).
  • 유형 (동기화/async), 중요 성, SLO 기대치가있는 인바운드/아웃 바운드 종속성 (업스트림/다운 스트림).
  • 시간 초과/퇴각 예산, 차단기, 격벽 풀.
  • 할당량 및 외부 통합 한계에 대한 데이터.
미니 예제 카드:
  • '서비스: 결제 아피'
  • 업스트림: '사용자 프로파일' (동기화), '위험 점수' (async).
  • 다운 스트림: 'PSP-X' (동기화, квоте2k RPS), 'ledger' (async).
  • SLO: p99 λ300ms, 99. 가동 시간 9%.
  • 시간 초과: 'PSP-X' 는 200ms, '사용자 프로파일' 은 150ms입니다.
  • Retrai: 지수 지연이있는 2 개, 지터.
  • 브레이커: 5% 오류/10에서 30 대 동안 영업합니다.

4) SLO 선전 및 "대기 예산"

동기 호출 체인을 사용하면 총 SLO가 지연 및 장애 확률의 합으로 구성됩니다.

원칙:
  • 요청 예산은 상단에서 하단으로 나뉩니다. 프론트 엔드 SLO 500 ms → Edge 50 ms API 150 ms → 도메인 서비스 200 ms → 공급자 100 ms.
  • 타임 아웃은 "에서보다 짧습니다": 발신자는 총 내부 타임 아웃보다 타임 아웃이 적어 리소스가 업데이트되고 좀비 통화가 누적되지 않습니다.
  • 보안 코드/예외 및 지터만을위한 Retrai; 병목 현상 시간 초과 (일명 "폭풍") 에 대한 배상은 없습니다.

5) 계약 및 상호 운용성

API 버전 지정: 계약을위한 SemVer; "선택적" 필드, 스키마 확장을 통한 역 호환 변경; 삭제 - "불완전한 기간" 을 통해서만.
소비자 중심 계약 (CDC): CI의 공급자에 대한 소비자 테스트 (Pact와 유사한); 호환되지 않으면 릴리스가 차단됩니다.
등록 스키마 (동기화): 주제/이벤트 버전, 스키마 진화 (Avro/JSON-Schema), 읽을 수있는 오래된/쓸 수있는 새 정책.

6) 엔지니어링 안정성 패턴

시간 초과: 비즈니스 SLA를 기술적 기대치와 분리합니다. 각 나가는 연결은 명시적인 타임 아웃입니다

Retries + backoff + jitter: demmpotence가 주어지면 2-3 회 이하의 시도.
서킷 브레이커: 다운 스트림 분해에서 "빠른 하락"; 반 공개 시험.
벌크 헤드 (풀 격리): 다른 다운 스트림의 경우 별도의 스트림/바닥/연결 풀입니다.
속도 제한/누수 버킷: 최고점에서 다운 스트림을 죽이지 않도록.
이념성 및 중복 제거: 요청/메시지 수준 demempotency 키; 할아버지와 후퇴 대기열.
캐싱 및 폴백: 로컬/분산 캐시, 부실한 상태, 내용 저하.

의사 설정 (아이디어):

outbound:
psp-x:
timeout_ms: 200 retries: 2 retry_on: [5xx, connect_error]
backoff: exponential jitter: true circuit_breaker:
error_rate_threshold: 0. 05 window_s: 10 open_s: 30 pool: dedicated-psp (max_conns: 200)

7) 의존성의 관찰 가능성

분산 추적 (TraceID, 수하물): 링크로 요청 경로를 참조하십시오. '피어 태그를 사용하여 발신 호출에 적용됩니다 서비스 ',' 재 시도 ',' 시간 초과 '.
의존성: 'outbound _ latency _ p99', 'outbound _ oror _ rate', 'Open _ circuit', 'risoted _ count', 'queu _ lag'.

업스트림/다운 스트림 대시 보드:
  • SLO 및 잘못된 에지 컬러 코딩 서비스 맵.
  • 지난주 "Top N 문제 종속성".
  • "폭발 반경" -X의 몰락으로 영향을받는 서비스 목록.
  • 상관 로그: 로그에 'trace _ id '/' span _ id' 가 포함됩니다.

8) 의존성 인식 릴리스 관리

의존성 인식 파이프 라인: 소비자 CDC 테스트가 빨간색 인 경우 공급자의 릴리스가 차단됩니다.
점진적 포함 (phicheflags): 소비자의 1% 에 대한 새로운 필드/엔도 인트 → 10% → 100%.
카나리아 릴리스: 트래픽 비율에 대한 주요 종속성과 "대기 예산" 을 확인합니다.
체계의 호환성: 생산자는 'vNew' 를 쓰고 소비자는 'vOld/vNew' 를 읽습니다. 전환 후 - 오래된 필드의 "가비지 수집".

9) 기둥별 사건 및 에스컬레이션

"진정한 범인": 경고 상관 관계를 정의합니다. 'PSP-X' 가 저하 된 경우 전체 "결제 부시" 를 페이지로 지정하지 않고 통합 소유자입니다.
자동 분해: phicheflag "최소 모드" (무거운 엔드 포인트, 트리밍 된 번들, 중요하지 않은 기능 비활성화).
계단식으로부터 보호: 병렬 처리를 제한하고, 핫 브랜치에서 레트라를 끄고, 차단기를 미리 엽니 다 (사전 개방).

런북 템플릿:
  • 진단: 대시 보드/메트릭, 할당량/제한을 확인하는 방법.
  • 작업: RPS 감소, 백업 공급자로 전환, 일시적으로 캐시 응답 활성화
  • 롤백 및 검증: 반환 매개 변수, 표준이 p95/p99 및 오류율인지 확인하십시오.

10) 의존성 중요 행렬

축을 따라 각 링크를 평가하십시오

커플타입비판 (GGR/SLA)워크 어라운드Quotas/Limits소유자
'api → 지불'동기화높은부분 오프라인 예금2k RPS분대 지불
'결제 → PSP-X'동기화비판적PSP-U/토큰 캐시1. 5k RPS통합
'베팅 → 위험 점수'async평균기본값으로 저하위험
규칙:
  • "중요한" - 이중 프로비저닝, 차단기, 개별 수영장, 혼돈 테스트.
  • "높음" -최소한 열화 및 "녹색 버튼" 의 경우 기능을 끄십시오.
  • "중간/낮음" 의 경우-리트레이 제한 및 대기열 예산.

11) 프로세스: 재고에서 운영까지

1. 그래프 매핑: 디렉토리에서 실제 호출 (추적) + 선언적 종속성을 수집합니다.
2. 할당 된 소유자: 각 서비스 및 외부 통합에 대해-책임있는 통화.
3. 대기 시간/오류, 타임 아웃/리트레이/풀: SLO 및 예산을 정의하십시오.
4. 계약을 공식화하십시오: OpenAPI/AsyncAPI, 스키마 및 CDC.
5. 안정성 패턴 사용: 타임 아웃/재시도/회로/격벽.
6. 대시 보드 및 의존성 당 경고 설정.
7. 출시 게이트 설치: CDC/호환성/카나리아 별 블록.
8. 정규 게임 일: 떨어지는 키 가장자리에 대한 혼돈 실험.
9. 의사 소통에 중점을 둔 사후 부담: 캐스케이드를 강화한 것, 반경을 좁히는 방법.

12) 중독에 대한 경고 (규칙 아이디어)

동기식 다운 스트림:
  • 'outbound _ order _ rate {to = "X"}> 3% FOR 10m' → 경고; '> 5% FOR 5m' → 임계 값.
  • 'outbound _ p99 _ latency {to = "X"}> SLO1. 3은 10m '→ 경고입니다.
회로 차단기:
  • (PHP 3 = 3.0.6, PHP 4)
레트라이:
  • '다시 시도 _ rate {to = "X"}> baseline2 FOR 5m' + 'outbound _ rps> 0' → 폭풍 위험.
동기화:
  • '소비자 _ lag {topic = "Y"} 성장> 10m' + 'hpa at max' → кри달력.
외부 할당량:
  • 'usage _ quop {provider = "PSP-X"}> 90% 창' → 경고, 자동 전환 경로.

13) 반 패턴

"모든 다운 스트림에 대한 하나의 공통 스트림 풀. "합계: 헤드 오브 라인 차단. 나누기 수영장.
타임 아웃 없음/끝없는 복귀. 그래서 폭풍이 태어납니다.
비정형 수술의 맹인 배신. 기록/베팅을 중복하십시오.
연결 지점으로 숨겨진 "공유 DB". 강력한 경쟁과 막힘.
API 버전은 CDC없이 변경되며 계획이 취소됩니다. 대량 폭포를 잡아라.
연결이 아닌 서비스에 의한 관찰 가능성. 체인이 끊어진 곳에서는 보이지 않습니다.

14) 대시 보드: 최소 세트

서비스 맵: 에지 메트릭 (대기 시간/오류/볼륨) 이있는 대화식 서비스 맵.
업스트림/다운 스트림 개요: 서비스 소유자를위한-들어오는 종속성 (전화하는 사람), 발신 (전화하는 사람), "최고의 문제".
의존성 드릴 다운: 링크 특정 카드: p50/p95/p99, 클래스 오류, 개방형 차단기 비율, 배송, 연결 풀, 할당량/비용.
릴리스 컨텍스트: 종속성 그래프에 릴리스/phicheflags의 주석.

15) 구현 점검표

  • 소유자 및 계약이있는 서비스 디렉토리 (OpenAPI/AsyncAPI).
  • 흔적에서 종속성의 전체 그래프 (매일 업데이트).
  • 서비스 및 "대기 예산" 별 SLO
  • 명시 적 타임 아웃, 지터 퇴각, 차단기, 격벽 격리.
  • CDC는 CI에서 릴리스 게이트로 테스트합니다.
  • 의존성 및 서비스 카드 당 대시 보드.
  • 근본 원인에 의한 모서리 억제 + 억제 경고.
  • 게임 일: 공급자/클러스터/주제 삭제 및 저하 점검.
  • 악화 계획: 어떤 기능을 끄고 어떤 기능을 켜는 지.
  • 연결성을 줄이기위한 조치가있는 정기적 인 사후 모템.

16) 의존성 관리 품질 KPI

의존성 MTTR: 중앙 갈비뼈 회수.
Blast Radius Index: 하나가 떨어지면 영향을받는 서비스의 평균 수.
커플 링 점수: 모두의 동기화 종속성 비율; 하락 추세.
CDC 패스 속도: 계약 위반없이 릴리스의%.
폭풍/월 목표를 다시 시작합니다 → 0.
외부 통화 비용: 1k RPS 당 외부 통화 비용 (캐싱/폴백의 영향 참조).

17) 빠른 시작 (기본값)

타임 아웃: 링크 예산의 70-80%; 상위 타임 아웃을 요청하십시오 <내부 합계

Retrai: 백오프 + 지터가있는 demempotent 5xx/네트워크에서만 최대 2.
차단기: 10 초에 5% 오차의 임계 값, 열기 = 30 초, 반 열기 샘플.
벌크 헤드: 다운 스트림 당 전용 풀/연결 제한.
CDC: 모든 공개 API 및 주제에 대한 필수 요소.
선호도 선호: 가능한 경우-이벤트/대기열로 전환 (시간 분리).

18) FAQ

Q: 더 중요한 것은 퇴각 또는 차단기입니까?
A: 둘 다. Retrai는 단기 고장으로부터 보호하고 차단기는 영구적 인 저하와 폭풍으로부터 보호합니다.

Q: 연결이 "너무 취약하다" 는 것을 어떻게 알 수 있습니까?
A: 높은 오류 상관 관계, 낮은 타임 아웃 마진, 빈번한 배상, 폴백/캐시 없음, 동기식 긴 체인.

Q: 통합 테스트가있는 이유는 무엇입니까?
A: CDC는 코드가 생산되기 전에 소비자의 기대치를 포착하고 호환되지 않을 때 공급자의 릴리스를 중단합니다.

Contact

문의하기

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

통합 시작

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

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

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