대규모시스템설계기초 ch6
대규모 시스템 설계 기초 ch6. 키-값 저장소 설계¶
참고: https://github.com/shinhee-rebecca/system-design-interview-1/blob/main/6%EC%9E%A5/README.md
참고: https://www.mydistributed.systems/2022/10/dynamodb-ten-years-later.html
- 개요
- key-value 저장을 해시테이블에 하면 제일 빠르겠지만, 용량의 한계를 마주한다. 데이터 압축/디스크 사용 해결 한계가 있음
- CAP 정리
- 일관성/가용성/파티션 감내 3가지 요구사항 동시 만족 불가능
- 파티션 감내: 네트워크 장애 생겨도 시스템 계속 동작
- 현실세계 NW 장애 못피해서 CP/AP 시스템만 동작
- 노드 장애 - 일관성 유지 : 시스템 읽기/쓰기 멈추기
- 노드 장애 - 가용성 유지 : 일관성 깨짐
- 일관성/가용성/파티션 감내 3가지 요구사항 동시 만족 불가능
- 데이터 파티션/다중화
- 안정 해시 설계를 통해 데이터를 여러 서버에 고르게 분산
- 해시링 위 배치 -> 시계 방향 순회 -> 첫 N개 서버 데이터 사본 보관
- 데이터 일관성
- Quorom 프로토콜
- 정의
- N : 사본 개수
- W : 쓰기 연산에 대한 정족수
- R : 읽기 연산에 대한 정족수
- 예시
- R=1, W=N: 빠른 읽기 연산에 최적화된 시스템
- W=1, R=N: 빠른 쓰기 연산에 최적화된 시스템
- W+R > N: 강한 일관성이 보장됨 (보통 N=3, W=R=2)
- W+R <= N: 강한 일관성이 보장되지 않음
- 일관성 모델: 강한 일관성/약한 일관성/최종 일관성
- 데이터 비일관성 해소 기법
- vector clock을 사용하여 버전 충돌/순서 병합
- 장애 감지
- 분산 시스템에서 두 대 이상 같은 서버 장애 보고 -> 모든 노드 사이 멀티캐스팅 채널 구축 비효율
- 가십 프로토콜 사용
- 무작위 선정 노드 heartbeat counter 갱신
- 약간의 헬스체크 느낌
- 장애 처리
- 일시적 장애처리: 타 서버에서 요청 대신 처리
- 영구 장애처리 : 머클 트리 (해시트리)