영사-건축
하나의 데이터 센터에서 작업하는 영사를위한 아키텍처 다이어그램은 다음과 같이 가장 잘 설명 할 수 있습니다.
우리가 볼 수 있듯이 Consul이 관리하는 세 가지 서버가 있습니다. 작업 아키텍처는 뗏목 알고리즘을 사용하여 작동하므로 세 개의 서로 다른 서버 중에서 리더를 선택하는 데 도움이됩니다. 이러한 서버는 다음과 같은 태그에 따라 레이블이 지정됩니다.Follower 과 Leader. 이름에서 알 수 있듯이 추종자는 리더의 결정을 따를 책임이 있습니다. 이 세 서버는 모든 통신을 위해 서로 추가로 연결됩니다.
각 서버는 RPC 개념을 사용하여 자체 클라이언트와 상호 작용합니다. 클라이언트 간의 통신은 다음과 같은 이유로 가능합니다.Gossip Protocol아래에 언급 된대로. 인터넷 시설과의 통신은 TCP 또는 가십 통신 방식을 사용하여 사용할 수 있습니다. 이 통신은 세 서버 중 하나와 직접 연결됩니다.
뗏목 알고리즘
Raft는 복제 된 로그를 관리하기위한 합의 알고리즘입니다. 그것은 원칙에 의존합니다CAP Theorem, 네트워크 파티션이있는 경우 일관성과 가용성 중에서 선택해야 함을 나타냅니다. CAP 정리의 세 가지 기본 사항이 주어진 시점에서 모두 달성 될 수있는 것은 아닙니다. 하나는 최선의 방법으로 두 가지 중 하나를 트레이드 오프해야합니다.
ㅏ Raft Cluster일반적으로 홀수 개수의 여러 서버를 포함합니다. 예를 들어 5 개의 서버가있는 경우 시스템이 2 개의 오류를 허용 할 수 있습니다. 주어진 시간에 각 서버는 다음 세 가지 상태 중 하나입니다.Leader, Follower, 또는 Candidate. 정상적인 작동에서는 정확히 하나의 리더가 있고 다른 모든 서버는 팔로워입니다. 이 추종자들은 수동적 상태에 있습니다. 즉, 스스로 요청을하지 않고 단순히 리더와 후보자의 요청에 응답합니다.
다음 그림은 뗏목 알고리즘이 작동하는 워크 플로우 모델을 설명합니다.
핵심 가치 데이터
Consul 버전 0.7.1 이후 별도의 키 값 데이터가 도입되었습니다. KV 명령은 명령 줄을 통해 Consul의 키-값 저장소와 상호 작용하는 데 사용됩니다. 다음을위한 최상위 명령을 표시합니다.Inserting, Updating, Reading 과 Deleting가게에서. Key / Value 객체 저장소를 얻으려면 consul 클라이언트에 사용할 수있는 KV 메서드를 호출합니다.
kv := consul.KV()
그만큼 KVPair Structure단일 키 / 값 항목을 나타내는 데 사용됩니다. Consul KV Pair의 구조는 다음 프로그램에서 볼 수 있습니다.
type KVPair struct {
Key string
CreateIndex uint64
ModifyIndex uint64
LockIndex uint64
Flags uint64
Value []byte
Session string
}
여기서 위 코드에서 언급 한 다양한 구조는 다음과 같이 정의 할 수 있습니다.
Key− 슬래시 URL 이름입니다. 예 : 사이트 / 1 / 도메인.
CreateIndex − 키가 처음 생성 될 때 할당 된 인덱스 번호.
ModifyIndex − 키가 마지막으로 업데이트되었을 때 할당 된 색인 번호.
LockIndex − 키 / 값 항목에서 새 잠금을 획득 할 때 생성되는 인덱스 번호
Flags − 앱에서 사용자 지정 값을 설정하는 데 사용할 수 있습니다.
Value − 최대 512kb의 바이트 배열입니다.
Session − 세션 객체 생성 후 설정할 수 있습니다.
프로토콜 유형
Consul에는 두 가지 유형의 프로토콜이 있습니다.
- 합의 프로토콜 및
- 가십 프로토콜
이제 그것들을 자세히 이해합시다.
합의 프로토콜
Consensus 프로토콜은 Consul이 CAP 정리에 설명 된대로 일관성을 제공하는 데 사용됩니다. 이 프로토콜은 Raft 알고리즘을 기반으로합니다. 합의 프로토콜을 구현할 때 뗏목 노드가 항상 세 가지 상태 (팔로어, 후보자 또는 리더) 중 하나에있는 경우 뗏목 알고리즘이 사용됩니다.
가십 프로토콜
가십 프로토콜은 구성원을 관리하고 클러스터에서 메시지를 보내고받는 데 사용할 수 있습니다. 영사에서 가십 프로토콜의 사용은 두 가지 방식으로 발생합니다.WAN (무선 영역 네트워크) 및 LAN(근거리 통신망). P2P 네트워크에서 노드를 발견하기 위해 Gossip 알고리즘을 구현할 수있는 세 가지 알려진 라이브러리가 있습니다.
teknek-gossip − UDP에서 작동하며 Java로 작성되었습니다.
gossip-python − TCP 스택을 활용하며 구축 된 네트워크를 통해서도 데이터 공유가 가능합니다.
Smudge − Go로 작성되며 UDP를 사용하여 상태 정보를 교환합니다.
Gossip 프로토콜은 또한 분산 데이터베이스 일관성을 달성하고 유지하거나 일관된 상태의 다른 유형의 데이터를 유지하고, 알 수없는 크기의 네트워크에서 노드 수를 계산하고, 뉴스를 강력하게 전파하고, 노드를 구성하는 데 사용되었습니다.
원격 프로 시저 호출
RPC는 원격 프로 시저 호출의 약어로 표시 할 수 있습니다. 한 프로그램이 다른 프로그램에서 서비스를 요청하는 데 사용하는 프로토콜입니다. 이 프로토콜은 네트워킹 세부 정보를 확인하지 않고도 네트워크의 다른 컴퓨터에있을 수 있습니다.
Consul에서 RPC를 사용하는 진정한 장점은 대부분의 검색 서비스 도구가 얼마 전에 겪었던 지연 문제를 피할 수 있다는 것입니다. RPC 이전에 Consul은TCP 과 UDP대부분의 시스템에는 좋지만 분산 시스템의 경우에는 그렇지 않습니다. RPC는 패킷 정보를 한 곳에서 다른 곳으로 전송하는 시간을 줄여 이러한 문제를 해결합니다. 이 영역에서 GRPC by Google은 벤치 마크를 관찰하고 성능을 비교하려는 경우에 대비할 수 있는 훌륭한 도구입니다.