12P by baeba 2일전 | ★ favorite | 댓글 1개

Sam Newman은 분산 시스템에서 꼭 이해해야 할 3가지 핵심 개념으로 Timeouts(타임아웃), Retries(재시도), **Idempotency(멱등성)**를 강조했다.
Paxos, Raft 같은 복잡한 분산 알고리즘보다 이 기본 개념들을 먼저 정확히 다루는 것이 중요하다고 말했다.


분산 시스템의 세 가지 기본 전제

  1. 정보는 즉시 전달되지 않는다.
  2. 상대 시스템이 응답하지 않을 수 있다.
  3. 리소스는 유한하다.

이 세 가지가 분산 시스템의 모든 복잡성을 만드는 근본 원인이다.


Timeouts (타임아웃)

요청이 일정 시간 안에 완료되지 않으면 중단시켜야 한다.
리소스를 오랫동안 점유하면 시스템 과부하와 사용자 불편이 발생할 수 있다.

Newman은 “타임아웃은 단일 요청의 성공보다 시스템 전체의 건강을 우선하는 것”이라고 설명했다.

중요 포인트

  • 평균 실행 시간과 사용자 기대치를 파악
  • 설정 값은 코드 수정 없이 유연하게 변경 가능해야 함

Retries (재시도)

과도한 재시도는 시스템에 자해적 DoS 공격이 될 수 있다.
재시도는 필요하되, **클라이언트·서버 단에서의 제한과 네트워크 지터(jitter)**를 함께 고려해야 한다.

Newman은 지터 추가는 좋지만, 지수적 백오프는 오히려 시스템에 부담이 될 수 있다고 경고했다.


Idempotency (멱등성)

요청을 여러 번 보내도 결과가 같아야 한다.
이는 주로 서버 쪽 책임이며, 재시도가 안전하기 위한 전제 조건이다.

실제 시나리오

  • 요청이 서버에 도달하지 못한 경우: 아무 일도 없음
  • 서버가 처리했지만 응답이 끊긴 경우: 변경은 됐지만 클라이언트는 알지 못함 → 멱등성 필요

구현 방식

  1. 요청 ID 사용: 클라이언트가 반복된 요청임을 알 수 있도록 식별자 부여
  2. Fingerprint 방식: 요청 본문의 해시값 등을 기준으로 중복 여부 판단 (시간 정보는 지양)

결론

"같은 행동을 반복하며 다른 결과를 기대하는 건 광기"라는 말을 인용하며 시작했지만,
Newman은 분산 시스템에서는 재시도가 오히려 합리적일 수 있다고 말했다.
단, 재시도는 반드시 안전하게 이루어져야 하며, 이를 위해 타임아웃과 멱등성이 함께 설계되어야 한다고 강조했다.

서킷브레이커~