在 Spring Cloud 體系中,幾乎每個角色都會有兩個以上的產(chǎn)品提供選擇,比如在注冊中心有:Eureka、Consul、zookeeper、etcd 等;網(wǎng)關的產(chǎn)品有 Zuul、Spring Cloud Gateway 等。在注冊中心產(chǎn)品中,最常使用的是 Eureka 和 Consul,兩者各有特點,企業(yè)可以根據(jù)自述項目情況來選擇。 前面給大家詳細介紹了 Eureka ,本節(jié)給大家介紹 Consul 的使用。 什么是ConsulConsul 是 HashiCorp 公司推出的開源產(chǎn)品,用于實現(xiàn)分布式系統(tǒng)的服務發(fā)現(xiàn)、服務隔離、服務配置,這些功能中的每一個都可以根據(jù)需要單獨使用,也可以同時使用所有功能。Consul 官網(wǎng)目前主要推 Consul 在服務網(wǎng)格中的使用。 與其它分布式服務注冊與發(fā)現(xiàn)的方案相比,Consul 的方案更“一站式”——內(nèi)置了服務注冊與發(fā)現(xiàn)框架、分布一致性協(xié)議實現(xiàn)、健康檢查、Key/Value 存儲、多數(shù)據(jù)中心方案,不再需要依賴其它工具。Consul 本身使用 go 語言開發(fā),具有跨平臺、運行高效等特點,也非常方便和 Docker 配合使用。 Consul 的主要特點有: Health Checking: Consul 客戶端會定期發(fā)送一些健康檢查數(shù)據(jù)和服務端進行通訊,判斷客戶端的狀態(tài)、內(nèi)存使用情況是否正常,用來監(jiān)控整個集群的狀態(tài),防止服務轉發(fā)到故障的服務上面。 KV Store: Consul 還提供了一個容易使用的鍵值存儲。這可以用來保持動態(tài)配置,協(xié)助服務協(xié)調(diào)、建立 Leader 選舉,以及開發(fā)者想構造的其它一些事務。 Secure Service Communication: Consul 可以為服務生成分布式的 TLS 證書,以建立相互的 TLS 連接。 可以使用 intentions 定義允許哪些服務進行通信。 可以使用 intentions 輕松管理服務隔離,而不是使用復雜的網(wǎng)絡拓撲和靜態(tài)防火墻規(guī)則。 Multi Datacenter: Consul 支持開箱即用的多數(shù)據(jù)中心,這意味著用戶不需要擔心需要建立額外的抽象層讓業(yè)務擴展到多個區(qū)域。 Consul 角色 Client: 客戶端, 無狀態(tài), 將 HTTP 和 DNS 接口請求轉發(fā)給局域網(wǎng)內(nèi)的服務端集群。 Consul 旨在對 DevOps 社區(qū)和應用程序開發(fā)人員友好,使其成為現(xiàn)代、彈性基礎架構的理想選擇。 使用Consul 的優(yōu)勢使用 Raft 算法來保證一致性, 比復雜的 Paxos 算法更直接。相比較而言, zookeeper 采用的是 Paxos, 而 etcd 使用的則是 Raft。 支持多數(shù)據(jù)中心,內(nèi)外網(wǎng)的服務采用不同的端口進行監(jiān)聽。多數(shù)據(jù)中心集群可以避免單數(shù)據(jù)中心的單點故障,而其部署則需要考慮網(wǎng)絡延遲, 分片等情況等。 zookeeper 和 etcd 均不提供多數(shù)據(jù)中心功能的支持。 支持健康檢查。 etcd 不提供此功能。 支持 http 和 dns 協(xié)議接口。 zookeeper 的集成較為復雜, etcd 只支持 http 協(xié)議。 官方提供 Web 管理界面, etcd 無此功能。 Consul 保持了 CAP 中的 CP,保持了強一致性和分區(qū)容錯性。 Consul 支持 Http\gRPC\DNS 多種訪問方式。 Consul 的調(diào)用過程首先我們根據(jù)一張圖來了解一下 Consul 服務調(diào)用過程: 1、當 Producer 啟動的時候,會向 Consul 發(fā)送一個 post 請求,告訴 Consul 自己的 IP 和 Port; 2、Consul 接收到 Producer 的注冊后,每隔 10s(默認)會向 Producer 發(fā)送一個健康檢查的請求,檢驗 Producer 是否健康; 3、當 Consumer 發(fā)送 GET 方式請求 /api/address 到 Producer 時,會先從 Consul 中拿到一個存儲服務 IP 和 Port 的臨時表,從表中拿到 Producer 的 IP 和 Port 后再發(fā)送 GET 方式請求 /api/address; 4、該臨時表每隔 10s 會更新,只包含有通過了健康檢查的 Producer。 Spring Cloud Consul 項目是針對 Consul 的服務治理實現(xiàn)。Consul 是一個分布式高可用的系統(tǒng),它包含多個組件,但是作為一個整體,在微服務架構中,為我們的基礎設施提供服務發(fā)現(xiàn)和服務配置的工具。 Consul 和 eureka的對比我們先來通過一個表格做簡單對比
通過對比可以得知, Consul 功能更強大,Euerka 更容易使用。 Consul 強一致性?帶來的是: 服務注冊相比 Eureka 會稍慢一些。因為 Consul 的 raft 協(xié)議要求必須過半數(shù)的節(jié)點都寫入成功才認為注冊成功,。Leader 掛掉時,重新選舉期間整個 Consul 不可用。保證了強一致性但犧牲了可用性。 Consul 強烈的一致性意味著它可以作為領導選舉和集群協(xié)調(diào)的鎖定服務。 Eureka 保證高可用(A)和最終一致性: 服務注冊相對要快,因為不需要等注冊信息 replicate 到其它節(jié)點,也不保證注冊信息是否 replicate 成功。當數(shù)據(jù)出現(xiàn)不一致時,雖然 A, B 上的注冊信息不完全相同,但每個 Eureka 節(jié)點依然能夠正常對外提供服務,這會出現(xiàn)查詢服務信息時如果請求 A 查不到,但請求 B 就能查到。如此保證了可用性但犧牲了一致性。 安裝ConsulConsul 不同于 Eureka 是由 go 語言開發(fā)而成,因此需要我們單獨來安裝。 打開 Consul官網(wǎng)根據(jù)不同的操作系統(tǒng)選擇最新的 Consul 版本,我們這里以 Windows 64 操作系統(tǒng)為例,可以看出 Consul 目前的最新版本為 1.4.4
cd 到對應的目錄下,使用 cmd 啟動 Consul:
為了方便啟動,可以在同級目錄下創(chuàng)建一個 run.bat 腳本來啟動,腳本內(nèi)容如下:
下次啟動的時候直接雙擊 run.bat 文件即可;當然也可以把 consul 的 exe 文件路徑加入到本機的 path 路徑下,這樣后期只需要在 cmd 命令行下運行 執(zhí)行命令后,命令行會輸出如下信息: 啟動成功之后訪問:localhost:8500,就可以看到Consul的管理界面 Consul 的 Web 管理界面有一些菜單,我們這里做一下簡單的介紹: Services,管理界面的默認頁面,用來展示注冊到 Consul 的服務,啟動后默認會有一個 consul 服務,也就是它本身。 Nodes,在 Services 界面雙擊服務名就會來到 Services 對于的 Nodes 界面,Services 是按照服務的抽象來展示的,Nodes 展示的是此服務的具體節(jié)點信息。比如啟動了兩個訂單服務實例,Services 界面會出現(xiàn)一個訂單服務,Nodes 界面會展示兩個訂單服務的節(jié)點。 Key/Value ,如果有用到 Key/Value 存儲,可以在界面進行配置、查詢。 ACL,全稱 Access Control List,為訪問控制列表的展示信息。 Intentions,可以在頁面配置請求權限。 當我們看到這個頁面后,也就意味著 Consul 已經(jīng)安裝成功了。 總結本節(jié)為大家介紹了注冊中心的另外一個產(chǎn)品:Consul。介紹了 Consul 的特點、優(yōu)勢,以及和 Eureka 對比有什么不同的特性,最后為大家展示了如何在 Windows 下安裝一個 Consul 服務。下節(jié)為大家介紹 Consul 的架構原理和實踐。 |
|
來自: liang1234_ > 《springCloud》