概述
上篇說到構(gòu)建良好的架構(gòu),依托于基礎(chǔ)設(shè)施建設(shè)(自動化測試、自動化部署、服務(wù)監(jiān)控,服務(wù)發(fā)現(xiàn)、配置中心等等),決定成敗的往往是基礎(chǔ)設(shè)施建設(shè),所以從搭建一個注冊中心和配置中心開始我們新一階段的啟程。
注冊中心
注冊中心選型
你有沒有思考過這樣一個問題,為什么會有這么多的注冊中心(etcd/ZooKeeper/Consul),選用那個最適合自己,是不是在選用的時候會眼花繚亂?
我在開始做的時候,自己也有很多困惑,將近3年的時候里我都在不停的學(xué)習,但是還是有很多不同的框架和產(chǎn)品,后來我明白了其中的原因,他們就像生活中的可樂、果汁、和牛奶一樣,你在使用的時候選取你的編程語言(Java、Go、PHP),程序易接入的就好了。
產(chǎn)生注冊中心五花八門的原因是因為語言很多,都想打造最適合自己的體系生態(tài),我選擇Consul為大家講解,因為它安裝和接入都比較方便。
不用被這些假象所困擾,多學(xué)習網(wǎng)絡(luò)和系統(tǒng)的底層原理,萬變不離其宗,技術(shù)人應(yīng)該是給出解決方案。
CAP原理
- 一致性: 所有節(jié)點在同一時間具有相同的數(shù)據(jù)
- 可用性:保證每個請求不管成功或者失敗都有響應(yīng)
- 分區(qū)容錯:系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作
Feature | Consul | ZooKeeper | etcd |
---|---|---|---|
服務(wù)健康檢查 | 服務(wù)狀態(tài)、內(nèi)存、硬盤 | 長鏈接、Keepalive | 鏈接心跳 |
多數(shù)據(jù)中心 | 支持 | — | — |
K/V存儲服務(wù) | 支持 | 支持 | 支持 |
一致性 | Raft | Paxos | Raft |
CAP定理 | CP | CP | CP |
使用接口(多語言能力) | Http/Dns | 客戶端 | Http/Grpc |
安全 | acl/https | acl | Https支持 |
Consul介紹
使用PHP、和Go編寫,使用Consul作為注冊中心和配置中心比較方便,所以我選用的是Consul。
- 采用Raft算法實現(xiàn),有服務(wù)發(fā)現(xiàn),Key/Value存儲,可以做配置中心使用,有健康檢查,并提供了web管理頁面。
Consul 內(nèi)部端口說明:
- TCP/8300:8300端口用于服務(wù)器節(jié)點,客戶端通過RPC協(xié)議調(diào)用服務(wù)端節(jié)點。
- TCP/UDP/8301: 8301端口用于單個數(shù)據(jù)中心所有節(jié)點之間的互相通信,即對LAN池信息的同步,它使得整個數(shù)據(jù)中心能夠自動的發(fā)現(xiàn)服務(wù)器地址,分布式監(jiān)測點的故障,事件廣播。
- TCP/UDP/8302: 8302端口用于單個或多個數(shù)據(jù)中心之間的服務(wù)器節(jié)點的信息同步(WAL池信息的同步),它針對互聯(lián)網(wǎng)的高延遲進行了優(yōu)化,能夠?qū)崿F(xiàn)跨數(shù)據(jù)中心請求。
- HTTP/8500: 8500端口基于Http服務(wù),用于Api接口和Ui訪問。
- DNS/8600: 8600端口作為DNS服務(wù)器,它使得我們可以通過節(jié)點查詢節(jié)點信息。
Consul Raft算法
- 解決了分布式中領(lǐng)導(dǎo)選舉和一致性問題
- Raft算法是比較出名的共識算法,比如Redis的哨兵、Consul
Consul 集群的特點:
- 任期機制,Raft是終身任期的,它永遠都是領(lǐng)導(dǎo)者
- 心跳機制,它決定領(lǐng)導(dǎo)者是否能有效的和跟隨者通信
- 隨機的選舉超時時間,因為是隨機的所以決定了不會再同一時間進行選舉
- 先到先得,一屆任期內(nèi),先收到誰的投票就會給誰,剩下的請求一律拒絕
- 過半機制,收到一半的投票才會
Consul 集群的角色:
- Followers 追隨者:接受到領(lǐng)導(dǎo)者發(fā)送的消息,當心跳超時時,主動推薦自己成為候選人。
- Candidate 候選人:發(fā)送Rpc消息,讓其它節(jié)點投票給自己,當投票超過半數(shù)時,成為領(lǐng)導(dǎo)者。
- Leader 領(lǐng)導(dǎo)者:向其他節(jié)點發(fā)送心跳,只要心跳不超時,一直為領(lǐng)導(dǎo)者。
算法的詳情可以點擊官網(wǎng)視頻查看
Consul 基本使用
注冊服務(wù)
1.注冊服務(wù)是Consul最基礎(chǔ)的服務(wù),點擊查看官網(wǎng)Api
PUT 192.168.88.144:8500/v1/agent/service/register
{
"Name":"audio",
"Id":"audio",
"Tags":[
"v2",
"primary"
],
"Address":"192.168.88.144",
"Port":8500,
"Check":{
"HTTP":"http://192.168.88.144:8500",
"Interval":"10s"
}
}
{
"id": "web",
"name": "web",
"port": 80,
"check": {
"name": "ping check",
"args": ["ping", "-c1", "test.stark.com"],
"interval": "30s",
"status": "passing"
}
}
2.發(fā)現(xiàn)服務(wù)
GET http://192.168.88.144:8500/v1/health/service/audio
[
{
"Node": {
"ID": "38779dca-bffd-e399-6597-266aff68132c",
"Node": "server01-virtual-machine",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"lan_ipv4": "127.0.0.1",
"wan": "127.0.0.1",
"wan_ipv4": "127.0.0.1"
},
"Meta": {
"consul-network-segment": ""
},
"CreateIndex": 13,
"ModifyIndex": 17
},
"Service": {
"ID": "audio",
"Service": "audio",
"Tags": [
"v2",
"primary"
],
"Address": "192.168.88.144",
"TaggedAddresses": {
"lan_ipv4": {
"Address": "192.168.88.144",
"Port": 8500
},
"wan_ipv4": {
"Address": "192.168.88.144",
"Port": 8500
}
},
"Meta": null,
"Port": 8500,
// ...
}
]
Service API
Service 相關(guān)的 API 都在 /v1/agent/service 下:
- /agent/services:該端點返回在本地代理程序中注冊的所有服務(wù);
- /agent/service/{service_id}:返回在本地代理上注冊的單個服務(wù)實例的完整服務(wù)定義;
- /agent/health/service/name/{service_name}/
- /agent/health/service/id/{service_id}:通過名稱或id檢索本地代理上的聚合服務(wù)狀態(tài);
- /agent/service/register:注冊服務(wù);
- /agent/service/deregister/{service_id} :注銷服務(wù);
- /agent/service/maintenance/{service_id}:該端點將給定的服務(wù)置于“維護模式”,在維護模式下,該服務(wù)將被標記為不可用,并且不會出現(xiàn)在DNS或API查詢中。
關(guān)于更多Consul的使用,查詢官方文檔吧。文章來源:http://www.zghlxwxcb.cn/news/detail-422441.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-422441.html
到了這里,關(guān)于微服務(wù) - Consul服務(wù)注冊中心的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!