키-값 쌍에서의 키는 유일해야 하며 해당 키에 매달린 값은 키를 통해서만 접근할 수 있다.
- put(key, value)
- get(key)
문제 이해 및 설계 범위 확정
완벽한 설계란 없다. 읽기, 쓰기 그리고 메모리 사용량 사이에 어떤 균형ㅇㄹ 찾고, 데이터의 일광성과 가용성 사이에서 타협적 결정을 내린 설계를 만들어야 한다.
단일 서버 키-값 저장소
한대는 쉽다.
가장 직관적인 방법은 키-값 쌍 전부를 메모리에 해시 테이블로 저장하는 것이다.
→ 빠른 속도를 보장하긴 하지만 모든 데이터를 메모리 안에 두는 것이 불가능할 수도 있다는 약점이 있음
개선책 2가지
- 데이터 압축
- 자주 쓰이는 데이터만 메모리에 두고 나머지는 디스크에 저장
그래도 부족한 때가 곧 찾아온다.
분산 키-값 저장소
분산 키-값 저장소는 분산 해시 테이블이라고도 불린다.
키-값 쌍을 여러 서버에 분산시키기 때문.
분산 시스템을 설계할 때는 CAP 정리를 이해하고 있어야 한다.
CAP 정리
- Consistency (일관성) : 분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했는냐에 관계없이 언제나 같은 데이터를 봐야한다.
- Availablitiy (가용성) : 분산 시스템에 접속하는 클라이언트는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야 한다.
- Partition tolerance (파티션 감내) : 파티션은 두 노드 사이에 통신 장애가 발생하였음을 의미한다. 파티션 감내는 네트워크에 파티션이 생기더라도 시스템은 계속 동작하여야 한다는 것을 뜻한다.
3가지 요구사항을 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다는 정리 → 어떤 두 가지를 충족하려면 나머지 하나는 반드시 희생되어야 한다는 것을 의미
- CP 시스템
- AP 시스템
- CA 시스템 : 그러나 통상 네크워크 장애는 피할 수 없는 일로 여겨지므로, 분산 시스템은 반드시 파티션 문제를 감내할 수 있도록 설계되어야 한다. 실세계에 CA 시스템은 존재하지 않음.
시스템 컴포넌트
- 데이터 파티션 : 규모 확장 자동화, 다양성이 좋다.
- 데이터 다중화
- 일관성 : 여러 노드에 다중화된 데이터는 적절히 동기화가 되어야 한다. 정족수 합의(Quorum Consensus) 프로토콜을 사용하면 읽기/쓰기 연산 모두에 일관성을 보장할 수 있다.
- 일관성 불일치 해소
- 데이터 버저닝 (벡터 시계) : 서버, 버전의 순서쌍을 데이터에 매단 것.
- 장애 처리
- 시스템 아키텍처 다이어그램
- 쓰기 경로
- 읽기 경로
'정기간행물 > daily' 카테고리의 다른 글
URL 단축기 설계 (대시설기) (0) | 2023.09.25 |
---|---|
분산 시스템을 위한 유일 ID 생성기 설계 (대시설기) (0) | 2023.09.24 |
안정 해시 설계 (대시설기) (0) | 2023.09.22 |
처리율 제한 장치의 설계 (대시설기) (0) | 2023.09.21 |
개략적인 규모 추정 (대시설기) (0) | 2023.09.20 |