#system-design #study
발표 기반 자료다 보니 문서상 생략된 부분이 있습니다.
K : V 저장소는 현대에 와서 굉장히 많은 분야에서 사용 중인 저장 방식이다.
가장 큰 장점은 속도인데 Key를 통해 일반적인 환경에서 0(1)에 속도적 우위를 취할수 있다
일반적이지 않은 상황
1. 해시 충동
2. 리사이징
3. 분산환경
4. 디스크기반 저장
키값 저장소의 역할은 기본적으로 간단한 연산을 한다.
키값 저장소의 장점인 속도 측명에서 장점을 취하기 위함이다.
대표적으로
6장에서 일관성,가용성의 가용성을 고려해 키:값 설계를 제한한다.
매우 간단한 방식의 구조 put / get 의 역할을 위해 한개의 저장소에 저장만 하면 되기 때문에 매우 간단하다.
하지만 한계는 분명하다 저장소의 역할의 따라 해시 테이블의 크기가 감당이 안될 수 있다.
이를 해결하기 위한 솔루션으로는
- 데이터의 압축 (저번에 말한 압출 )
- 주기적으로 자주 엑세스되는 데이터만 남기고 나머지는 버림 처리
제한적 단일 환경을 벗어나기 위해 실제 분산 환경을 구축해야한다.
저장되는 해시 테이블을 분산하는 것인데 이것은 논리적 물리적 모두 해당 된다.
이 주제를 알고 가야하는게 CAP 정리는 모든 분산환경에 적용되는 말인대.
분산 시스템의 접속하는 모든 클라이언트는 어떤 노드에 접속 했는지에 상관 없이 언제나 같은 값을 봐야한다.
분산 시스템에 특정 노드가 장애여도 항상 응답을 해야한다.
파티션 : 두 노드 사이에 연결의 유실,지연등을 의미
노드간 파티션이 발생해도 시스템은 계속 동작해야한다는 의미.
을 모두 만족할 수 없다는 정리다.
여기서 Redis의 경우 CP(일관성 + 파티션 내성)의 경우를 따른 다고 볼 수 있다.
다만 "Redis Sentinel"과 "Redis Cluster"등의 여러 기능들이 있어 AP모델로도 동작 되도록 할 수 있다.
책에서 나오는 사례로 설명해보자면.
n1
에 대해 데이터 변동 시 n2
와 n3
에 자동을 전파된다.이 하위의 내용은 개략적으로 읽는걸 추천
키값 저장소 구축을 위한 요소들은 매우 많다.
한번의 스터디에서 한번에 다루기는 불가능하다고 판단.
최대한 요약 정리
데이터 파티션(partition)
데이터 다중화(replication):
일관성(consistency):
모든 사용자가 동일한 데이터 뷰를 보게 하여 데이터의 정확성을 유지한다.
이때 정족수 합의 프로토콜
를 통해 성능과 일관성 사이의 균형을 조절 해야한다
R : 읽게 연산의 정족수 , 읽기 연산 성공 시 R개 이상에서 승낙 받아야한다.
W : 쓰기 연산의 정족수 : 쓰기 쓰기 성공 시 W개 이상에서 승낙 받아야한다.
N : 사본의 개수 (다중화된 서버를 의미)
일관성 모델(consistency model):
데이터의 일관성 수준을 결정하는 모델
강한 일관성(strong consistency)
약한 일관성(weak consistency)
최종 일관성(eventual consistency)
정족수 합의는 일관성 유지를 위한 구체적인 기술적 메커니즘.
일관성 모델은 시스템이 데이터 일관성을 어떻게 다룰 지에 대한 전반적인 방침이나 철학.
강한 일관성은 현재 쓰기 요청이 접근 시 락을 걸어버리는 단순 무식하지만 강력한 방식이다.
최종 일관성을 가장 많이 채용한다.
책에서는 다이나모와 카산드라를 얘기 했는데 이것들은 레디스와 다르게
대규모 데이터 처리를 위한 확장성과 고성능을 제공하는 것에 초점을 맞춘다.
빅데이터 처리, 실시간 분석, 온라인 서비스 백엔드등에서 사용된다.
캐싱은 아님!
데이터를 다중화할 때 피할 수 없는 문제는?
버저닝이란?
두 클라이언트가 동시에 같은 키 값으로 두 개의 사본 저장소에 쓰기 작업을 한다면 어떤 문제가 발생할까?
이를 해결하기 위한 것이 벡터 시계(vector clock)이다.
벡터 시계는 어떻게 동작할까?
다음은 벡터 시계의 사용 시나리오다.
하지만 벡터시계는 어렵다 그냥 원리만 한 줄로 이해하고 가자면
벡터 클락은 분산 시스템에서 각 노드의 이벤트 순서를 추적하여
서로 다른 노드에서 발생한 이벤트 간의 인과 관계를 파악하는 메커니즘이다.
참조
https://darkstart.tistory.com/144
장애 처리:
장애전파 : 멀티 캐스트
장애전파 : 멤버쉽 목록
장애 감지의 경우 간단한 편이다.
장애 처리도 두가지 경우로 나뉘는데.
시스템 아키텍처 다이어그램:
시스템의 구조를 시각적으로 나타내어, 구성요소와 그들 간의 관계를 이해하는 데 도움을 준다.
이 부분은 클라이언트부터 API의 처리 까지 다이어그램을 표현한다.
위 이미지는 SPOF( Single Point Of Failure : 단일 장애 지점) 가 발생하지 않는다.
쓰기 경로(write path):
읽기 경로(read path):