????????我們知道 Eureka 2.X 遇到困難停止開發了,所以我們需要尋找其他的替代技術替代Eureka,這一小 節我們就講解一個新的組件Consul。
一、Consul介紹
????????Consul 是 HashiCorp 公司推出的開源工具,用于實現分布式系統的服務發現與配置。與其它分布式服務注冊與發現的方案,Consul 的方案更“一站式”,內置了服務注冊與發現框 架、分布一致性協議實 現、健康檢查、Key/Value 存儲、多數據中心方案,不再需要依賴其它工具(比如 ZooKeeper 等)。 使用起來也較 為簡單。Consul 使用 Go 語言編寫,因此具有天然可移植性(支持Linux、windows和 Mac OS X);安裝包僅包含一個可執行文件,方便部署,與 Docker 等輕量級容器可無縫配合。
????????我們來對比下當前服務注冊與發現的主流技術:
對比項 | euerka | Consul | zookeeper | etcd |
服務健康檢查 | 可配支持 | 服務狀態,內 存,硬盤等 | (弱)長連接, keepalive | 連接心跳 |
多數據中心 | — | 支持 | — | — |
kv?存儲服務 | — | 支持 | 支持 | 支持 |
一致性 | — | raft | paxos | raft |
cap | ap | cp | cp | cp |
使用接口(多語?言能力) | http | 支持 http?和?dns | 客戶端 | http/grpc |
watch?支持 | 支持 long?polling/?大部分增量 | 全量/支持long polling | 支持 | 支持?long polling |
自身監控 | metrics | metrics | — | metrics |
安全 | — | acl?/https | acl | https?支持 (弱) |
spring?cloud 集成 | 已支持 | 已支持 | 已支持 | 已支持 |
1.1 consul特性
- 服務發現
- 健康檢查
- key-value存儲
- 多數據中心
- 社區活躍
1.2consul的優勢
-
使用?Raft算法來保證一致性,比復雜的?Paxos算法更直接.相比較而言,zookeeper采用的是?Paxos,?而?etcd?使用的則是?Raft。
-
支持多數據中心,內外網的服務采用不同的端口進行監聽。多數據中心集群可以避免單數據中心?的單點故障,而其部署則需要考慮網絡延遲,分片等情況等。?zookeeper和?etcd?均不提供多數據中?心功能的支持。
-
支持健康檢查。 etcd?不提供此功能
-
支持http和?dns協議接口。?zookeeper的集成較為復雜,etcd?只支持?http協議。
-
官方提供?web?管理界面,etcd?無此功能。
-
綜合比較,Consul作為服務注冊和配置管理的新星,比較值得關注和研究。
1.3 consul的角色
- client?客戶端,無狀態,將?HTTP和?DNS 接口請求轉發給局域網內的服務端集群。
-
server:?服務端,保存配置信息,高可用集群,在局域網內與本地客戶端通訊,通過廣域網與其它數據中心通訊。每個數據中心的?server數量推薦為3個或是5個。
二、Consul工作原理
??????? ? ? ?
????????Consul在項目中發揮服務注冊與發現的功能,我們講解下它的工作原理:
1.當Producer啟動的時候,會向Consu1發送一個post請求,并向Consu1傳輸自己的IP和Port。
2.Consul接收到Producer的注冊后,每隔10s(默認)會向Producer發送一個健康檢查的請求,檢驗 Producer是否健康。
3.當Consumer以Http的方式向Producer發起請求,會先從Consu1中拿到一個存儲服務IP和Port的臨時表,從表中拿到Producer的IP和Port后再發送請求。
4.該臨時表每隔10s會更新,只包含有通過了健康檢查的Producer。
-
2.1 consul的安裝
- ????????Consul 不同于Eureka需要單獨安裝,訪問Consul 官網下載?Consul?的最新版本,當前最新版本是?1.9.0,我們使用consu] ?1.9.0 windows amd64??版本。
- ? ? ? ? 下載地址:Install | Consul | HashiCorp Developer
- ? ? ? ? 歷史下載版本:?Consul Versions | HashiCorp Releases
- ? ? ? ? 下載地址:Install | Consul | HashiCorp Developer
- ????????Consul 不同于Eureka需要單獨安裝,訪問Consul 官網下載?Consul?的最新版本,當前最新版本是?1.9.0,我們使用consu] ?1.9.0 windows amd64??版本。
????????下載后的文件是consul1_1.9.0_windows_amd64.zip, ??我們解壓這個文件,里面有個文件?consul.exe, ?我們將該文件所在目錄添加到環境變量path?中。
????????啟動consul?:dos??命令行執行如下命令:
consul agent -dev
????????控制臺訪問?:http://localhost:8500/
?
- Services: ???服務信息。
-
Nodes: 節點信息,?Consul 支持集群。
-
Key/Value: 存儲的動態配置信息。
-
ACL:權限信息。
-
Intentions?;?通過命令的方式對consul進行管理。
三、在項目中使用consul
????????項目中要想使用Consul作為服務注冊中心,只需要引入如下依賴包,在啟動類上添加
@EnableDiscoveryclient?注解,并在application.yml?中添加Consul?服務地址即可:
3.1添加依賴
? ? ? ? 在項目中添加依賴包:
<!--consul-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId><version>2.2.1.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.2.10.RELEASE</version>
</dependency>
? ? ? ? 3.2在啟動類中添加??@EnableDiscoveryclient????注解
? ? ? ? 3.3在applacation.yaml中添加consul的配置信息
? ? ? ?
? ? ??? ? 配置如下:
spring:cloud:#Consul配置consul:host: 127.0.0.1port: 8500discovery:#注冊到Consul中的服務名字service-name: ${spring.application.name}prefer-ip-address: true
? ? ? ? 項目啟動后,consul服務數據如下:
????????