어흥
[대규모 시스템 설계] 6. 키-값 저장소 설계 - 1 본문
키-값 저장소는 키-값 데이터베이스라고도 불리는 비 관계형 데이터베이스다.
그리고 저장소에 저장되는 값은 고유 식별자를 키로 가져야 한다.
대표적인 키-값 저장소로 아마존 다이나모, memcached, 레디스가 존재한다.
문제 이해 및 설계 범위 확정
읽기, 쓰기 그리고 메모리 사용량 사이에 어떤 균형을 갖고, 데이터와의 일관성과 가용성 사이에서 타협적 설계를 해야 한다
- 키-값 쌍의 크리는 10KB 이하
- 큰 데이터를 저장할 수 있다
- 높은 가용성을 제공. 시스템은 장애가 있더라도 빨리 응답해야 한다
- 높은 규모 확장성을 제공. 트래픽양에 따라 자동적으로 서버 증설/삭제가 이뤄져야 한다
- 데이터 일관성 수준은 조정이 가능해야 한다
- 응답 지연시간(latency)가 짧아야 한다
단일 서버 키-값 저장소는?
단일 서버 키-값 저장소는 카-값 쌍 전부를 해시 테이블로 저장하는것이다.
접근법은 빠른 속도를 보장하지만 모든 데이터를 메모리 안에 두는것은 불가능할 수 있다. 이를 해결하기 위해 다음과 같이 할 수 있다.
- 데이터 압축
- 자주 쓰이는 데이터만 메모리에 두고 나머지는 디스크에 저장
하지만 1대 서버로 부족할 때가 찾아오기 때문에 분산 키-값 저장소를 사용한다
분산 키-값 저장소
분산 키-값 저장소는 키-값 쌍을 여러 서버에 분산시키기 때문에 분산 해시 테이블이라고도 불린다.
CAP 정리
Consistency(일관성): 분산 시스템에 접속하는 모든 클라는 어떤 노드에 접속했느냐에 관계없이 언제나 같은 데이터를 보게 된다
Availability(가용성): 분산 시스템에 접속하는 클라는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야 한다
Partitaion Tolerance(파티션 감내): 파티션은 두 노드 사이에 통신 장애가 발생함을 나타낸다. 파티션 감내는 네트워크에 파티션이 생기더라도 시스템은 계속 동작해야 한다
CAP 정리란, 아래 그림과 같이 2가지를 충족하려면 하나는 반드시 희생되어야 한다는 것을 의미
CP 시스템: 가용성을 희생
AP 시스템: 데이터 일관성을 희생
CA 시스템: 파티션 감내를 희생하는 시스템이지만, 통상 네트워크 장애는 피할 수 없는 일로 여겨지므로 실세계에 존재하지 않는다
아래 사진과 같이 이상적 상태라면 네트워크가 파티션되는 상황은 절대 일어나지 않을것이므로 n1에 기록되는 데이터는 자동적으로 n2와 n3에 복제된다. 가용성과 데이터 일관성도 만족한다
하지만 실세계는 파티션 문제를 피할 수 없다. 아래 그림은 n3 노드에 장애가 발생하여 n1, n2와 통신할 수 없는 상황을 보여준다. 이때 클라가 n1 또는 n2에 기록한 데이터는 n3에 전달되지 않거나, 반대로 n3에 기록됐으나 n1 및 n2로 전달되지 않는 사태가 발생한다.
가용성 대신 일관성을 선택한다면(CP 시스템), 3 서버 사이에 생길 수 있는 데이터 불일치 문제를 피하기 위해 n1과 n2에 대해 쓰기 연산을 중단시켜야 하는데, 그렇게 하면 가용성이 깨진다.
은행권 시스템은 보통 데이터 일관성을 양보하지 않는다. 계좌 최신 정보를 출력하지 못하는 은행이라고 생각하면 쉽다.
네트워크 파티션 때문에 일관성이 깨질 수 있는 상황이라면 시스템이 해결될 때까지 에러를 반환해야 한다.
일관성 대신 가용성을 선택한 시스템(AP 시스템)은 낡은 데이터를 반활할 위험이 있어도 계속 읽기 연산을 허용해야 한다. 아울러 n1과 n2는 계속 쓰기 연산을 허용할 것이고, 파티션 문제가 해결된 뒤에 새 데이터를 n3에 전송할 것이다.
'개발 > 대규모 시스템 설계' 카테고리의 다른 글
[대규모 시스템 설계] 6. 키-값 저장소 설계 - 3 (1) | 2023.08.17 |
---|---|
[대규모 시스템 설계] 6. 키-값 저장소 설계 - 2 (0) | 2023.08.16 |
[대규모 시스템 설계] 5. 안정 해시 설계 (0) | 2023.08.14 |
[대규모 시스템 설계] 4. 처리율 제한 장치의 설계 - 2 (0) | 2023.08.08 |
[대규모 시스템 설계] 4. 처리율 제한 장치의 설계 - 1 (0) | 2023.08.02 |