책너두 (데이터 중심 애플리케이션 설계) 29일차 (~336p)
- Book/데이터 중심 애플리케이션 설계
- 2023. 4. 24.
요약
- 선형성에서 요구되는 주요 영역을 이해함.
- 잠금과 리더 선출
- 제약 조건과 유일성 보장
- 채널 간 타이밍 의존성
- 선형성 시스템을 구현하기 위한 복제 방식의 방법을 이해함.
- 합의 알고리즘을 사용한다.
- 단일 리더 복제 외에는 비선형으로 볼 수 있다.
- 선형성의 비용과 그에 따른 트레이드 오프를 고려해야 함.
- 내결함성 vs 성능
메모
선형성 기대기
- 시스템이 올바르게 동작하도록 만들기 위해 선형성이 중요한 요구사항이 되는 영역이 몇 가지 있음.
잠금과 리더 선출
- 단일 리더 복제를 사용하는 시스템은 리더가 여러 개가 아니라 진짜로 하나만 존재하도록 보장해야 함.
- 리더 선출하는 방법 중 하나로 잠금을 사용한다.
- 이 잠금을 어떻게 구현하든지 선형적이어야 함.
- 모든 노드는 어느 노드가 잠금을 소유하는지에 동의해야 함.
- 분산 잠금과 리더 선출을 구현하기 위해 아파치 주키퍼나 etcd 같은 코디네이션 서비스가 종종 사용됨.
- 합의 알고리즘을 사용해 선형성 연산을 내결함성 있는 방식으로 구현함.
제약 조건과 유일성 보장
- 유일성 제약 조건을 강제하고 싶다면 선형성이 필요함.
- 실제로 잠금과 비슷함.
- 실제 애플리케이션에서는 때로 이런 제약 조건을 느슨하게 다뤄도 됨.
- ex) 항공평 좌석 초과 예약시, 고객을 다른 항공편으로 옮기고, 불편하에 대한 보상을 해줌.
- 이 경우에는 선형성이 필요 없을 수 있음.
채널 간 타이밍 의존성
- 채널 간 타이밍이 달라서 선형성이 위반될 수 있음.
- p330 예시참고
선형성 시스템 구현하기
- 시스템이 내결함성을 지니도록 만드는 가장 흔한 방법으로 복제를 사용하는 것임.
- 단일 리더 복제(선형적이 될 가능성이 있음.)
- 리더나 동기식으로 갱신된 팔로워에게 실행한 읽기는 선형적이 될 가능성이 있음.
- 합의 알고리즘(선형적)
- 단일 리더 복제를 닮음.
- 합의 프로토콜에는 스플릿 브레인과 복제본이 뒤처지는 문제를 막을 수단이 포함되어 있음.
- 이러한 세부 사항 덕에 합의 알고리즘은 성형성 저장소를 안전하게 구현할 수 있음.
- ex) 주키퍼, etcd
- 다중 리더 복제(비선형적)
- 일반적으로 선형적이지 않음.
- 여러 노드에 동시 쓰기를 처리하고, 그렇게 쓰여진 내용을 비동기로 다른 노드에 복제하기 때문
- 리더 없는 복제(아마도 비선형적)
- 일 기준 시계를 기반으로 한 최종 쓰기 승리 충돌 해소 방법은 거의 확실히 비선형적임.
- 단일 리더 복제(선형적이 될 가능성이 있음.)
선형성과 정족수
- 엄격한 정족수를 사용한 읽기 쓰기도 네트워크의 지연의 변동이 심하면 경쟁 조건이 생길 수 있고, 선형성이 깨짐.
- 성능이 떨어지는 비용을 지불하고 다이나모 스타일 정족수를 선형적으로 만드는게 가능함.
- 하지만 이는 성형성 읽기와 쓰기 연산만 구현할 수 있고, compare-and-set 연산은 합의 알고리즘이 필요하므로 구현할 수 없음.
- 따라서, 다이나모 스타일 복제를 하는 리더 없는 시스템은 선형성을 제공하지 않는다고 보는게 가장 안전함.
선형성의 비용
- 단일 리더 설정에서 데이터센터 사이의 네트워크가 끊기면 팔로워 데이터센터로 접속한 클라이언트들은 리더로 연결할 수 없으므로 데이터베이스에 아무것도 쓸 수 없고 선형성 읽기도 전혀할 수 없음.
- p333 참고
- 팔로워 데이터센터로만 접속할 수 있는 클라이언트는 네트워크 링크가 복구될 때까지 중단을 경험함.
CAP 정리
- 선형성이 필요 없는 애플리케이션은 네트워크 문제에 더 강인함.
- 이는 에릭 브루어가 이름 붙인 CAP 정리로 널리 알려짐.
- 공식적으로 정의된 CAP 정리는 범위가 매우 좁음.
- 오직 하나의 일관성 모델(=선형성)과 한 종류의 결함(= 네트워크 분단)만 고려함.
- 네트워크 지연, 죽은 노드나 다른 트레이드 오프에 대해서는 얘기하지 않음.
- 따라서, 시스템 설계에 실용적 가치가 거의 없음.
선형성과 네트워크 지연
- 선형성은 유용한 보장이지만 현실에서 실제로 선형적인 시스템은 놀랄 만큼 드뭄.
- ex) 다중코어 CPU의 램
- 한 컴퓨터 안에서 신뢰성 있는 통신을 가정하고 CPU 코어 하나가 컴퓨터의 다른 부분과 연결이 끊겼을 때 계속 정상적으로 동작하기를 기대하지 않음.
- 선형성을 제거한 이유는 내결함성이 아니라
성능
임.
- 선형성을 제거한 이유는 내결함성이 아니라
- 지연 시간에 민감한 시스템에서는 이 트레이드 오프가 중요함.
'Book > 데이터 중심 애플리케이션 설계' 카테고리의 다른 글
책너두 (데이터 중심 애플리케이션 설계) 31일차 (~356p) (0) | 2023.04.25 |
---|---|
책너두 (데이터 중심 애플리케이션 설계) 30일차 (~348p) (0) | 2023.04.24 |
책너두 (데이터 중심 애플리케이션 설계) 28일차 (~327p) (0) | 2023.04.22 |
책너두 (데이터 중심 애플리케이션 설계) 27일차 (~317p) (0) | 2023.04.21 |
책너두 (데이터 중심 애플리케이션 설계) 26일차 (~298p) (0) | 2023.04.20 |