微服務(wù)之注冊(cè)中心和配置中心Consul詳解
概述
上篇說(shuō)到構(gòu)建良好的架構(gòu),依托于基礎(chǔ)設(shè)施建設(shè)(自動(dòng)化測(cè)試、自動(dòng)化部署、服務(wù)監(jiān)控,服務(wù)發(fā)現(xiàn)、配置中心等等),決定成敗的往往是基礎(chǔ)設(shè)施建設(shè),所以從搭建一個(gè)注冊(cè)中心和配置中心開始我們新一階段的啟程。
注冊(cè)中心
注冊(cè)中心選型
你有沒有思考過(guò)這樣一個(gè)問(wèn)題,為什么會(huì)有這么多的注冊(cè)中心(etcd/ZooKeeper/Consul),選用那個(gè)最適合自己,是不是在選用的時(shí)候會(huì)眼花繚亂?
我在開始做的時(shí)候,自己也有很多困惑,將近3年的時(shí)候里我都在不停的學(xué)習(xí),但是還是有很多不同的框架和產(chǎn)品,后來(lái)我明白了其中的原因,他們就像生活中的可樂、果汁、和牛奶一樣,你在使用的時(shí)候選取你的編程語(yǔ)言(Java、Go、PHP),程序易接入的就好了。
產(chǎn)生注冊(cè)中心五花八門的原因是因?yàn)檎Z(yǔ)言很多,都想打造最適合自己的體系生態(tài),我選擇Consul為大家講解,因?yàn)樗惭b和接入都比較方便。
不用被這些假象所困擾,多學(xué)習(xí)網(wǎng)絡(luò)和系統(tǒng)的底層原理,萬(wàn)變不離其宗,技術(shù)人應(yīng)該是給出解決方案。
CAP原理
- 一致性: 所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù)
- 可用性:保證每個(gè)請(qǐng)求不管成功或者失敗都有響應(yīng)
- 分區(qū)容錯(cuò):系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作
Feature | Consul | ZooKeeper | etcd |
---|---|---|---|
服務(wù)健康檢查 | 服務(wù)狀態(tài)、內(nèi)存、硬盤 | 長(zhǎng)鏈接、Keepalive | 鏈接心跳 |
多數(shù)據(jù)中心 | 支持 | — | — |
K/V存儲(chǔ)服務(wù) | 支持 | 支持 | 支持 |
一致性 | Raft | Paxos | Raft |
CAP定理 | CP | CP | CP |
使用接口(多語(yǔ)言能力) | Http/Dns | 客戶端 | Http/Grpc |
安全 | acl/https | acl | Https支持 |
Consul介紹
使用PHP、和Go編寫,使用Consul作為注冊(cè)中心和配置中心比較方便,所以我選用的是Consul。
- 采用Raft算法實(shí)現(xiàn),有服務(wù)發(fā)現(xiàn),Key/Value存儲(chǔ),可以做配置中心使用,有健康檢查,并提供了web管理頁(yè)面。
Consul 內(nèi)部端口說(shuō)明:
- TCP/8300:8300端口用于服務(wù)器節(jié)點(diǎn),客戶端通過(guò)RPC協(xié)議調(diào)用服務(wù)端節(jié)點(diǎn)。
- TCP/UDP/8301: 8301端口用于單個(gè)數(shù)據(jù)中心所有節(jié)點(diǎn)之間的互相通信,即對(duì)LAN池信息的同步,它使得整個(gè)數(shù)據(jù)中心能夠自動(dòng)的發(fā)現(xiàn)服務(wù)器地址,分布式監(jiān)測(cè)點(diǎn)的故障,事件廣播。
- TCP/UDP/8302: 8302端口用于單個(gè)或多個(gè)數(shù)據(jù)中心之間的服務(wù)器節(jié)點(diǎn)的信息同步(WAL池信息的同步),它針對(duì)互聯(lián)網(wǎng)的高延遲進(jìn)行了優(yōu)化,能夠?qū)崿F(xiàn)跨數(shù)據(jù)中心請(qǐng)求。
- HTTP/8500: 8500端口基于Http服務(wù),用于Api接口和Ui訪問(wèn)。
- DNS/8600: 8600端口作為DNS服務(wù)器,它使得我們可以通過(guò)節(jié)點(diǎn)查詢節(jié)點(diǎn)信息。
Consul Raft算法
- 解決了分布式中領(lǐng)導(dǎo)選舉和一致性問(wèn)題
- Raft算法是比較出名的共識(shí)算法,比如Redis的哨兵、Consul
Consul 集群的特點(diǎn):
- 任期機(jī)制,Raft是終身任期的,它永遠(yuǎn)都是領(lǐng)導(dǎo)者
- 心跳機(jī)制,它決定領(lǐng)導(dǎo)者是否能有效的和跟隨者通信
- 隨機(jī)的選舉超時(shí)時(shí)間,因?yàn)槭请S機(jī)的所以決定了不會(huì)再同一時(shí)間進(jìn)行選舉
- 先到先得,一屆任期內(nèi),先收到誰(shuí)的投票就會(huì)給誰(shuí),剩下的請(qǐng)求一律拒絕
- 過(guò)半機(jī)制,收到一半的投票才會(huì)
Consul 集群的角色:
- Followers 追隨者:接受到領(lǐng)導(dǎo)者發(fā)送的消息,當(dāng)心跳超時(shí)時(shí),主動(dòng)推薦自己成為候選人。
- Candidate 候選人:發(fā)送Rpc消息,讓其它節(jié)點(diǎn)投票給自己,當(dāng)投票超過(guò)半數(shù)時(shí),成為領(lǐng)導(dǎo)者。
- Leader 領(lǐng)導(dǎo)者:向其他節(jié)點(diǎn)發(fā)送心跳,只要心跳不超時(shí),一直為領(lǐng)導(dǎo)者。
算法的詳情可以點(diǎn)擊官網(wǎng)視頻查看
Consul 基本使用
注冊(cè)服務(wù)
1.注冊(cè)服務(wù)是Consul最基礎(chǔ)的服務(wù),點(diǎn)擊查看官網(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:該端點(diǎn)返回在本地代理程序中注冊(cè)的所有服務(wù);
- /agent/service/{service_id}:返回在本地代理上注冊(cè)的單個(gè)服務(wù)實(shí)例的完整服務(wù)定義;
- /agent/health/service/name/{service_name}/
- /agent/health/service/id/{service_id}:通過(guò)名稱或id檢索本地代理上的聚合服務(wù)狀態(tài);
- /agent/service/register:注冊(cè)服務(wù);
- /agent/service/deregister/{service_id} :注銷服務(wù);
- /agent/service/maintenance/{service_id}:該端點(diǎn)將給定的服務(wù)置于“維護(hù)模式”,在維護(hù)模式下,該服務(wù)將被標(biāo)記為不可用,并且不會(huì)出現(xiàn)在DNS或API查詢中。
關(guān)于更多Consul的使用,查詢官方文檔吧。
以上就是微服務(wù)之注冊(cè)中心和配置中心Consul詳解的詳細(xì)內(nèi)容,更多關(guān)于微服務(wù)注冊(cè)配置Consul的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Tomcat 啟動(dòng)錯(cuò)誤(8080端口被占用)處理方法
8080端口被占用的解決方法,其實(shí)這個(gè)方法,可以用于其它一些端口被占用的問(wèn)題。2009-07-07一個(gè)SSL證書在線轉(zhuǎn)換工具以及IIS7環(huán)境下開通https的方法
公司只能提供 Nginx 下的 SSL 證書,卻要在 IIS 里面開啟 https 這個(gè)問(wèn)題,那么就需要將pem轉(zhuǎn)換為pfx,這里為大家分享一下幾種方法2024-02-02寶塔通過(guò)composer安裝TP依賴的詳細(xì)教程(寶塔服務(wù)器)
這篇文章主要介紹了寶塔通過(guò)composer安裝TP依賴的詳細(xì)教程(寶塔服務(wù)器),本文給大家分享問(wèn)題原因分析及解決方案,需要的朋友可以參考下2023-06-06win10同網(wǎng)段/跨網(wǎng)段訪問(wèn)虛擬機(jī)samba服務(wù)器的過(guò)程記錄
這篇文章主要介紹了win10同網(wǎng)段/跨網(wǎng)段訪問(wèn)虛擬機(jī)samba服務(wù)器,主要包括環(huán)境搭建和ubuntu端的安裝配置過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06LVS(Linux Virtual Server)Linux 虛擬服務(wù)器介紹及配置(負(fù)載均衡系統(tǒng))
LVS(Linux Virtual Server) 是Unix-like系統(tǒng)中的一個(gè)虛擬服務(wù)器,是國(guó)內(nèi)貢獻(xiàn)給開源組織的一個(gè)最優(yōu)秀的項(xiàng)目之一2012-05-05Chat2DB?Web版?服務(wù)器端安裝部署啟動(dòng)步驟
Chat2DB是款數(shù)據(jù)庫(kù)連接工具,主要就是使用JDBC做數(shù)據(jù)庫(kù)連接,外加多對(duì)接了幾個(gè)聊天AI網(wǎng)站,把數(shù)據(jù)庫(kù)和AI做了個(gè)集成,比使用傳統(tǒng)工具Navicat,再另外去AI查方便一點(diǎn),這篇文章主要介紹了Chat2DB?Web版?服務(wù)器端安裝部署啟動(dòng)流程,需要的朋友可以參考下2023-11-11