키-값 저장소(key-value store)는 키-값 데이터베이스라고도 불리는 비 관계형(non-relational) 데이터베이스
문제 이해 및 설계 범위 확정
다음 연산을 지원하는 키-값 저장소를 설계
- put(key, value): 키-값 쌍을 저장소에 저장
- get(key): 인자로 주어진 키에 매달린 값을 꺼냄
다음 특성을 갖는 키-값 저장소를 설계
- 키-값 쌍의 크기는 10KB 이하
- 큰 데이터를 저장할 수 있어야 함
- 높은 가용성을 제공해야 함
- 높은 규모 확장성을 제공해야 함
- 데이터 일관성 수준은 조정 가능해야 함
- 응답 지연시간(latency)이 짧아야 함
단일 서버 키-값 저장소
데이터 압축과 캐싱을 이용해도 한 대 서버로 부족한 때가 찾아옴. 많은 데이터를 저장하려면 분산 키-값 저장소(distributed key-value store)를 만들 필요가 있음
분산 키-값 저장소
분산 키-값 저장소(분산 해시 테이블): 키-값 쌍을 여러 서버에 분산시킴
분산 시스템을 설계할 때는 CAP 정리를 이해해야 함
CAP 정리

CAP(Consistency, Availability, Partition Tolerance theorem): 데이터 일관성(consistency), 가용성(availability), 파티션 감내(aprtition tolerance)라는 세 가지 요구사항을 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다는 정리
- 데이터 일관성: 분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐에 관계없이 언제나 같은 데이터를 보게 되어야 함
- 가용성: 분산 시스템에 접속하는 클라이언트는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야 함
- 파티션 감내: 파티션은 두 노드 사이에 통신 장애가 발생하였음을 의미함. 파티션 감내는 네트워크에 파티션이 생기더라도 시스템은 계속 동작하여야 함
CAP에서는 이들 가운데 어떤 두 가지를 충족하려면 나머지 하나는 반드시 희생되어야 한다는 의미
- CP 시스템: 일관성과 파티션 감내를 지원. 가용성을 희생함 (은행권 시스템)
- AP 시스템: 가용성과 파티션 감내를 지원. 데이터 일관성을 희생함
- CA 시스템: 일관성과 가용성을 지원. 파티션 남내는 지원하지 않음. 하지만 네트워크 장애는 피할 수 없는 일로 여겨지므로, 분산 시스템은 반드시 파티션 문제를 감내할 수 있도록 설계되어야 함 → 따라서 실세계에 CA 시스템은 존재하지 않음
요구사항에 맞도록 CAP 정리를 적용해야 함
시스템 컴포넌트
데이터 파티션
전체 데이터를 한 대 서버에 넣는 것은 불가 → 데이터를 파티션들로 분할한 다음 여러 서버에 분산하여 저장 → 안정 해시 사용
데이터 다중화(replication)
데이터를 N개의 서버에 비동기적으로 다중화 → 해시 링 위에서 시계 방향으로 순회하며 만나는 N개의 서버에 사본 저장
일관성(consistency)
다중화된 데이터는 동기화가 되어야 함 → 정족수 합(Quorum Consensus) 프로토콜 사용
일관성 불일치 해소(inconsistency resolution)
- 강한 일관성(strong consistency): 모든 읽기 연산은 가장 최근에 갱신된 결과를 반환해야 함
- 약한 일관성(weak consistency): 읽기 연산은 가장 최근에 갱신된 결과를 반환하지 못할 수 있음
- 최종 일관성(eventual consistency): 약한 일관성의 한 형태로, 갱신 결과가 결국에서 모든 사본에 반영(즉, 동기화)되는 모델
→ 고가용성 시스템에서는 최종 일관성 모델을 택함 → 일관성이 깨어질 수 있음 → 비 일관성 해소 기법: 데이터 버저닝 → 버저닝(versioning)과 벡터 시계(vector clock) 사용
장애 처리
장애 감지
- 장애를 감지한 시스템은 가용성을 보장하기 위해 엄격한 정족수(strict quorum), 또는 느슨한 정족수(sloppy quorum) 접근법을 사용
장애 처리
- 가십 프로토콜(Gossip protocol)과 같은 분산형 장애 감지(decentralized failure detection) 사용
- 일시적 장애 처리: 느슨한 정족수(sloppy quorum) → 임시 위탁(hinted handoff) 기법 사용
- 영구 장애 처리: 반-엔트로피(anti-entropy) 프로토콜과 머클(Merktle) 트리 사용
- 데이터 센터 장애 처리: 데이터를 여러 데이터 센터에 다중화
시스템 아키텍처 다이어그램

