정족수 (quorum)
쉽게 풀면
여러 대의 서버에 같은 데이터를 복제해 두면, 몇 대가 죽어도 서비스를 계속할 수 있지만 서로 다른 값을 들고 있을 위험이 생깁니다. 정족수 방식은 쓸 때 몇 대 이상에서 성공해야 하고 읽을 때 몇 대 이상에서 응답을 받아야 하는지를 정해 둡니다. 읽기 집합과 쓰기 집합이 반드시 겹치도록 수를 정하면 항상 최신 값을 볼 수 있습니다.
왜 중요한가
가용성과 일관성 사이의 균형을 숫자 몇 개로 조절할 수 있게 해 주는 실용적 장치입니다. 읽기 정족수를 낮추면 읽기가 빨라지고 쓰기 정족수를 낮추면 쓰기가 빨라지므로 워크로드에 맞춰 조정할 수 있습니다. 합의 알고리즘과 복제 데이터베이스 모두의 안전성 논증이 이 겹침 성질 위에 서 있습니다.
논문에서는 이렇게 쓰입니다
읽기와 쓰기에 동의해야 하는 서버 수를 겹치게 잡아 일부 장애에도 최신 값을 읽도록 했다는 뜻입니다.
조금 더 깊게 보면
복제본이 N개일 때 읽기 정족수 R과 쓰기 정족수 W가 R+W>N을 만족하면 두 집합이 반드시 한 노드 이상에서 겹쳐 최신 쓰기를 읽을 수 있습니다. 또 W가 N의 절반을 넘게 잡으면 두 개의 쓰기 정족수가 동시에 성립할 수 없어 쓰기 충돌이 방지됩니다. 과반수 정족수를 쓰면 N개 중 최대 (N−1)/2개의 장애를 견딜 수 있고, 그래서 클러스터 크기를 홀수로 잡는 관행이 생겼습니다.
주의할 점
정족수 조건을 만족하더라도 노드 간 시계나 버전 관리가 허술하면 어느 값이 최신인지 판정할 수 없으므로, 벡터 클럭이나 버전 번호 같은 장치가 함께 필요합니다. 합의 알고리즘은 정족수를 도구로 쓰지만, 정족수 자체는 합의 프로토콜이 아니라 안전성을 위한 수적 조건입니다.