Consul
何為Consul?
Consul 是由 HashiCorp 公司推出的開源軟件,用於實現分布式系統的服務發現與配置。與其他分布式服務注冊與發現的方案,Consul 的方案更“一站式”,內置了服務注冊與發現框 架、分布一致性協議實現、健康檢查、Key/Value 存儲、多數據中心方案,不再需要依賴其他工具(比如 ZooKeeper 等),使用起來也較為簡單。
Consul 用 Golang 實現,因此具有天然可移植性(支持 Linux、windows 和 Mac OS X ),它的安裝包僅包含一個可執行文件,方便部署,與 Docker 等輕量級容器可無縫配合。
consul與Eureka的區別‘
1 Consul強一致性(CP)
Eureka保證高可用和最終一致性
開發語言和使用:
eureka就是一個servlet程序,跑在servlet容器中
Consul是Go語言的編寫而成,安裝啟動即可
Consul不同於Eureka其需要單獨安裝
Consul安裝
1 去官網下載對應的Consul
https://www.consul.io/downloads.html
2 使用cmd進入Consul安裝目錄
輸入
#以開發者模式快速啟動
consul agent -dev -client=0.0.0.0

3 進入到管理后台界面
http://ip地址:8500
名詞解釋:
Client : Consul 的 Client模式,就是客戶端模式。是 Consul 節點的一種模式,這種模式下,所有注冊到當前節點的服務會被轉發到 Server,本身是不持久化這些信息。 Server :Consul 的 Server 模式,表明這個 Consul 是個 Server ,這種模式下,功能和 Client 都一樣,唯一不同的是,它會把所有的信息持久化的本地,這樣遇到故障,信息是可以被保留的。 Server-Leader: Server 是它們的老大,它和其它 Server 不一樣的一點是,它需要負責同步注冊的信息給其它的 Server ,同時也要負責各個節點的健康監測。 raft: Server 節點之間的數據一致性保證協議使用的是 raft,而 zookeeper 用的 paxos,etcd采用的也是raft 服務發現協議:Consul 采用 http 和 DNS 協議,etcd 只支持 http 。 服務注冊:Consul 支持兩種方式實現服務注冊,一種是通過 Consul 的服務注冊 Http API,由服務自己調用 API 實現注冊,另一種方式是通過 json 格式的配置文件實現注冊,將需要注冊的服務以 json 格式的配置文件給出。Consul 官方建議使用第二種方式。
Consul服務發現原理:
1、部署集群。首先需要有一個正常的Consul集群,有Server,有Leader。這里在服務器Server1、Server2、Server3上分別部署了Consul Server。
2、選舉Leader節點。假設他們選舉了Server2上的 Consul Server 節點為Leader。這些服務器上最好只部署Consul程序,以盡量維護Consul Server的穩定。
3、注冊服務。然后在服務器Server4和Server5上通過Consul Client分別注冊Service A、B、C,這里每個Service 分別部署在了兩個服務器上,這樣可以避免Service的單點問題。服務注冊到Consul可以通過 HTTP API(8500 端口)的方式,也可以通過 Consul 配置文件的方式。
4、Consul client轉發注冊消息。Consul Client 可以認為是無狀態的,它將注冊信息通過RPC轉發到Consul Server,服務信息保存在Server的各個節點中,並且通過Raft實現了強一致性。
5、服務發起通信請求。最后在服務器Server6中Program D需要訪問Service B,這時候Program D首先訪問本機Consul Client提供的HTTP API,本機Client會將請求轉發到 Consul Server。