카테고리 없음

[대규모 시스테 설계 기초] 6장. 키-값 저장소 설계

idleday 2024. 3. 3. 23:56

인프라스터디 내용 발췌

 

 

처음엔 좀 복잡하고 재미없었는데 다시보니 중요한 내용들이네요..

redis나 카산드라나 아마존 dynamo DB같은 도큐먼트 DB들은 noSQL이라고 절대 구조가 쉽지 않구나 알게되었어요

그래도 사용자수, 접속자수 트래픽 등등 이런 조건없이 다른 챕터에 비해 좀더 이론적인 설계 범위가 주어져있다는 점이 신기했습니다. 확실히 웬만한 서비스보다 DB가 만들기 어려운듯요. 

 

키-값 저장소 설계 파트에서 각 지점마다 중요 개념들 정리해봤어요
이론적인 내용이 대다수지만 공부에는 좋겠지.. 그런 감상을 남깁니다

 

 

인상깊었던 부분


1. CAP정리: 데이터일관성(consistency). 가용성(availability), 파티션 감내(partition tolerance)
위 3가지 요구사항을 동시에 만족하는 분산시스텀 설계는 불가능하다는 정리

2. 데이터일관성 
- 정족수 합의(Quorum Consensus) 프로토콜 : 읽기/쓰기 연산을 성공한 것으로 간주하기 위해 필요한 서버응답 수 

3. 비일관성 해소기법 
- 데이터버저닝 : [서버, 버전] 순서쌍인 벡터 시계를 데이터에 매달아 어떤 버전이 선행, 후행 버전인지 데이터 사이의 충돌을 쉽게 감지

3. 장애감지 
- 분산형 장애감지 솔루션인 가십 프로토콜 : 주기적으로 박동 카운터 목록 전송해서 갱신되지 않은 멤버가 있으면 그놈은 장애상태(offline)로 간주하는 것

4. 일시적 장애처리 
- 단서 후 임시위탁(hinted handoff) : 장애 상태 서버로 가는 요청을 다른 서버가 임시로 맡아 처리하고 해당 서버 복구시 일괄 반영하여 데이터 일관성 보존. 임시로 쓰기 연산을 처리한 서버에는 그에 관한 단서(hint)를 남겨둔다. 

5. 영구적 장애처리 
- 반 엔트로피(anti-protocol) 프로토콜 : 사본들을 비교하여 최신 버전으로 갱신 및 동기화.
- 머클(Merkle) 트리 : 각 노드에 그 자식 노드들에 보관된 값의 해시(자식이 리프노드일 경우), 또는 자식노드들의 레이블로부터 계산된 해시값을 레이블로 붙여두는 트리. 
=> 자식노드로부터 새로운 해시값을 계산해서 이진트리를 상향식으로 쭉쭉 만들어나가면 최종 루트 노드의 해시값이 일치하는지 여부로 두 서버가 같은 데이터를 갖는지 탐지 가능.