마이크로 세르 비체 아키
1) iGaming에서 microservices 인 이유
변경 속도: 팀 기능 (지불, 내용, 위험, 토너먼트) 의 독립적 인 릴리스.
신뢰성: 한 서비스의 실패로 인해 전체 제품 (실패 제한) 이 중단되지는 않습니다.
스케일: "핫" 도메인의 수평 스케일 (지갑, 로비, 스트림).
준수: 지역/관할권별로 데이터 분리.
가치가없는 경우: 소규모 팀/볼륨, DevOps 관행, 약한 테스트 자동화-모듈 식 모놀리스가 더 좋습니다.
2) 도메인, 테두리 및 팀 (DDD + 팀 토폴로지)
도메인 윤곽: 계정/프로필, CCM/준수, 지불/지갑, 게임 내용/집계, 보너스/미션, 토너먼트, 마케팅/CRM, 보고/BI.
경계 상황 = 데이터 모델 및 언어 계약.
흐름 변경 명령: 하나의 명령 = 하나의 루프 + SLO.
BFF (프론트 엔드 백엔드): 클라이언트에서 "오케스트레이션" 을 수집하지 않도록 웹/모바일/파트너를위한 별도의 외관.
3) 통신: 동기 대 비동기
동기식 (REST/gRPC): 즉각적인 응답이 필요한 경우 (예금 제한 확인).
Asynchron (Kafka/NATS/SQS): 이벤트 및 배경 프로세스 (캐쉬백 발생, 우편 발송, 등급 업데이트).
- 중요 경로 = 최소 네트워크 홉.
- 이벤트 및 계약 API를 통한 도메인 간 통합.
- 온라인으로 "5 + 동기 통화 체인" 을 구축하지 마십시오 → EDA/sagas를 사용하십시오.
4) 계약 및 버전 지정
계약 1: OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema).
SemVer + 호환성: 필드를 추가해도 클라이언트가 중단되지 않습
소비자 중심 계약 (CDC): CI의 자동 점검 (vs. 회귀).
거부 정책: 지원 창 (12-18 개월), 이전 버전의 원격 측정.
5) 이벤트, 사가 및 일관성
전송/거래 로그 테일링: 원자 레코드 "데이터 + 이벤트".
사가 패턴:- 지불/출력을위한 오케스트레이션 (중앙 코디네이터).
- 보너스/미션에 대한 안무 (이벤트에 대한 반응).
- 이데올로기: 'entityID + action + nonce' 의 키, dedup 레지스트리 스토리지.
- 일관성: "외부" -이벤트를 통한; "내부" -서비스 내 거래.
6) 데이터 및 스토리지
"자체 상점" 의 원칙: 각 서비스는 자체 데이터베이스 (체계 격리) 를 소유합니다.
액세스 패턴별 스토리지 선택:- 트랜잭션/밸런스는 엄격한 불변량을 가진 관계형 (PostgreSQL) 입니다.
- 이벤트/로그-추가 전용 (Kafka/Redpanda).
- 캐시/세션 - Redis/KeyDB; 리더 보드-Redis 정렬 세트.
- 검색-OpenSearch/Elastic.
- CQRS (Materialized Read Projections) -빠른 목록/보고서.
7) 신뢰성과 안정성
dempotent 작업에 대해서만 지터/재시도 예산으로 타임 아웃/재시도.
서비스 간 회로 차단기/Outlier 배출.
벌크 헤드: "잡음" 업스트림을위한 별도의 수영장.
클라이언트/경로 당 속도 제한, 역압 (503 + 재시도 후).
대기열에서 데드 레터 + 독 메시지 처리.
8) 관찰 가능성
추적: OpenTelemetry (shlyuz → servisy → BD를 통한 'trace _ id').
메트릭: RPS, p50/p95/p99, 오류율 4xx/5xx, 채도 (CPU/mem/큐), 비즈니스 메트릭 (TTP, TtW).
로그: 구조화 된 JSON, PII/PAN/IBAN 마스킹, 'trace _ id' 의 상관 관계.
SLO/경고: 경로/기능 (예: '예금 p95 5%`).
9) 안전 및 준수
제로 트러스트: mSL 서비스 서비스 (SPIFFE/SPIRE), 단기 인증서.
AuthN/Z: OAuth2/JWT (aud/scope/exp), 역할의 속성 차별화.
비밀: KMS/비밀 관리자/밀봉 된 비밀, 키 로테이션.
GDPR/데이터 현지화: 지역 클러스터, API 게이트웨이의 지오 펜싱.
감사: 불변의 로그 (WORM), 관리자 동작 추적.
10) 배포 및 릴리스
컨테이너/K8: 하나의 서비스 = 하나의 배포; 자원/제한; PodDisruptionBudget.
CI/CD: 라인터, 단위/계약/인테그 테스트, 보안 스캔, SBOM.
릴리스: 카나리아/청록색/그림자, 확장 및 계약을 통한 계획 마이그레이션.
Autoscale: CPU + RPS + p95 + 큐 깊이에 의한 HPA; 붕괴시 배수.
11) 성능 및 비용
프로파일 링: p95/99 "서비스 및 방법별" 화염 그래프.
캐싱: 읽기/쓰기; 이벤트 별 TTL/장애.
데이터 지역: 핫 데이터를 계산에 가깝게 유지하십시오.
FinOps: 다운로드 대상 60-70%, "따뜻한 수영장", 비활성 근로자의 자동 정지.
12) 도메인 템플릿 (iGaming)
12. 지불/지갑 1 개
서비스: 'payment-gw' (외관), 'wallet', 'psp-adapters-', '사기 확인'.
스트림: 'init → 예약 → 캡처/롤백' (saga).
확인: 'PaymentInitiated', 'PaymentAuthorized', 'PaymentSettled/Failed'.
이념성: 'Idempotency-Key', '지갑' 의 데드 업.
12. 2 CCM/준수
лервис달력: 'kyc-flow', 'doc-storage', 'justice-secking', 'pep-screening'.
확인: 'KycSubmitted/Approved/Rejected', 'RiskScoreUped'.
감사 및 ETA: 작업 대기열, 타임 라인 케이스, 사후 작업.
12. 3 보너스/미션
서비스: '보너스 엔진', '지갑 보너스', '자격'.
안무: 'BetPlaced → BonusEngine → BonusGranted → WalletCredited'.
남용으로부터 보호: 보조금, 제한, 규칙 시뮬레이터.
12. 4 개의 토너먼트/리더 보드
서비스: '토너먼트 -svc', '스코어링', '리더 보드'.
스토리지: OLAP의 Redis ZSET + 주기적 "플러시".
확인: '스코어 업데이트', '토너먼트 마감', '보상'.
13) 계약 + 이벤트 예 (간체)
OpenAPI (조각) - 지갑
yaml paths:
/v1/wallet/{userId}/credit:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreditRequest'
responses:
'202': { description: 'Enqueued' }
components:
schemas:
CreditRequest:
type: object required: [amount, currency, reason, idempotencyKey]
properties:
amount: { type: number }
currency: { type: string, example: UAH }
reason: { type: string, enum: [Deposit, Bonus, Adjustment] }
idempotencyKey: { type: string }
AsyncAPI (조각) -이벤트
yaml channels:
wallet. credit. applied:
publish:
message:
name: WalletCreditApplied payload:
type: object required: [userId, amount, currency, sourceEventId]
14) 테스트
도메인 규칙에 대한 단위/속성 기반.
CDC (Pact/Assertible) -공급자/소비자 계약 테스트.
현지 중개인 (테스트 컨테이너) 과의 통합.
중요한 흐름 E2E (registratsiya → depozit → 시작 이그리 → vyvod)
혼돈/실패 테스트: PSP 셧다운/브로커 드롭/존 손실.
15) 측정 항목 및 SLO (최소)
서비스의 가용성: '계정 99. 결제/지갑의 경우 9% '.
대기 시간 p95: 중요한 경로 API 계정 300-500 ms.
오류 예산: 0. 1–0. 분기당 5%, 화상 경보.
대기열: 리드 타임 이벤트 (→ 소비 생성), DLQ 1%.
비즈니스: TTP, TtW, FTD 성공, KYC-TtV.
16) 점검표
서비스 설계
- 도메인 경계 및 데이터 소유자를 지우십시오.
- OpenAPI/AsyncAPI는 레지스트리에서 + 스키마를 계약합니다.
- SLO/경고 정의; 메트릭/트레일/로그가 내장되어 있습니다.
- 타임 아웃/리트레이/이데올로기 정책.
- 스키마 마이그레이션: 확장 및 계약.
출시 전에
- 단위/CDC/통합 테스트 녹색.
- 카나리아 노선 및 롤백 계획.
- 속도 제한/중량 경로가 구성됩니다.
- 비밀/키/인증서가 파고 있습니다.
- Ficha 플래그와 폴백이 준비되었습니다.
17) 반 패턴
데이터 버스로서의 네트워크: 이벤트 대신 깊은 동기 체인.
모든 서비스에 대한 일반적인 "신" -DB.
dempotency의 부족 → 이중 쓰기/발생.
원격 측정 및 킬 스위치가없는 어두운 릴리스.
숨겨진 세션 (외부 조건 대신 모든 곳에서 끈적 끈적함).
버전 및 CDC없이 "코드 내" 계약.
서비스 대신 API 게이트웨이의 논리 (게이트웨이 = 얇음).
18) 모놀리스 마이그레이션 (Strangler Fig)
1. 외관 게이트웨이와 기본 회로 (예: 지불) 를 선택하십시오.
2. 모놀리스에서 이벤트까지 이진 로깅 (아웃 박스) 을 제거하십시오.
3. 점차적으로 엔드 포인트를 새로운 서비스 (라우팅/카나리아 웨이트) 로 전송합니다.
4. 모놀리스를 "코어" 에 압축하여 끄십시오.
19) 스택 및 인프라 (예)
커뮤니케이션: REST/gRPC, Kafka/NATS; 스키마 등록 소.
리포지토리: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP-클릭 하우스/빅 쿼리.
컨테이너/오케스트레이션: 필요한 경우 Docker, Kubernetes (Ingress/Gateway), Service Mesh (Istio/Linkerd).
게이트웨이: Envoy/Kong/Traefik/NGINX.
CI/CD: GitHub 액션/GitLab CI + ArgoCD/Flux; 협정/OWASP/ZAP.
관찰 가능성: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.
20) 최종 치트 시트
도메인 및 데이터 책임 별 설계 경계.
Synchron-답변이 필요한 경우에만; 나머지는 이벤트입니다.
계약/계획/CDC-회귀 보험.
Sagas + outbox + demempotency-신뢰성의 기초.
관찰 가능성과 SLO는 옵션이 아니라 "준비된" 기준입니다.
카나리아/청록색, 마이그레이션-확장 및 계약을 통한 릴리스.
안전/준수: mSL, JWT, KMS, 지역 데이터.
첫째, 스케일과 팀이 준비되면 모듈 식 모놀리스, 진화.