隨著云計(jì)算業(yè)務(wù)的快速發(fā)展,國(guó)內(nèi)外云計(jì)算企業(yè)的專利之爭(zhēng)也愈發(fā)激烈。在云計(jì)算這樣的技術(shù)領(lǐng)域,專利儲(chǔ)備往往代表著企業(yè)最新的技術(shù)實(shí)力。華云數(shù)據(jù)本期“智匯華云”專欄將針對(duì)“淺談微服務(wù)架構(gòu)之服務(wù)發(fā)現(xiàn)”技術(shù),與大家共同分享云計(jì)算領(lǐng)域的最新技術(shù)。
由于業(yè)務(wù)量大幅增長(zhǎng),華云數(shù)據(jù)決定對(duì)業(yè)務(wù)增長(zhǎng)導(dǎo)致不斷臃腫的單體應(yīng)用進(jìn)行重構(gòu),重構(gòu)后的應(yīng)用選擇微服務(wù)架構(gòu)。微服務(wù)架構(gòu)最大的優(yōu)勢(shì)是語(yǔ)言的開(kāi)放性,可以根據(jù)業(yè)務(wù)場(chǎng)景選擇最合適的語(yǔ)言。另外對(duì)于不止一個(gè)技術(shù)棧的公司組織架構(gòu),也能帶來(lái)很好的融合協(xié)作機(jī)會(huì)。華云數(shù)據(jù)的主要技術(shù)棧是JAVA,PHP。JAVA自不必多說(shuō),其微服務(wù)框架spring cloud對(duì)微服務(wù)有非常全面且完善的一條龍支持,簡(jiǎn)直是微服務(wù)架構(gòu)開(kāi)發(fā)的利器,而PHP則有所欠缺,特別是在服務(wù)治理部分。比如在做服務(wù)注冊(cè)、發(fā)現(xiàn)的時(shí)候比較痛苦。
我們的方案
1、為什么要使用服務(wù)發(fā)現(xiàn)
下圖1 ,是一個(gè)簡(jiǎn)單的高可用架構(gòu)圖,我們看到集群組部署有3個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)分別部署有一個(gè)服務(wù)A。在它前面有負(fù)載均衡,以nginx做負(fù)載均衡為例,我們會(huì)在配置文件手動(dòng)配置上這3個(gè)節(jié)點(diǎn)的服務(wù)A的地址,根據(jù)負(fù)載策略做轉(zhuǎn)發(fā)。
圖1
這是傳統(tǒng)上比較常用的方式。服務(wù)的地址是固定不變的。那么如果服務(wù)的地址彈性伸縮,是可變的又如何呢?如下圖2。
圖2
與傳統(tǒng)方式不同的是,服務(wù)的地址是彈性伸縮,是可變的。這種彈性帶來(lái)最大的好處是服務(wù)可以根據(jù)流量、根據(jù)CPU、內(nèi)存等開(kāi)銷,依據(jù)一定的策略,橫向擴(kuò)展或減少服務(wù)實(shí)例。除了能支撐大量的峰值訪問(wèn),還能帶來(lái)非常大的成本節(jié)約。另外特別說(shuō)下,docker及其衍生出來(lái)的Kubernates之類的軟件或解決方案,使得這種資源調(diào)度,彈性伸縮,架構(gòu)監(jiān)控等有了很好的基礎(chǔ)層保證?;剡^(guò)頭來(lái)說(shuō),既然服務(wù)地址可變,那么人工配置的方式肯定不行,我們需要一種自動(dòng)發(fā)現(xiàn)服務(wù)地址變更的機(jī)制。
2、服務(wù)發(fā)現(xiàn)的機(jī)制及發(fā)現(xiàn)方式
這種機(jī)制即服務(wù)發(fā)現(xiàn),也是微服務(wù)架構(gòu)最常使用的技術(shù)棧。如下圖 3,我們引入一個(gè)注冊(cè)中心。服務(wù)實(shí)例在啟動(dòng)的時(shí)候自動(dòng)把地址注冊(cè)到注冊(cè)中心,在訪問(wèn)相應(yīng)服務(wù)的時(shí)候,先通過(guò)注冊(cè)中心拿到待訪問(wèn)服務(wù)實(shí)例的地址,然后依據(jù)一定的策略訪問(wèn)即可。
圖3
好處主要有兩點(diǎn):
1、解決上述說(shuō)的服務(wù)地址變化的問(wèn)題;
2、注冊(cè)中心能夠監(jiān)測(cè)相應(yīng)服務(wù)的狀態(tài),有了它,我們就能知道微服務(wù)架構(gòu)中有多少個(gè)服務(wù),版本是什么,每個(gè)服務(wù)的實(shí)例數(shù)有多少,狀態(tài)如何。
服務(wù)發(fā)現(xiàn)有兩種方式:
2.1服務(wù)端發(fā)現(xiàn)
1)服務(wù)實(shí)例啟動(dòng)時(shí)自動(dòng)發(fā)布地址到注冊(cè)中心。
2)客戶端/服務(wù)端在調(diào)用某個(gè)服務(wù)時(shí),帶著服務(wù)名調(diào)用負(fù)載均衡器,負(fù)載均衡器接收到請(qǐng)求,從注冊(cè)中心拿到服務(wù)地址(有多個(gè)),根據(jù)負(fù)載策略訪問(wèn)某一個(gè)特定的服務(wù)。
這種方式最大的好處就是由服務(wù)端實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)及負(fù)載,客戶端完全不用做額外的事情,非常推薦使用此方式。如下圖4。
圖4
2.2客戶端發(fā)現(xiàn)
從下圖5可以看到,跟服務(wù)端發(fā)現(xiàn)不同的地方是,待訪問(wèn)服務(wù)的地址由客戶端從注冊(cè)中心獲取,并且客戶端需要實(shí)現(xiàn)負(fù)載(比如待訪問(wèn)的服務(wù)地址有3個(gè),那么客戶端需要依據(jù)一定的負(fù)載策略,找出其中一個(gè)地址進(jìn)行訪問(wèn))。
圖5
這種方式最大的特點(diǎn)就是靈活,客戶端或者微服務(wù)可以根據(jù)自己的業(yè)務(wù)場(chǎng)景選擇最佳的負(fù)載策略,但是缺點(diǎn)也是顯而易見(jiàn)的,客戶端或微服務(wù)需要考慮負(fù)載。這在JAVA沒(méi)問(wèn)題,它的spring cloud框架很強(qiáng)大,可以支持,不過(guò)PHP及其它語(yǔ)言就會(huì)很痛苦,所以個(gè)人推薦使用服務(wù)端發(fā)現(xiàn)的方式。
如下圖6方式,服務(wù)端發(fā)現(xiàn)可使用consul template+nginx
圖6
3、工具介紹及總結(jié)
Netflix OSS 是典型的客戶端發(fā)現(xiàn)范例;Netflix Eureka 是服務(wù)注冊(cè)表,Netflix Ribbon是IPC客戶端,與Eureka一起實(shí)現(xiàn)CLB。對(duì)docker無(wú)明確支持
Consul 是典型的服務(wù)端發(fā)現(xiàn)范例;通過(guò)consul template監(jiān)聽(tīng)consul中服務(wù)地址的變動(dòng),自動(dòng)生成或更新nginx.conf,并生效配置。對(duì)docker有很好的支持
微服務(wù)架構(gòu)的性質(zhì)決定了它的復(fù)雜性,存在成百上千個(gè)微服務(wù),而每個(gè)微服務(wù)又可能分布在多個(gè)不同節(jié)點(diǎn),所以全棧監(jiān)控很重要,而服務(wù)發(fā)現(xiàn)則是其中很重要的一環(huán)。通過(guò)它,我們就知道整個(gè)系統(tǒng)有多少個(gè)微服務(wù),版本是什么,每個(gè)服務(wù)的實(shí)例數(shù)有多少,狀態(tài)如何。而這些又是一個(gè)完整自動(dòng)化運(yùn)維架構(gòu)的基礎(chǔ),發(fā)揮微服務(wù)架構(gòu)最大的價(jià)值非常重要,大大減少運(yùn)維人員在部署、問(wèn)題排查上冗余工作,大幅提升工作效率。
- 特斯拉Model Y新版預(yù)售,iPhone 18 Pro系列升級(jí),汽車界與科技界碰撞新火花
- 小鵬汽車何小鵬回應(yīng)特斯拉 Model Y 撞臉風(fēng)波:設(shè)計(jì)碰撞,靈感碰撞,究竟誰(shuí)更勝一籌?
- 日本車商2024年新車銷量下滑,本田跌至近10年最低位,中國(guó)市場(chǎng)面臨挑戰(zhàn)?
- 英偉達(dá)批評(píng)美政府AI芯片出口限制:限制不利己,全球轉(zhuǎn)向替代技術(shù)之風(fēng)
- 特斯拉煥新Model Y難敵華為問(wèn)界R7,智能科技誰(shuí)領(lǐng)風(fēng)騷?
- 開(kāi)源巨頭聯(lián)手打造Chromium聯(lián)盟,推動(dòng)Linux生態(tài)創(chuàng)新發(fā)展
- 曹德旺巨資辦校,福耀科技大學(xué)引領(lǐng)行業(yè)新風(fēng)向,培養(yǎng)未來(lái)之星
- 愛(ài)馳汽車陷股權(quán)凍結(jié)風(fēng)波,能否順利復(fù)工復(fù)產(chǎn)引關(guān)注
- 小鵬汽車CEO何小鵬:雷軍不僅直言不諱,還勸我多做營(yíng)銷,不失為良師益友
- 馬斯克大膽計(jì)劃:未來(lái)十年內(nèi)特斯拉機(jī)器人產(chǎn)能提升10倍,300億機(jī)器人將顛覆各行各業(yè)
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。