아키텍처의 주요 기능
- 클라이언트는 키-값 저장소가 제공하는 두 가지 단순한 API, 즉 get(key) 및 put(key, value)와 통신함
- 중재자(coordinator)는 클라리언트에게 키-값 저장소에 대한 프록시(proxy) 역할을 하는 노드
- 노드는 안정 해시(consistent hash)의 해시 링(hash ring) 위에 분포함
- 노드를 자동으로 추가 또는 삭제할 수 있도록, 시스템은 완전히 분산됨(decentralized)d
- 데이터는 여러 노드에 다중화됨
- 모든 노드가 같은 책임을 지므로, SPOF(Single Point of Failure)는 존재하지 않음
- 모든 노드는 기능 전부를 지원해야 함
쓰기 경로(write path)

- 쓰기 요청이 커밋 로그(commit log) 파일에 기록됨
- 데이터가 메모리 캐시에 기록됨
- 메모리 캐시가 가득차거나 사전에 정의된 어떤 임계치에 도달하면 데이터는 디스크에 있는 SSTable(Sorted-String Table)에 저장됨
읽기 경로(read path)

- 데이터가 메모리에 있는지 검사한다. 없으면 2로 감
- 데이터가 메모리에 없으므로 블룸 필터(Bloom filter)를 검사함
- 블룸 필터를 통해 어떤 SSTable에 키가 보관되어 있는지 알아냄
- SSTable에서 데이터를 가져옴
- 해당 데이터를 클라이언트에게 반환함
요약
분산 키-값 저장소가 가져야 하는 기능/기능 구현에 필요한 기술
목표/문제
|
기술
|
대규모 데이터 저장
|
안정 해시를 사용해 서버들에 부하 분산
|
읽기 연산에 대한 높은 가용성 보장
|
데이터를 여러 데이터센터에 다중화
|
쓰기 연산에 대한 높은 가용성 보장
|
버저닝 및 벡터 시계를 사용한 충돌 해소
|
데이터 파티션
|
안정 해시
|
점진적 규모 확장성
|
안정 해시
|
다양성(heterogeneity)
|
안정 해시
|
조절 가능한 데이터 일관성
|
정족수(쿼럼) 합의(quorum consensus)
|
일시적 장애 처리
|
느슨한 정족수 프로토콜(sloppy quorum)과 단서 후 임시 위탁(hinted handoff)
|
영구적 장애 처리
|
머클 트리(Merkle tree)
|
데이터 센터 장애 대응
|
여러 데이터 센터에 걸친 데이터 다중화
|
Reference: http://www.yes24.com/Product/Goods/102819435
가상 면접 사례로 배우는 대규모 시스템 설계 기초 - YES24
“페이스북의 뉴스 피드나 메신저, 유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까?”IT 경력자라도 느닷없이 대규모 시스템을 설계하려고 하면 막막하다고 느낄 수 있다. 특히나
www.yes24.com
'백엔드 > 아키텍처' 카테고리의 다른 글
[System Design Interview] 8장 URL 단축기 설계 (0) | 2022.09.08 |
---|---|
[System Design Interview] 7장 분산 시스템을 위한 유일 ID 생성기 설계 (0) | 2022.09.08 |
[System Design Interview] 5장 안정 해시 설계 (0) | 2022.08.28 |
[System Design Interview] 4장 처리율 제한 장치의 설계 (0) | 2022.08.28 |
[System Design Interview] 3장. 시스템 설계 면접 공략법 (0) | 2022.08.20 |