시스템 안정성은 모든 실패를 막는 것이 아니라, 불가피한 실패 속에서도 올바르게 작동하는 능력에 중점을 둡니다. 🛡️
CAP 이론은 분산 시스템이 일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance) 중 최대 두 가지만 동시에 제공할 수 있음을 명시하며, 분할 내성은 피할 수 없으므로 일관성과 가용성 중 선택해야 합니다. ⚖️
Google Spanner는 일관성을 선택하여 선형화 가능한 트랜잭션을 유지하고, Amazon DynamoDB는 가용성을 선택하여 최종 일관성을 통해 항상 응답을 제공합니다. 🔄
최종 일관성(Eventual Consistency)은 업데이트가 멈추면 모든 복제본이 결국 동일한 상태로 수렴하며, 성능과 가용성을 향상시키고 충돌 해결 전략(최종 쓰기 승리, CRDT, 애플리케이션 정의 병합)을 사용합니다. ⏳
로드 밸런서는 들어오는 요청을 여러 서버에 분산시켜 시스템 과부하를 방지하며, L4(전송 계층)와 L7(애플리케이션 계층) 방식이 있고, 고가용성을 위해 자체적으로 이중화됩니다. 🚦
일관된 해싱(Consistent Hashing)은 대규모 수평 확장 시스템에서 노드를 추가하거나 제거할 때 대량의 데이터 재배치 없이 효율적으로 데이터를 관리하는 방법입니다. 🌐
서킷 브레이커는 분산 시스템에서 한 서비스의 실패가 다른 서비스로 전파되는 연쇄 실패를 방지하며, 닫힘, 열림, 반열림 상태를 통해 빠른 실패를 유도하여 리소스 고갈을 막습니다. 🔌
속도 제한(Rate Limiting)은 시스템을 과부하 및 오용으로부터 보호하기 위해 클라이언트가 특정 시간 내에 만들 수 있는 요청 수를 제어하며, 토큰 버킷, 누출 버킷, 고정/슬라이딩 윈도우 등의 알고리즘을 사용합니다. ⏱️
모니터링 및 관측 가능성(Observability)은 메트릭, 로그, 트레이스, 이벤트와 같은 네 가지 핵심 신호를 통해 시스템 동작과 성능에 대한 가시성을 제공하고, 통계적 이상 감지 및 복합 알림으로 효과적인 경고를 제공합니다. 📊
모든 시스템에 모든 패턴이 필요한 것은 아니며, 단순하게 시작하고 모든 것을 측정하며 명확한 증거가 있을 때만 복잡성을 추가하는 것이 안정적인 시스템을 구축하는 핵심입니다. 🌱