服務(wù)發(fā)現(xiàn)
- 我們?cè)谧鑫⒎?wù)開(kāi)發(fā)的時(shí)候,客戶端的一個(gè)接口可能需要調(diào)用N個(gè)服務(wù),客戶端必須知道所有服務(wù)的網(wǎng)絡(luò)位置(ip+port),如下所示
-
客戶端 Client
- 服務(wù)A (IP 1, PROT 1)
- 服務(wù)B (IP 2, PROT 2)
- 服務(wù)C (IP 3, PROT 3)
- …
- 服務(wù)N (IP N, PROT N)
- 客戶端需要知道目前所有可用的服務(wù)端的ip和端口
- 以往的做法是把服務(wù)的地址放在配置文件或者數(shù)據(jù)庫(kù)中,這樣就有以下幾個(gè)問(wèn)題:
- 需要配置N個(gè)服務(wù)的網(wǎng)絡(luò)位置,加大配置的復(fù)雜性
- 服務(wù)的網(wǎng)絡(luò)位置變化,需要改變每個(gè)調(diào)用者的配置
- 集群的情況下,難以做負(fù)載(反向代理的方式除外)
- 總結(jié)起來(lái)一句話:服務(wù)多了,配置很麻煩,問(wèn)題一大堆
- 所以現(xiàn)在就選擇服務(wù)發(fā)現(xiàn)來(lái)解決這些問(wèn)題,具體設(shè)計(jì)如下:
-
服務(wù)發(fā)現(xiàn)系統(tǒng)
- 服務(wù)A (注冊(cè)IP+PORT)
- 服務(wù)B (注冊(cè)IP+PORT)
- 服務(wù)C (注冊(cè)IP+PORT)
- …
- 服務(wù)N (注冊(cè)IP+PORT)
- 客戶端 <------ 根據(jù)服務(wù)名獲取IP+PORT ------ 服務(wù)發(fā)現(xiàn)系統(tǒng)
-
服務(wù)發(fā)現(xiàn)系統(tǒng)
- 與之前解決方法不同的是,加了個(gè)服務(wù)發(fā)現(xiàn)模塊,服務(wù)端把當(dāng)前自己的網(wǎng)絡(luò)位置注冊(cè)到服務(wù)發(fā)現(xiàn)模塊(這里注冊(cè)的意思就是告訴)
- 服務(wù)發(fā)現(xiàn)就以K-V的方式記錄下,K一般是服務(wù)名,V就是IP:PORT
- 服務(wù)發(fā)現(xiàn)模塊定時(shí)的輪詢查看這些服務(wù)能不能訪問(wèn)的了(這就是健康檢查)
- 客戶端在調(diào)用服務(wù)A-N的時(shí)候,就跑去服務(wù)發(fā)現(xiàn)模塊問(wèn)下它們的網(wǎng)絡(luò)位置,然后再調(diào)用它們的服務(wù)
- 這樣的方式是不是就可以解決上面的問(wèn)題了呢?
- 客戶端完全不需要記錄這些服務(wù)的網(wǎng)絡(luò)位置,客戶端和服務(wù)端完全解耦!
常見(jiàn)的服務(wù)發(fā)現(xiàn)框架(微服務(wù)注冊(cè)中心)
- Etcd:k8s 內(nèi)嵌的服務(wù)發(fā)現(xiàn)
- Mdns:以前mdns是go-micro中默認(rèn)自帶的服務(wù)發(fā)現(xiàn)go-micro的默認(rèn)服務(wù)發(fā)現(xiàn)也是consul
- Consul:是一個(gè)分布式高可用的系統(tǒng),是為基礎(chǔ)設(shè)施提供服務(wù)發(fā)現(xiàn)和服務(wù)配置的工具,常應(yīng)用于grpc、 go-micro中
- Zookeeper:是 Apache 公司為分布式應(yīng)用設(shè)計(jì)的協(xié)調(diào)服務(wù),java中較常用
- Eureka:Netflix 開(kāi)源的一款提供服務(wù)注冊(cè)和發(fā)現(xiàn)的產(chǎn)品,已閉源,提供了完整的服務(wù)注冊(cè)和發(fā)現(xiàn),springcloud中最核心的組件之一,需要手動(dòng)配置 Eureka Server 服務(wù)器
- Nacos:Alibaba 開(kāi)源的一款專注于動(dòng)態(tài)服務(wù)發(fā)現(xiàn),配置和服務(wù)管理的組件
關(guān)于服務(wù)發(fā)現(xiàn)框架Consul
- Consul是Go語(yǔ)言寫(xiě)的開(kāi)源的服務(wù)器發(fā)現(xiàn)軟件,用于實(shí)現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置
- 包含多個(gè)組件, 但是作為一個(gè)整體, 為你的基礎(chǔ)設(shè)施提供服務(wù)發(fā)現(xiàn)和服務(wù)配置的工具
- 它提供以下關(guān)鍵特性:
- 服務(wù)發(fā)現(xiàn):consul通過(guò)DNS或者HTTP接口使服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)變的很容易,一些外部服務(wù),例如saas提供的也可以一樣注冊(cè)
- 健康檢查:健康檢測(cè)使consul可以快速的告警在集群中的操作。和服務(wù)發(fā)現(xiàn)的集成,可以防止服務(wù)轉(zhuǎn)發(fā)到故障的服務(wù)上面 (心跳機(jī)制)
- 鍵/值存儲(chǔ):一個(gè)用來(lái)存儲(chǔ)動(dòng)態(tài)配置的系統(tǒng)。提供簡(jiǎn)單的HTTP接口,可以在任何地方操作
-
多數(shù)據(jù)中心:無(wú)需復(fù)雜的配置,即可支持任意數(shù)量的區(qū)域
- 官方建議:最好是三臺(tái)或者三臺(tái)以上的consul在運(yùn)行,同名服務(wù)最好是三臺(tái)或三臺(tái)以上
- 默認(rèn)可以搭建集群
-
Web管理界面:官方提供web管理界面
- 官網(wǎng):https://www.consul.io
- Git地址:https://github.com/hashicorp/consul
- 負(fù)載均衡:可實(shí)現(xiàn)負(fù)載均衡功能
Consul安裝
- Consul用Golang實(shí)現(xiàn),因此具有天然可移植性 (支持 Linux、windows和macOS),安裝包僅包含一個(gè)可執(zhí)行文件
- Consul安裝非常簡(jiǎn)單,只需要下載對(duì)應(yīng)系統(tǒng)的軟件包并解壓后就可使用
1 ) Windows安裝
- 地址: https://www.consul.io/downloads 或 :https://releases.hashicorp.com/consul
- 下載consul
- 解壓consul到某一個(gè)目錄
- 配置consul到環(huán)境變量
- 測(cè)試:
consul -v
2 ) Mac安裝
-
方式1:
- $
brew tap hashicorp/tap
- $
brew install hashicorp/tap/consul
- $
-
方式2:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-408837.html
- 下載consul,地址:https://releases.hashicorp.com/consul,注意下載非ent的,選擇 consul_x.xx.x_darwin_amd64.zip (按照自己機(jī)型cpu架構(gòu)選擇)
- 解壓consul到某一個(gè)目錄,配置consul到環(huán)境變量,或者下載解壓后,將文件放置在 /usr/local/bin 目錄下
- 查看安裝情況:$
consul --version
3 ) Linux安裝文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-408837.html
- 方式1:
- 1 )Ubuntu
- $
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
- $
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
- $
sudo apt update && sudo apt install consul
- 2 )CentOS
- $
sudo yum install -y yum-utils
- $
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
- $
sudo yum -y install consul
- 方式2:
- 下載consul,地址:https://releases.hashicorp.com/consul
- 解壓 consul到某一個(gè)目錄, 配置consul到環(huán)境變量
[root@localhost ~]# mkdir -p usr/local/consul
[root@localhost ~]# unzip consul_1.11.4_linux_arm64.zip -d /usr/local/consul/
[root@localhost ~]# cd /usr/local/consul/
[root@localhost ~]# ./consul -v
- 注意:如果要全局使用請(qǐng)把consul加入到環(huán)境變量,或者下載解壓后,將文件放置在 /usr/local/bin 目錄下
- 安裝 Consul后,通過(guò)執(zhí)行 consul命令,你可以看到命令列表的輸出: $
consul
到了這里,關(guān)于nodejs微服務(wù):服務(wù)發(fā)現(xiàn)與Consul的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!