데이터 중심의 애플리케이션 설계 - 비잔틴 오류
펜싱 토큰은 잘못된 행동을 하는 노드를 감지하고 차단할 수 있지만, 악의적인 노드가 가짜 펜싱 토큰을 메시지와 전송하여 시스템을 망가뜨릴 수 있다. 분산 시스템은 노드가 프로토콜에 맞게 행동하지만, GC나 네트워크에 신뢰할 수 없는 경우를 가정해야 한다.
펜싱 토큰은 잘못된 행동을 하는 노드를 감지하고 차단할 수 있지만, 악의적인 노드가 가짜 펜싱 토큰을 메시지와 전송하여 시스템을 망가뜨릴 수 있다. 분산 시스템은 노드가 프로토콜에 맞게 행동하지만, GC나 네트워크에 신뢰할 수 없는 경우를 가정해야 한다.
단일 노드에서 구동되는 프로그램과 분산 시스템의 차이점은 메시지를 주고받기 위해서 네트워크를 사용해야 한다는 점이다. 네트워크 통신은 부분 실패 문제, 시각 문제, 그리고 정지 프로세스 문제를 유발한다.
오류를 감지하는 가장 확실한 방법은 타임아웃이다. 그렇다면 얼마나 타임아웃을 길게 설정해야 할까?
중간 규모의 데이터센터는 월 평균 12개의 네트워크 오류를 겪는다. EC2와 같은 퍼블릭 클라우드를 사용하든, 사설 관리형 데이터센터를 사용하든 네트워크 문제는 누구도 피해갈 수 없다.
분산 시스템 위에서 동작하는 소프트웨어와 단일 시스템에서 동작하는 소프트웨어는 근본적으로 동작과 오류의 양상이 다르다. 신뢰할 수 없는 네트워크, 시각과 타이밍 문제 등이 대표적인 분산 시스템에서 겪을 수 있는 이슈다.