真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringCloud微服務(wù)運(yùn)維神器之ConsulTemplate?

Spring Cloud微服務(wù)架構(gòu)淺析

這篇文章中要和大家分享下的就是在Spring Cloud微服務(wù)架構(gòu)模式中被運(yùn)維小哥用的很爽的一個(gè)工具Consul Template?

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括類(lèi)烏齊網(wǎng)站建設(shè)、類(lèi)烏齊網(wǎng)站制作、類(lèi)烏齊網(wǎng)頁(yè)制作以及類(lèi)烏齊網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,類(lèi)烏齊網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到類(lèi)烏齊省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

在具體介紹Consul Template是個(gè)什么東西之前,我們先來(lái)整體看一張微服務(wù)模式下的系統(tǒng)架構(gòu)圖,如下圖所示:

Spring Cloud微服務(wù)運(yùn)維神器之Consul Template?

在上圖中,我們看到在基于Spring Cloud的微服務(wù)體系中,所有的微服務(wù)都會(huì)被注冊(cè)到統(tǒng)一服務(wù)注冊(cè)中心進(jìn)行服務(wù)管理,這里使用的服務(wù)注冊(cè)中心是Consul。假設(shè)在正常情況下,我們面向C端用戶(hù)設(shè)計(jì)了一套微服務(wù)邏輯,用戶(hù)端App通過(guò)域名訪問(wèn)后端微服務(wù)邏輯,而訪問(wèn)的調(diào)用鏈路是通過(guò)將公網(wǎng)域名透過(guò)DNS解析到我們的Nginx反向代理服務(wù)器,而Nginx服務(wù)器則需要將請(qǐng)求打到我們的Api Gateway微服務(wù)網(wǎng)關(guān)(如Zuul或Spring Cloud Gateway)上。之后,Api Gateway就會(huì)根據(jù)客戶(hù)端訪問(wèn)的具體服務(wù)路徑,將請(qǐng)求透過(guò)Consul的服務(wù)發(fā)現(xiàn)轉(zhuǎn)發(fā)到具體的微服務(wù)中,例如訪問(wèn)訂單微服務(wù)相關(guān)的接口Api Gateway就會(huì)將請(qǐng)求打到訂單微服務(wù)中。

而我們知道在Spring Cloud微服務(wù)系統(tǒng)中,雖然Api Gateway網(wǎng)關(guān)服務(wù)本身并沒(méi)有什么業(yè)務(wù)邏輯,除了進(jìn)行服務(wù)路由外,也就只是通過(guò)編寫(xiě)過(guò)濾器實(shí)現(xiàn)一些常見(jiàn)的服務(wù)鑒權(quán)之類(lèi)的邏輯,但其本身與其他微服務(wù)一樣都是被注冊(cè)中心管理的,而在容器化的時(shí)代Api Gateway與其他微服務(wù)一樣也可能是被部署在Docker容器中,其IP端口地址本身并不是固定的。所以如果我們之前了解過(guò)Nginx反向代理配置的話,此時(shí)心里就會(huì)有疑問(wèn),Api Gateway服務(wù)的IP端口都不固定怎么搞反向負(fù)載均衡配置呢?

是不是我們應(yīng)該要將Api Gateway特殊處理下,把Api Gateway的部署采用固定主機(jī)IP+端口的部署方式進(jìn)行運(yùn)維呢?答案顯然是可以的,但是問(wèn)題是這樣做本身是不是就額外增加了微服務(wù)架構(gòu)的復(fù)雜度?同時(shí)也降低了了Api Gateway網(wǎng)關(guān)服務(wù)部署的靈活性呢?所以,這個(gè)時(shí)候Consul Template就橫空出世了!

Consul Template是做什么的?

說(shuō)了這么多,那么Consul Template到底是做什么的呢?根據(jù)官方說(shuō)明Consul Template比較關(guān)鍵的一個(gè)使用場(chǎng)景就是可以幫助我們獲取Consul集群中服務(wù)的列表以及服務(wù)的所有服務(wù)地址和端口。可能有同學(xué)會(huì)問(wèn),這不就是Consul本身支持的功能嗎?的確,沒(méi)啥毛病,Consul Template本身就是一個(gè)工具,其關(guān)鍵之處在于它通過(guò)這種方式可以很方便地與Nginx代理服務(wù)器集成。從而可以幫助Nginx動(dòng)態(tài)地根據(jù)Consul中的服務(wù)信息維護(hù)自身的服務(wù)列表,從而與整個(gè)Spring Cloud微服務(wù)體系形成聯(lián)動(dòng),實(shí)現(xiàn)端到端的高可用架構(gòu)體系。

