프로젝트 소개
hashicorp/raft는 Raft 합의 알고리즘을 구현한 Go 라이브러리로, 분산 시스템에서 복제된 상태 머신을 구축하기 위한 기반을 제공합니다. 이 라이브러리는 복제 로그를 관리하고 유한 상태 머신(FSM) 추상화와 통합하여 여러 노드에서 일관된 상태를 유지합니다.
주요 기능은 다음과 같습니다:
- **리더 선출**: 노드는 팔로워, 후보자, 리더 상태 사이를 전환합니다. 로워는 타임아웃 기간 동안 항목을 받지 못하면 스스로 후보자로 승격한 후 피어에게 투표를 요청합니다. 과반수의 투표를 받은 후보자가 리더가 됩니다.
- **로그 복제**: 리더는 새로운 로그 항목(불투명한 바이너리 블롭)을 영구 저장소에 추가하고 과반수의 팔로워에게 복제합니다. 커되면 항목이 FSM에 적용됩니다.
- **자동 스냅샷**: 로그가 무한정 커지는 것을 방지하기 위해 Raft는 현재 FSM 상태를 자동으로 스냅샷하고 로그를 압축하여 이미 적용된 항목을 제거합니다.
- **동적 피어 관리**: 이 라이브러리는 과반수가 사용 가능한 한 클러스터에서 노드를 추가하고 제거하는 것을 지원합니다.
- **스토리지 백엔드**: 기본 백엔드인 MDBStore는 별도의 저장소(raft-mdb)에 있으며, BoltDB를 사용하는 순수 Go 백엔드(raft-boltdb)도 사용 가능합니다. 둘 다 LogStore 및 StableStore 구현으로 사용할 수 있습니다.
- **메트릭 방출**: armon/go-metrics(기본값) 또는 hashicorp/go-metrics(빌드 태그를 통해)를 통한 메트릭을 지원하며, 더 이상 사용되지 않는 armon 라이브러리에서 마이그레이션 경로를 제공합니다.
이 라이브러리는 Go 1.16 이상이 필요하며 MPL 2.0에 따라 라이선스가 부여됩니다. Raft 논문 'In Search of an Understandable Consensus Algorithm'을 기반으로 하며 Paxos와 성능이 비슷하고, 로그 커밋 지연 시간은 디스크 I/O와 클러스터 절반까지의 네트워크 왕복으로 제한됩니다.
권장 클러스터 크기는 3개 또는 5개 노드로, 각각 1개 또는 2개의 노드 장애를 허용하면서 가용성을 극대화합니다. 이 라이브러리는 Consul 및 Nomad와 같은 HashiCorp 제품에서 분산 조정을 위해 사용됩니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.