휴먼 리더블 ID 할당, 안정적인 시스템 설계를 위한 핵심 원리
휴먼 리더블 ID(Human-readable ID) 할당 시, 레코드 생성 전에 ID를 할당하면 팬텀 할당(Phantom Allocations) 문제 발생
아이템포턴시 키(Idempotency Key)를 활용하여 중복 할당 방지, ID 할당은 레코드 생성과 원자적으로(Atomically) 처리
2단계 커밋(2PC)과 유사한 방식으로, ID 할당과 레코드 생성을 두 단계(Two-Phase)로 분리하여 안정성 확보
리퍼(Reaper)를 통해 실패한 할당을 정리하고, 아이템포턴시 윈도우(Idempotency Window)를 설정하여 오류 복구(Error Recovery)
ID 할당의 핵심 원리: 아이템포턴시 키(Idempotency Key)
게시물에서는 휴먼 리더블 ID 할당 시, 아이템포턴시 키(Idempotency Key)를 활용하여 중복 할당 문제를 해결하는 방법을 제시한다. 특히, 클라이언트 요청에 고유한 키를 포함시켜 서버에서 기존 할당 여부를 확인하고, 중복 요청 시 기존 결과를 반환하도록 설계한다. 이를 통해, 여러 클라이언트가 동시에 요청을 보내는 상황에서도 데이터 일관성(Data Consistency)을 유지할 수 있다. 또한, 아이템포턴시 키는 재시도(Retry) 메커니즘에서도 중요한 역할을 수행한다.
2단계 커밋(2PC)과 유사한 ID 할당 프로세스
저자는 ID 할당을 2단계로 나누어 처리하는 방식을 설명한다. Phase 1에서는 아이템포턴시 키를 기반으로 슬롯을 예약하고, Phase 2에서는 실제 레코드를 생성하고 ID를 할당한다. 이 방식은 2단계 커밋(2PC)과 유사하게, 두 시스템 간의 트랜잭션 문제를 해결한다. 특히, Phase 2 실패 시 ID가 낭비되는 문제를 방지하기 위해, ID 할당을 레코드 생성과 원자적(Atomic)으로 처리한다. 이러한 설계는 데이터 격리 아키텍처(Data Isolation Architecture)를 강화한다.
리퍼(Reaper)의 역할과 아이템포턴시 윈도우(Idempotency Window)
게시물에서는 리퍼(Reaper)라는 백그라운드 작업을 통해, Phase 2 실패로 인해 발생할 수 있는 문제들을 해결한다. 리퍼는 주기적으로 보류 중인 할당을 확인하고, TaskChampion에 레코드가 존재하는지 확인하여, 누락된 ID 할당을 처리한다. 또한, 아이템포턴시 윈도우(Idempotency Window)를 설정하여, 재시도 횟수를 제한하고, 불필요한 리소스 소모를 방지한다. 이러한 메커니즘은 시스템의 탄력성(Resilience)을 높이는 데 기여한다.
ID 할당 방식의 트레이드오프(Trade-offs)
게시물은 ID 할당 방식의 트레이드오프를 명확히 제시한다. ID 할당을 레코드 생성 전에 수행하는 경우, 팬텀 할당 문제로 인해 ID가 낭비될 수 있다. 반면, 레코드 생성 후에 ID를 할당하는 경우, 시스템 복잡성이 증가하고, 재시도 로직을 구현해야 한다. 또한, 리퍼(Reaper)와 같은 추가적인 컴포넌트가 필요하다. 저자는 이러한 트레이드오프를 고려하여, 아이템포턴시 키와 2단계 커밋 방식을 통해 안정성을 확보하는 방법을 제시한다.