此外,通過(guò)Consul Template我們也可以很容易地將微服務(wù)體系中的任何一個(gè)微服務(wù)透過(guò)Nginx使用公網(wǎng)域名進(jìn)行服務(wù)暴露。例如,隨著微服務(wù)邏輯從業(yè)務(wù)上逐步分層,這里所說(shuō)的分層是指這個(gè)微服務(wù)體系越來(lái)越大,應(yīng)用本身按照業(yè)務(wù)線會(huì)被劃分成多個(gè)子系統(tǒng),例如獨(dú)立于用戶(hù)C端微服務(wù)系統(tǒng),我們需要開(kāi)發(fā)一個(gè)To B的微服務(wù)組,而該微服務(wù)組由于功能上獨(dú)立于C端用戶(hù)系統(tǒng),所以我們并不想讓其調(diào)用鏈路透過(guò)C端Api Gateway,而是想直接將其微服務(wù)通過(guò)新域名暴露至公網(wǎng)服務(wù),供App端進(jìn)行調(diào)用。像這樣的需求,我們只需要使用Consul Template進(jìn)行一下配置,就能實(shí)現(xiàn)Nginx的動(dòng)態(tài)代理轉(zhuǎn)發(fā)了。這樣從架構(gòu)運(yùn)維體驗(yàn)上來(lái)講,使用Consul Template就會(huì)讓Spring Cloud微服務(wù)的部分運(yùn)維工作變得非常簡(jiǎn)單了。

Consul Template+Nginx實(shí)現(xiàn)微服務(wù)部署的高可用

那么接下來(lái),我們就來(lái)看看如何利用Consul Template+Nginx這樣的組合來(lái)實(shí)現(xiàn)Spring Cloud微服務(wù)部署的高可用吧。這里為了演示簡(jiǎn)單,小碼哥首先在自己的Mac筆記本上安裝一個(gè)單機(jī)版的Consul(Ps:真是的生產(chǎn)環(huán)境Consul是集群部署的),下載后將命令文件拷貝至相應(yīng)目錄,并啟動(dòng)Consul如下:

./consul?agent?-dev

此時(shí)訪問(wèn)本機(jī)的8500端口,例如:http://127.0.0.1:8500,就能夠看到Consul被成功啟動(dòng)來(lái),如圖所示:

Spring Cloud微服務(wù)運(yùn)維神器之Consul Template?

接下來(lái),我們從Consul Template官方地址:https://releases.hashicorp.com/consul-template/0.20.0/,下載Consul Template的可執(zhí)行文件。并將其解壓到/usr/local/bin/目錄即可,之后運(yùn)行:“consul-template -h”命令,如果能夠正常執(zhí)行則說(shuō)明Consul Template在本機(jī)就安裝成功了!,

之后作者在Mac筆記本上安裝一個(gè)Nginx反向代理服務(wù)器,下載地址為:http://nginx.org/en/download.html,之后將軟件安裝文件存放到主機(jī)用戶(hù)目錄并開(kāi)始執(zhí)行安裝命令,執(zhí)行如下步驟:

為安裝文件修改權(quán)限

chmod?a+rwx?*

執(zhí)行編譯命令

./configure?--without-http_rewrite_module

執(zhí)行安裝命令

make?&&?make?install

啟動(dòng)nginx

/usr/local/nginx/sbin/nginx

此時(shí)訪問(wèn)本機(jī)80端口http://localhost/,如果出現(xiàn)如下畫(huà)面:

Spring Cloud微服務(wù)運(yùn)維神器之Consul Template?

就說(shuō)明本機(jī)nginx服務(wù)安裝成功了!注意這里作者只是在自己的工作電腦上為了進(jìn)行演示而進(jìn)行的基本安裝操作,生產(chǎn)Linux環(huán)境的安裝方式還請(qǐng)大家參考其他更加細(xì)節(jié)的文章。

在準(zhǔn)備完Nginx、Consul及Consul Template之后,那么該如何進(jìn)行配置呢?此時(shí)作者基于Spring Cloud在本地開(kāi)發(fā)來(lái)一個(gè)微服務(wù),并且將該微服務(wù)注冊(cè)到本地剛才安裝的Consul中,這里作者啟動(dòng)兩個(gè)實(shí)例,如下:

Spring Cloud微服務(wù)運(yùn)維神器之Consul Template?

此時(shí),在Consul中就注冊(cè)了名叫wallet服務(wù)的兩個(gè)副本,接下來(lái)作者就通過(guò)Consul Template的配置模擬下通過(guò)Nginx反向代理域名訪問(wèn)wallet服務(wù)的接口,并實(shí)現(xiàn)負(fù)載均衡功能!

