문제 이해 및 설계 범위 확정
- 키-값 쌍의 크기는 10KB 이하이다.
- 큰데이터를저장할수있어야한다.
- 높은 가용성을 제공해야 한다. 따라서 시스템은 설사 장애가 있더라도 빨리
- 응답해야 한다.
- 높은 규모 확장성을 제공해야 한다. 따라서 트래픽 양에 따라 자동적으로
- 서버 증설/삭제가 이루어져야 한다.
- 데이터 일관성 수준은 조정이 가능해야 한다. 응답 지연시간(latency)이 짧아야 한다.
CAP 정리
데이터 일관성, 가용성, 파티션 감내라는 세가지 요구사항을 동시에 만족하는 분산 시스템을 설계하는 것은 불가능
- 일관성 : 모든 클라이언트는 어떤 노드에 접속했느냐에 관계없이 언제나 같은 데이터 조회
- 가용성 : 모든 클라이언트는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야한다.
- 파티션 감내 : 파티션은 두 노드 사이에 통신 장애가 발생하였음을 의미한다. 파티션 감내는 네트워크에 파티션이 생기더라도 시스템은 계속 동작하여야한다는 것을 의미한다.

시스템 컴포넌트
데이터 파티션(샤딩)
- 데이터를 여러 서비에 분산하여 저장
- 안정해시를 이용하면 고르게 분산 가능하며 노드 추가/삭제에 따른 이동도 최소화할 수 있음
- auto scaling
- 다양성→ 고 성능 서버는 더 많은 가상 노드를 갖도록 설정하여 다중화가 가능해짐
데이터 다중화(replication)
- 어떤 키를 해시 링 위에 배치한 후, 그 지점으로부터 시계방향으로 링을 순회하면서 만나는 첫 N개의 서버에 데이터 사본을 보관한다.