합의 알고리즘
합의 알고리즘은 기계의 모음 회원 중 일부의 실패를 살아남을 수 일관된 그룹으로 작동 할 수 있습니다.
- 개인 체인 : (블록 체인 개념에 비해) 분산 합의 알고리즘의 전통적인 시스템 등 사육사의 ZAB 협정, paxos, 뗏목 등. 시스템은 노드 또는 네트워크 장애 원인을 고려하기 때문에, 클러스터의 악 노드의 존재를 고려하지 않고 개인 체인.
- 연합 체인 : 클러스터의 악 노드의 존재를 고려할 필요도, 클러스터에 노드를 고려하는 오류가있다. 연합 체인의 경우, 각각의 새로운 노드를 확인하고 감사해야합니다. 예를 들어 pbft 알고리즘의
- 공공 체인 : 네트워크에서 노드를 고려뿐만 아니라, 체인 및 제휴 유사하다 악 노드를 고려해야하는 실패가있다. 연합 체인과 가장 큰 차이점은 대중 체인 노드가 자유롭게 가입하거나 종료 엄격한 검증 및 감사가 필요하지 않습니다 수 있다는 것입니다. 예를 들어 pow.pos, 장애인 단체, 리플
뗏목 및 paxos
- 프로토콜 클래스 집합입니다 paxos
- 기본 paxos
- 멀티 paxos 지도자를 강화
- 멀티 paxos처럼 조금 뗏목
뗏목 알고리즘
두 종이
- 에세이 "이해할 합의 알고리즘의 검색에서 "
- 대형 종이 [ "합의 : 브리징 이론 및 실습"]
일부 오픈 소스 프로젝트 구현, etcd, tidb / tikv, 영사
알고리즘 개요
리더 노드에 의해 뗏목 알고리즘은 일관성 문제를 해결합니다. 리더 노드는 클라이언트로부터 요청 로그 데이터를 수신 한 다음 로그가 제출 될 수있다, 리더 노드는 다음 다른 로깅 노드가 성공적으로 복사되어있는 클러스터를 통지 할 때, 노드의 절반 이상에 동기화 된 노드가 복제 클러스터에서 다른 사람에 동기화 뗏목 상태 머신 실행.
상기와 같이, 알고리즘은 뗏목 일관성 문제는 다음 하위 문제로 분할 해결한다.
- 리더 선거 : 클러스터 노드의 선두 주자가 있어야합니다.
- 복제 로그 : 리더 노드는 클라이언트의 요청과 클러스터의 다른 노드로 로그 데이터에 이러한 요청 재 동기화 시퀀스를받습니다.
- 보안 : 노드가 구현 데이터 입력 상태 머신의 뗏목을 제출 한 경우, 다른 노드에서 다른 로그 데이터가 동일한 인덱스 입력 상태 머신의 실행을 뗏목 더 이상 가능하지 않다.
- 회원 변경 (회원 변경)
리더 선거
节点刚启动,进入follower状态,同时创建一个超时时间在150-300毫秒之间的选举超时定时器。
follower状态节点主循环:
如果收到leader节点心跳:
心跳标志位置1
如果选举超时到期:
没有收到leader节点心跳:
任期号term+1,换到candidate状态。
如果收到leader节点心跳:
心跳标志位置空
如果收到选举消息:
如果当前没有给任何节点投票过 或者 消息的任期号大于当前任期号:
投票给该节点
否则:
拒绝投票给该节点
candidate状态节点主循环:
向集群中其他节点发送RequestVote请求,请求中带上当前任期号term
收到AppendEntries消息:
如果该消息的任期号 >= 本节点任期号term:
说明已经有leader,切换到follower状态
否则:
拒绝该消息
收到其他节点应答RequestVote消息:
如果数量超过集群半数以上,切换到leader状态
如果选举超时到期:
term+1,进行下一次的选举
复制代码
선거를 시작할 때, 추종자 사무실의 그 기간의 수를 증가하고 후보 상태로 전환됩니다. 그런 다음 클러스터의 다른 노드에 RequestVote RPC 요청을 전송하여 새로운 선거를 시작합니다. 후보 노드는 용어까지 다음 중 하나가 발생하는 상태를 유지합니다.
노드 후보는 투표가 클러스터의 다른 노드의 절반 이상을받은, 선거를 이겼다. 또 다른 노드는 지도자가되었다. 단일 노드 때 선거 시간 초과 곧 리더가된다 없습니다.
로그 복제
日志复制的流程大体如下:
每个客户端的请求都会被重定向发送给leader,这些请求最后都会被输入到raft算法状态机中去执行。
leader在收到这些请求之后,会首先在自己的日志中添加一条新的日志条目。
在本地添加完日志之后,leader将向集群中其他节点发送AppendEntries RPC请求同步这个日志条目,当这个日志条目被成功复制之后(什么是成功复制,下面会谈到),leader节点将会将这条日志输入到raft状态机中,然后应答客户端。
committedIndex >= appliedIndex
复制代码
뗏목 알고리즘은 다음의 두 가지 이전에 속성 (LogMatch) 언급 일치하는 로그를 충족하기 위해이 두 가지 속성의 역할을 유지한다 :
- 두 개의 서로 다른 로그 용어의 항목과 같은 인덱스 번호가 동일한에 저장되어있는 명령이있는 경우.
- 로그의 두 가지 항목이 같은 용어 색인 및 번호가있는 경우, 그 사이의 모든 항목을 정확히 동일합니다.
보안
- 지도자 완전히 원리 : 로그 항목이 주어진 기간 내에 제출 한 경우, 다음 항목은 지도자의 임기를 모두 더 큰 숫자에 나타납니다
- << broadcastTime electionTimeout << MTBF