LINE 앱을 위한 확장 가능한 멀티 데이터 센터 ID제너레이터 - 2021 Korean version -
영상
요약
기존 방법
- 레디스를 이용한 ID 생성
기존 방법의 문제
- Reliability: 신뢰성
- Availability: 가용성
- Scalability: 확장성
Case1: Sudden death of Redis hosts
- Redis Master가 죽을 경우 Redis는 replica와 비동기적으로 동기화를 하므로 ID 중복이 발생할 수 있다.
Case2: Network partition
- Master와 Redis Master와 네트워크가 끊길경우 ID 생성이 안 된다.
새로운 방법
새로운 방법의 문제
Case 1: Not monotonically increasing ID
- 윤초나 NTP에 의한 시간 조정(clock drift)시 ID의 단조로운 증가가 불가능해짐. –> ID 중복 발생
- 해결: clock drift 발생시
- Keep timestamp monotonic increasing
- Correct timestamp gradually
Case 2: Message lost/dup at Redis storage
- Redis의 lua script의 경우 정수도 부동소수점으로 변환하여 표현하기 때문에 bigint를 올바르게 표현 못 함.(lua script 5.3에서 정수형이 도입되면서 해결)
- lua script에서 bigint를 구현을 하거나, 수치로 변환을 하지 않고 직접 비교 등으로 회피 가능
This post is licensed under CC BY 4.0 by the author.