微服務(wù)架構(gòu)不是銀彈,在微服務(wù)架構(gòu)中,我們將面臨很多新的問(wèn)題,這時(shí)候勢(shì)必會(huì)引入一個(gè)服務(wù)注冊(cè)發(fā)現(xiàn)問(wèn)題。中培偉業(yè)《微服務(wù)架構(gòu)設(shè)計(jì)與最佳實(shí)踐培訓(xùn)》培訓(xùn)專(zhuān)家程老師在這里就根據(jù)負(fù)載均衡位置的不同,三種主要的服務(wù)注冊(cè)與發(fā)現(xiàn)和負(fù)載均衡方案進(jìn)行了詳細(xì)介紹。
1.微服務(wù)架構(gòu)下服務(wù)注冊(cè)與發(fā)現(xiàn)機(jī)制
隨著微服務(wù)架構(gòu)深入人心,越來(lái)越多的企業(yè)將微服務(wù)架構(gòu)付諸實(shí)踐。相比于傳統(tǒng)的單體應(yīng)用架構(gòu),微服務(wù)架構(gòu)有著得天獨(dú)厚的優(yōu)勢(shì);在傳統(tǒng)的單體應(yīng)用架構(gòu)下,因?yàn)楣δ芗校a中心化,一個(gè)發(fā)布包部署發(fā)布在一個(gè)進(jìn)程的應(yīng)用程序中,單體應(yīng)用架構(gòu)已經(jīng)無(wú)法滿(mǎn)足企業(yè)業(yè)務(wù)快速變化的需求。
一方面,代碼維護(hù)困難,擴(kuò)展性較差,靈活性較低,另一方面,系統(tǒng)的修改成本,維護(hù)成本在增加以及構(gòu)建時(shí)間,發(fā)布周期很長(zhǎng)。而微服務(wù)架構(gòu),因?yàn)榉?wù)之間獨(dú)立部署,每個(gè)服務(wù)在開(kāi)發(fā),測(cè)試,部署的時(shí)候,無(wú)論是開(kāi)發(fā)周期還是難易程度,都比單塊應(yīng)用要好。
然而,微服務(wù)架構(gòu)不是銀彈, 在微服務(wù)架構(gòu)中,會(huì)面臨很多新的問(wèn)題,微服務(wù)架構(gòu)由一組小的服務(wù)組成,服務(wù)之間采用輕量級(jí)的通訊機(jī)制進(jìn)行溝通,微服務(wù)之間調(diào)用關(guān)系是一個(gè)網(wǎng)狀結(jié)構(gòu),一個(gè)微服務(wù)在調(diào)用另一個(gè)微服務(wù)的時(shí)候,無(wú)法知道另一個(gè)微服務(wù)的具體地址;由于每個(gè)服務(wù)屬于”微”服務(wù),每個(gè)服務(wù)生命周期不長(zhǎng),每個(gè)服務(wù)可能隨時(shí)被關(guān)閉、重啟、替換;在隨著訪問(wèn)量增加的時(shí)候,微服務(wù)需要擴(kuò)容,訪問(wèn)量減少時(shí),微服務(wù)需要縮容;這樣就導(dǎo)致每個(gè)微服務(wù)的地址在動(dòng)態(tài)變化,這時(shí)候必然引入一個(gè)服務(wù)注冊(cè)發(fā)現(xiàn)問(wèn)題,也就是說(shuō)客戶(hù)端在調(diào)用的時(shí)候,需要知道服務(wù)端的地址,服務(wù)端在提供服務(wù)的時(shí)候,需要注冊(cè)通告自己的地址,供客戶(hù)端調(diào)用;同時(shí)服務(wù)端一般存在多個(gè)實(shí)例來(lái)提供服務(wù),這就要求需要引入負(fù)載均衡的能力,隨著負(fù)載均衡位置的不同,主要的服務(wù)注冊(cè)與發(fā)現(xiàn)和負(fù)載均衡方案有三種。
2.常見(jiàn)的服務(wù)注冊(cè)與發(fā)現(xiàn)的方案
1).集中式負(fù)載均衡方案
集中式負(fù)載均衡也叫服務(wù)端負(fù)載均衡,負(fù)載均衡器在一臺(tái)單獨(dú)的主機(jī)上,可以采用軟負(fù)載,如nginxapache等,也可以采用硬負(fù)載,如F5等,它負(fù)責(zé)多實(shí)例服務(wù)的負(fù)載均衡,客戶(hù)端直接通過(guò)域名訪問(wèn)負(fù)載均衡器,DNS服務(wù)器將域名解析到負(fù)載均衡器IP上:
該方案實(shí)現(xiàn)較為簡(jiǎn)單,仍是業(yè)界的主流,可以充分利用負(fù)載均衡器的能力,根據(jù)不同的負(fù)載策略將請(qǐng)求分發(fā)到后面的服務(wù)實(shí)例上;同時(shí),該方案缺點(diǎn)也很明顯,負(fù)載均衡器存在單點(diǎn)問(wèn)題,所有的流量都需要通過(guò)負(fù)載均衡器,如果負(fù)載均衡器存在問(wèn)題,則直接導(dǎo)致服務(wù)不能正常提供服務(wù);中間經(jīng)過(guò)負(fù)載均衡器做代理,性能也有一定損耗。
2).客戶(hù)端負(fù)載均衡方案
客戶(hù)端負(fù)載針對(duì)服務(wù)端負(fù)載的缺點(diǎn),做了一定的改進(jìn),負(fù)載能力由客戶(hù)端進(jìn)程提供,服務(wù)端實(shí)例注冊(cè)自己的地址到注冊(cè)中心,客戶(hù)端從注冊(cè)中心訂閱服務(wù)提供者的地址,獲取地址后,根據(jù)負(fù)載均衡實(shí)現(xiàn)策略進(jìn)行服務(wù)路由。
該方案在解決了服務(wù)端負(fù)載的單點(diǎn)問(wèn)題,每個(gè)客戶(hù)端都實(shí)現(xiàn)了自己的負(fù)載功能,負(fù)載能力和客戶(hù)端進(jìn)程在一起,和客戶(hù)端的生命周期一致,如果負(fù)載均衡進(jìn)程down了,則客戶(hù)端也down了,而且只影響本身客戶(hù)端,不會(huì)影響其他客戶(hù)端;同時(shí),該方案也有一定的缺點(diǎn),負(fù)載要求每個(gè)客戶(hù)端自己實(shí)現(xiàn),如果不同的技術(shù)棧,每個(gè)客戶(hù)端則需要使用不同的語(yǔ)言實(shí)現(xiàn)自己的負(fù)載能力,技術(shù)難度較大;業(yè)界的motandubbo采用此方案做服務(wù)注冊(cè)與發(fā)現(xiàn)。
3).客戶(hù)端主機(jī)獨(dú)立負(fù)載均衡方案
第三種方案綜合了前2個(gè)方案的優(yōu)缺點(diǎn),服務(wù)發(fā)現(xiàn)和負(fù)載的能力從客戶(hù)端進(jìn)程移出,客戶(hù)端進(jìn)程和負(fù)載均衡進(jìn)程是個(gè)獨(dú)立的進(jìn)程,在同一個(gè)主機(jī)上;服務(wù)實(shí)例還是在啟動(dòng)的時(shí)候注冊(cè)自己的地址到注冊(cè)中心,客戶(hù)端直接發(fā)送請(qǐng)求給本機(jī)的負(fù)載均衡器。
該方案是一個(gè)典型的分布式方案,沒(méi)有單點(diǎn)問(wèn)題,如果一個(gè)主機(jī)的負(fù)載均衡器出問(wèn)題,只影響一個(gè)節(jié)點(diǎn)調(diào)用,不影響其他的節(jié)點(diǎn),負(fù)載均衡器本身負(fù)載也較小,性能損耗較低;同時(shí)也不需要多種語(yǔ)言實(shí)現(xiàn)自己的負(fù)載能力,負(fù)載能力是公用的;但是該方案部署復(fù)雜,維護(hù)困難,出了異常之后,調(diào)試負(fù)載,定位問(wèn)題都比較麻煩。
3.新一代的選擇
對(duì)于服務(wù)注冊(cè)與發(fā)現(xiàn),在普元新一代數(shù)字化企業(yè)云平臺(tái)中,可以選擇DevOps這條路來(lái)實(shí)現(xiàn)我們理想的運(yùn)營(yíng),同時(shí)以微服務(wù)架構(gòu)為核心。