一般在正式的生產(chǎn)環(huán)境中域名會(huì)通過(guò)DNS解析到Nginx反向代理服務(wù)器中,這里為了模擬測(cè)試,我們?cè)贛ac筆記本的/private/etc/hosts文件中加一個(gè)模擬的域名映射,如下:

127.0.0.1??api.wudimanong.com

接下來(lái)我們創(chuàng)建一個(gè)consul-template文件模板consul-wallet.tpl,其中的內(nèi)容就是要把我們?cè)谇懊鎲?dòng)的wallet微服務(wù)通過(guò)Nginx暴露出去,內(nèi)容如下:

{{if service "wallet"}}
server {
    listen  80;
    server_name  ~^wallet\.(.+\.)?wudimanong\.(com|cn)$;
    access_log  /data/logs/nginx/wallet-access.log ;
    error_log  /data/logs/nginx/wallet-error.log ;

    client_max_body_size  1000m;

    location / {
        include proxy.conf;
        proxy_pass http://server-wallet;
    }
}

upstream server-wallet {
{{range service "wallet"}}  server {{.Address}}:{{.Port}};
{{end}}}
{{ end }}

以上文件模板的內(nèi)容基本上就是和Nginx的配置語(yǔ)法類(lèi)似,接下來(lái)我們啟動(dòng)Consul Template,命令如下:

sudo consul-template -consul-addr "127.0.0.1:8500" -template "/Users/guanliyuan/consul-wallet.tpl:/usr/local/nginx/conf.d/consul-wallet.conf:/usr/local/nginx/sbin/nginx -s reload" > /Users/guanliyuan/logs/wallet-template.log 2>&1 &

啟動(dòng)Consul Template之后我們可以查看通過(guò)Consul Template模版生成的Nginx配置文件“/../conf.d/consul-wallet.conf”,代碼如下:

server {
    listen  80;
    server_name  ~^wallet\.(.+\.)?wudimanong\.(com|cn)$;
    access_log  /data/logs/nginx/wallet-access.log ;
    error_log  /data/logs/nginx/wallet-error.log ;

    client_max_body_size  1000m;

    location / {
        include proxy.conf;
        proxy_pass http://server-wallet;
    }
}

upstream server-wallet {
  server 192.168.0.106:9090;
  server 192.168.0.106:9091;
}

可以看到Consul Template實(shí)際上是為Nginx動(dòng)態(tài)從Consul中獲取了服務(wù)的地址及端口列表,如果此時(shí)我們關(guān)掉wallet微服務(wù)的一個(gè)實(shí)例,相應(yīng)地我們就會(huì)從生成的Nginx配置中看到下線的實(shí)例的服務(wù)地址和端口就被剔除了,代碼如下:

server {
    listen  80;
    server_name  ~^wallet\.(.+\.)?wudimanong\.(com|cn)$;
    access_log  /data/logs/nginx/wallet-access.log ;
    error_log  /data/logs/nginx/wallet-error.log ;

    client_max_body_size  1000m;

    location / {
        include proxy.conf;
        proxy_pass http://server-wallet;
    }
}

upstream server-wallet {
  server 192.168.0.106:9091;
}

到這里大家應(yīng)該是比較清晰地理解Consul Template到底是個(gè)什么東西了。它實(shí)際上就是通過(guò)監(jiān)聽(tīng)Consul服務(wù),并依據(jù)模版中定義的服務(wù)名稱(chēng)去獲取服務(wù)在Consul中實(shí)例的地址及端口列表,然后動(dòng)態(tài)地將這些服務(wù)的地址及端口準(zhǔn)實(shí)時(shí)地同步到Nginx配置中。示意圖如下:

Spring Cloud微服務(wù)運(yùn)維神器之Consul Template?

此時(shí),在網(wǎng)絡(luò)域名正常的情況下我們通過(guò)域名訪問(wèn)wallet服務(wù)相關(guān)的接口了,并且已經(jīng)由Nginx為我們實(shí)現(xiàn)了負(fù)載均衡邏輯。與Spring Cloud內(nèi)部微服務(wù)通過(guò)Ribbon客戶(hù)端依賴(lài)實(shí)現(xiàn)負(fù)載均衡相配合,整個(gè)Spring Cloud的服務(wù)基本運(yùn)維邏輯就算實(shí)現(xiàn)了!


標(biāo)題名稱(chēng):SpringCloud微服務(wù)運(yùn)維神器之ConsulTemplate?
分享網(wǎng)址:http://weahome.cn/article/gopgii.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部