你是否曾想過(guò)宵蛀,什么是微服務(wù)?以及大規(guī)模的互聯(lián)網(wǎng)行業(yè)凑懂,例如社交梧宫,電商,物流脓豪,金融等領(lǐng)域扫夜,如何使用微服務(wù)構(gòu)建互聯(lián)網(wǎng)應(yīng)用以滿足用戶需求驰徊。
要了解微服務(wù)是什么,你必須了解如何將單體應(yīng)用程序望侈,拆解為獨(dú)立打包和部署的微型應(yīng)用程序。本文章將幫助你清晰化的理解侥猬,開(kāi)發(fā)者如何根據(jù)需求使用微服務(wù)來(lái)構(gòu)建他們的應(yīng)用程序。
下面鹃锈,從以下幾個(gè)維度進(jìn)行闡述
為何選擇微服務(wù)屎债??
什么是微服務(wù)??
微服務(wù)架構(gòu)的功能
微服務(wù)架構(gòu)的優(yōu)點(diǎn)?
設(shè)計(jì)微服務(wù)的最佳實(shí)踐?
1盆驹,為何選擇微服務(wù)躯喇??
現(xiàn)在,在我介紹微服務(wù)之前倦微,讓我們看看在微服務(wù)之前流行的架構(gòu)正压,即單體架構(gòu)。
通俗地說(shuō)拓劝,您可以說(shuō)它類似于一個(gè)大容器凿将,在這個(gè)容器中价脾,應(yīng)用程序的所有軟件組件被緊密地打包并部署在一起。
羅列一下單片架構(gòu)的挑戰(zhàn):
不靈活?- 單片應(yīng)用程序無(wú)法使用不同的技術(shù)構(gòu)建
不可靠?- 即使系統(tǒng)的某個(gè)功能不起作用犀变,整個(gè)系統(tǒng)也不起作用
不可擴(kuò)展?- 由于每次需要更新應(yīng)用程序時(shí)都無(wú)法輕松擴(kuò)展應(yīng)用程序获枝,因此必須重建整個(gè)系統(tǒng)
妨礙持續(xù)開(kāi)發(fā)?- 無(wú)法同時(shí)構(gòu)建和部署應(yīng)用程序的多個(gè)功能
緩慢的開(kāi)發(fā)?- 單體應(yīng)用程序的開(kāi)發(fā)需要花費(fèi)大量的時(shí)間來(lái)構(gòu)建省店,因?yàn)槊總€(gè)功能都必須一個(gè)接一個(gè)地構(gòu)建
不適合復(fù)雜的應(yīng)用程序?- 復(fù)雜應(yīng)用程序的功能具有緊密耦合的依賴關(guān)系
上述挑戰(zhàn)是導(dǎo)致微服務(wù)發(fā)展的主要原因笨触。
2芦劣,什么是微服務(wù)??
微服務(wù)寸认,又稱微服務(wù)架構(gòu),是一種架構(gòu)風(fēng)格偏塞,它將應(yīng)用程序構(gòu)建為以業(yè)務(wù)領(lǐng)域?yàn)槟P偷男⌒妥灾畏?wù)集合烛愧。
在微服務(wù)架構(gòu)中,每個(gè)服務(wù)都是獨(dú)立的慎冤,并實(shí)現(xiàn)單一業(yè)務(wù)功能蚁堤。
傳統(tǒng)架構(gòu)與微服務(wù)架構(gòu)之間的差異
以電子商務(wù)網(wǎng)站為例但狭,了解它們之間的差異。
我們?cè)谏蠄D中觀察到的主要區(qū)別是呈队,所有功能最初都在共享單個(gè)數(shù)據(jù)庫(kù)的單個(gè)實(shí)例下宪摧。 但是颅崩,通過(guò)微服務(wù),每個(gè)功能都被分配了不同的微服務(wù)沿彭,處理自己的數(shù)據(jù)喉刘,并執(zhí)行不同的功能漆弄。
現(xiàn)在,讓我們通過(guò)查看其架構(gòu)來(lái)了解有關(guān)微服務(wù)的更多信息。請(qǐng)參考下圖:
微服務(wù)架構(gòu)
1券坞,來(lái)自不同設(shè)備的不同客戶端嘗試使用不同的服務(wù),如搜索恨锚,構(gòu)建猴伶,配置和其他管理功能
2,所有服務(wù)都根據(jù)其域和功能分開(kāi)筝尾,并進(jìn)一步切分成各個(gè)微服務(wù)
3办桨,這些微服務(wù)有自己的負(fù)載均衡器和執(zhí)行環(huán)境來(lái)執(zhí)行它們的功能,同時(shí)在自己的數(shù)據(jù)庫(kù)中捕獲數(shù)據(jù)
4损姜,所有微服務(wù)都通過(guò)無(wú)狀態(tài)服務(wù)器(REST或消息隊(duì)列)相互通信
5摧阅,微服務(wù)在服務(wù)發(fā)現(xiàn)中心的幫助下獲取其通信路徑绷蹲,并執(zhí)行自動(dòng)化,監(jiān)控等操作功能
6娇跟,然后太颤,微服務(wù)執(zhí)行的所有功能都通過(guò)API網(wǎng)關(guān)傳達(dá)給客戶端
7龄章,所有內(nèi)部點(diǎn)都從API網(wǎng)關(guān)連接。因此岗憋,任何連接到API網(wǎng)關(guān)的人都會(huì)自動(dòng)連接到整個(gè)系統(tǒng)
現(xiàn)在锚贱,讓我們通過(guò)查看其功能來(lái)了解有關(guān)微服務(wù)的更多信息。
3监徘,微服務(wù)功能?
解耦 -?系統(tǒng)內(nèi)的服務(wù)很大程度上是分離的凰盔。因此,整個(gè)應(yīng)用程序可以輕松構(gòu)建落剪,更改和擴(kuò)展
組件化 -?微服務(wù)被視為可以輕松更換和升級(jí)的獨(dú)立組件
業(yè)務(wù)能力 -?微服務(wù)非常簡(jiǎn)單尿庐,專注于單一功能
自治 -?開(kāi)發(fā)人員和團(tuán)隊(duì)可以彼此獨(dú)立工作,從而提高速度
持續(xù)交付 -?通過(guò)軟件創(chuàng)建脑又,測(cè)試和審批的系統(tǒng)自動(dòng)化锐借,允許頻繁發(fā)布軟件
職責(zé) -?微服務(wù)不關(guān)注作為項(xiàng)目的應(yīng)用程序。相反严卖,他們將應(yīng)用程序視為他們負(fù)責(zé)的產(chǎn)品
分散治理 -?重點(diǎn)是使用正確的工具來(lái)做正確的工作布轿。這意味著沒(méi)有標(biāo)準(zhǔn)化模式或任何技術(shù)模式。開(kāi)發(fā)人員可以自由選擇最有用的工具來(lái)解決他們的問(wèn)題
敏捷 -?微服務(wù)支持敏捷開(kāi)發(fā)稠肘。任何新功能都可以快速開(kāi)發(fā)并再次丟棄萝毛。
4,微服務(wù)的優(yōu)點(diǎn)?
獨(dú)立開(kāi)發(fā) -?所有微服務(wù)都可以根據(jù)各自的功能輕松開(kāi)發(fā)
獨(dú)立部署 -?基于其服務(wù)环揽,可以在任何應(yīng)用程序中單獨(dú)部署它們
故障隔離 -?即使應(yīng)用程序的一項(xiàng)服務(wù)不起作用庵佣,系統(tǒng)仍可繼續(xù)運(yùn)行
混合技術(shù)堆棧 -?可以使用不同的語(yǔ)言和技術(shù)來(lái)構(gòu)建同一應(yīng)用程序的不同服務(wù)
粒度縮放 -?單個(gè)組件可根據(jù)需要進(jìn)行部署節(jié)點(diǎn)縮放,無(wú)需將所有組件部署縮放在一起
5通今,設(shè)計(jì)微服務(wù)的最佳實(shí)踐
在當(dāng)今世界,復(fù)雜性已經(jīng)蔓延到互聯(lián)網(wǎng)的每個(gè)產(chǎn)品當(dāng)中帝嗡。微服務(wù)架構(gòu)有望保持團(tuán)隊(duì)規(guī)模和功能更好璃氢。
現(xiàn)在一也,讓我們看一個(gè)案列來(lái)更好地理解微服務(wù)喉脖。
案例:購(gòu)物網(wǎng)站
當(dāng)您打開(kāi)購(gòu)物網(wǎng)站時(shí),您看到的只是一個(gè)購(gòu)買頁(yè)面舆蝴。但是题诵,在幕后,購(gòu)物網(wǎng)站具有接受付款的服務(wù)赠潦,用于客戶咨詢的服務(wù)等
假設(shè)此網(wǎng)站的開(kāi)發(fā)人員已在單一框架中創(chuàng)建它草冈。請(qǐng)參閱下圖:
因此怎棱,所有功能都放在一個(gè)代碼庫(kù)中,并且位于單個(gè)底層數(shù)據(jù)庫(kù)下凡资。
現(xiàn)在诅岩,讓我們假設(shè)市場(chǎng)上出現(xiàn)了一個(gè)新的品牌,開(kāi)發(fā)商希望將即將到來(lái)的品牌所有細(xì)節(jié)都放在這個(gè)網(wǎng)站中鸳谜,原有的數(shù)據(jù)庫(kù)結(jié)構(gòu)和UI展示已經(jīng)無(wú)法滿足咐扭。
然后,他們不僅需要為新標(biāo)簽重做服務(wù)蝗肪,而且還必須重新構(gòu)建整個(gè)系統(tǒng)并相應(yīng)地進(jìn)行部署薛闪。
為避免此類挑戰(zhàn),購(gòu)物網(wǎng)站的開(kāi)發(fā)人員決定將其應(yīng)用程序從單片架構(gòu)轉(zhuǎn)移到微服務(wù)豁延。請(qǐng)參閱下圖了解購(gòu)物網(wǎng)站的微服務(wù)架構(gòu)诱咏。
這意味著開(kāi)發(fā)人員不會(huì)創(chuàng)建Web微服務(wù)袋狞,邏輯微服務(wù)或數(shù)據(jù)庫(kù)微服務(wù)。相反苟鸯,他們?yōu)樗阉鳎扑]倔毙,客戶服務(wù)等創(chuàng)建單獨(dú)的微服務(wù)陕赃。
這種類型的應(yīng)用程序架構(gòu)不僅可以幫助開(kāi)發(fā)人員克服以前架構(gòu)所面臨的所有挑戰(zhàn),還可以幫助輕松構(gòu)建傻丝,部署和擴(kuò)展購(gòu)物車應(yīng)用程序诉儒。
通過(guò)上述案列,我們可以總結(jié)出來(lái)泛释,設(shè)計(jì)微服務(wù)的最佳實(shí)踐:
1怜校,為每個(gè)微服務(wù)分別存儲(chǔ)數(shù)據(jù)
2注竿,將代碼保持在類似的成熟度級(jí)別
3魂贬,為每個(gè)微服務(wù)單獨(dú)構(gòu)建
4付燥,部署到容器
5愈犹,將服務(wù)設(shè)計(jì)為無(wú)狀態(tài)服務(wù)
在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流群漩怎。交流學(xué)習(xí)群號(hào)874811168 里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析酸钦,高并發(fā)、高性能徒恋、分布式入挣、微服務(wù)架構(gòu)的原理硝拧,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系滋恬。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源抱究,目前受益良多