Skip to main content

microservices-design

Design service boundaries, contracts, and failure modes for distributed systems

설치로 이동

소스 정보

저장소
vignesh2027/AI-AGENT-SKILLS
최근 소스 활동
2026년 5월 13일 19:03
감지된 SKILL.md 언어
영어
스타
1
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
microservices-design
description
Design service boundaries, contracts, and failure modes for distributed systems
difficulty
staff
domains
["general"]
## Overview Microservices solve a people problem (independent team deployments) while creating a technical problem (distributed systems complexity). This skill only adds microservices when they solve a real problem, and designs them to be independently deployable, failure-isolated, and observable. ## When to Use - Before splitting a monolith into services - When designing a new service in an existing distributed system - When services are tightly coupled in ways that prevent independent deployment ## Process ### Step 1: Justify the split A service split is justified when: teams are blocked on each other's deployments, scaling requirements differ dramatically, or technology requirements differ. Don't split for "separation of concerns" alone — a module achieves that at lower cost. ### Step 2: Define service boundaries by business capability Services should own a business capability end-to-end. Don't split by technical layer (don't make a "user data service" that stores data for 10 other services). ### Step 3: Design the interface contract Services communicate via explicit contracts. Define the contract before implementation. Version it from day one. ### Step 4: Choose communication style - **Sync (HTTP/gRPC)**: Use when caller needs the result immediately - **Async (messaging)**: Use when caller does not need immediate result; decouples availability Async is better for resilience; sync is simpler to reason about. Choose based on the requirement. ### Step 5: Design for failure isolation Service A must not fail because Service B is slow or unavailable: - Timeouts on all outbound calls - Circuit breakers for repeated failures - Fallback responses or graceful degradation - Bulkhead pattern: don't let one failing downstream exhaust connection pools ### Step 6: Distributed data Each service owns its data store. No shared databases. Services that need data from another service: use the API, or replicate via events. Cross-service joins are a design smell. ### Step 7: Distributed tracing All services propagate trace IDs. You must be able to trace a request across all services it touches. ## Verification Requirements - [ ] Service split justified with a specific team or scaling problem - [ ] Service boundary follows business capability - [ ] Contract versioned from day one - [ ] All outbound calls have timeouts and circuit breakers - [ ] No shared databases between services - [ ] Distributed tracing propagated
GitHub에서 보기