- 결함과 부분 장애
- 단일 컴퓨터에서의 소프트웨어는 항상 같은 결과를 내는 결정적이다. 완전하게 동작하거나 전체 장애가 발생한다.
- 분산 시스템에서는 부분 장애가 발생한다. (비결정적)
- 신뢰성 없는 구성 요소를 사용해 신뢰성 있는 시스템 구성한다.
- 오류 수정 코드 (error-correcting code): 데이터를 정확하게 전송하게 해줌
- IP(Internet protocol)은 신뢰성이 없으나 TCP에서 신뢰성을 제공한다.
- 결함 감지
- 네트워크에선 몇 번 시도해보고 타임아웃이 발생하면 결함으로 감지
- 동기 네트워크 대 비동기 네트워크
- 전화는 동기 네트워크로 통화마다 회선을 만들어서 할당한다. 지연 시간 최대치가 보장이 돼서 제한있는 지연이라 한다.
- TCP는 비동기 네트워크로 패킷 교환 네트워크이다. 데이터 전송률을 동적으로 조절해서 최대한 빨리 처리하는 데 초점을 맞춘다.
- 사용율이 높아질 수록 동적 자원 분할이 비용이 줄어든다.
- 신뢰성 없는 시계
- 단조시계(monotonic clock)와 일 기준 시계(time of day clock)
- 일 기준 시계
- epoch 이래로 흐른 초를 반환하는 형식으로 보통 NTP로 동기화한다.
- 로컬 시계가 너무 앞서면 강제로 리셋돼서 뒤로 가는 현상이 나타나기도 한다.
- 단조 시계
- 지속 시간(시간 구간)을 재는 데 적합한 것으로 두 값의 차이로 시간이 얼마나 흘렀는 지를 측정한다.
- 절대적인 값은 의미가 없어서 다른 두 대의 컴퓨에서 나온 단조 시계를 비교하는 건 의미가 없다.
- 일 기준 시계
- 분산 환경에서는 각자의 시간이 있어서 시간 만으로 실제 순서를 알 수가 없다. 논리적 시계로 카운터를 기반으로 이벤트 순서화를 사용해야 한다.
- 시계 읽기의 신뢰 구간
- NTP 서버의 불확실성과 네트워크의 문제로 시간의 신뢰 구간을 정확히 알 수가 없다.
- Spanner의 구글 트루타임(TrueTime) API는 로컬 시계의 신뢰 구간을 명시적으로 나타내서 겹치지 않는다면 순서를 알 수 있다.
- 프로세스 중단
- 동기화된 시계에 의존하면 동기화가 깨졌을 때 문제가 발생한다.
- 로컬 단조 시계를 사용해도 프로세스가 멈추는 현상이 있을 수 있다.
- 분산 시스템에선 상당 시간 멈출 수 있다는 것을 가정해야 한다.
- 응답시간 보장
- 프로세스가 명시된 간격의 CPU시간을 할당받을 수 있게 보장하는 실시간 운영체제(RTOS) 사용
- 가비지 컬렉션 제한하기
- 단조시계(monotonic clock)와 일 기준 시계(time of day clock)
- 지식, 진실, 그리고 거짓말
- 여러 분산 알고리즘은 투표로 정족수를 사용한다.
- 펜싱(fencing) 토큰: 잘못된 리더같은 현상을 막기 위해 잠금이나 임차권을 승인할 때마다 펜싱 토큰을 반환하게 해서 최신의 펜싱토큰을 가진 경우만 처리하도록 한다.
- 비잔틴 결함: 펜싱 토큰은 부주의한 경우를 막지만 의도적으로 거짓말하는 문제가 있을 수 있다. 이럴 경우 비잔틴 결함이 있다고 한다.
'Studying > Data System Design' 카테고리의 다른 글
일괄 처리 [데이터 중심 애플리케이션 설계 10장] (0) | 2023.08.21 |
---|---|
일관성과 합의 [데이터 중심 애플리케이션 설계 9장] (0) | 2023.08.20 |
트랜잭션 [데이터 중심 애플리케이션 설계 7장] (0) | 2023.07.21 |
파티셔닝 [데이터 중심 애플리케이션 설계 6장] (0) | 2023.07.13 |
복제 [데이터 중심 애플리케이션 설계 5장] (0) | 2023.07.09 |