|
你是否曾想過,什么是微服務(wù)?以及大規(guī)模的互聯(lián)網(wǎng)行業(yè),例如社交,電商,物流,金融等領(lǐng)域,如何使用微服務(wù)構(gòu)建互聯(lián)網(wǎng)應(yīng)用以滿足用戶需求。 要了解微服務(wù)是什么,你必須了解如何將單體應(yīng)用程序,拆解為獨立打包和部署的微型應(yīng)用程序。本文章將幫助你清晰化的理解,開發(fā)者如何根據(jù)需求使用微服務(wù)來構(gòu)建他們的應(yīng)用程序。 本文將從以下幾個維度進行闡述 為何選擇微服務(wù)? 什么是微服務(wù)? 微服務(wù)架構(gòu)的功能 微服務(wù)架構(gòu)的優(yōu)點 設(shè)計微服務(wù)的最佳實踐 1,為何選擇微服務(wù)? 現(xiàn)在,在我介紹微服務(wù)之前,讓我們看看在微服務(wù)之前流行的架構(gòu),即單體架構(gòu)。 通俗地說,您可以說它類似于一個大容器,在這個容器中,應(yīng)用程序的所有軟件組件被緊密地打包并部署在一起。 羅列一下單片架構(gòu)的挑戰(zhàn): 不靈活 - 單片應(yīng)用程序無法使用不同的技術(shù)構(gòu)建 不可靠 - 即使系統(tǒng)的某個功能不起作用,整個系統(tǒng)也不起作用 不可擴展 - 由于每次需要更新應(yīng)用程序時都無法輕松擴展應(yīng)用程序,因此必須重建整個系統(tǒng) 妨礙持續(xù)開發(fā) - 無法同時構(gòu)建和部署應(yīng)用程序的多個功能 緩慢的開發(fā) - 單體應(yīng)用程序的開發(fā)需要花費大量的時間來構(gòu)建,因為每個功能都必須一個接一個地構(gòu)建 不適合復(fù)雜的應(yīng)用程序 - 復(fù)雜應(yīng)用程序的功能具有緊密耦合的依賴關(guān)系 上述挑戰(zhàn)是導(dǎo)致微服務(wù)發(fā)展的主要原因。 微服務(wù),又稱微服務(wù)架構(gòu),是一種架構(gòu)風格,它將應(yīng)用程序構(gòu)建為以業(yè)務(wù)領(lǐng)域為模型的小型自治服務(wù)集合。 在微服務(wù)架構(gòu)中,每個服務(wù)都是獨立的,并實現(xiàn)單一業(yè)務(wù)功能。 傳統(tǒng)架構(gòu)與微服務(wù)架構(gòu)之間的差異 以電子商務(wù)網(wǎng)站為例,了解它們之間的差異。 我們在上圖中觀察到的主要區(qū)別是,所有功能最初都在共享單個數(shù)據(jù)庫的單個實例下。 但是,通過微服務(wù),每個功能都被分配了不同的微服務(wù),處理自己的數(shù)據(jù),并執(zhí)行不同的功能。 現(xiàn)在,讓我們通過查看其架構(gòu)來了解有關(guān)微服務(wù)的更多信息。請參考下圖: 微服務(wù)架構(gòu) 1,來自不同設(shè)備的不同客戶端嘗試使用不同的服務(wù),如搜索,構(gòu)建,配置和其他管理功能 2,所有服務(wù)都根據(jù)其域和功能分開,并進一步切分成各個微服務(wù) 3,這些微服務(wù)有自己的負載均衡器和執(zhí)行環(huán)境來執(zhí)行它們的功能,同時在自己的數(shù)據(jù)庫中捕獲數(shù)據(jù) 4,所有微服務(wù)都通過無狀態(tài)服務(wù)器(REST或消息隊列)相互通信 5,微服務(wù)在服務(wù)發(fā)現(xiàn)中心的幫助下獲取其通信路徑,并執(zhí)行自動化,監(jiān)控等操作功能 6,然后,微服務(wù)執(zhí)行的所有功能都通過API網(wǎng)關(guān)傳達給客戶端 7,所有內(nèi)部點都從API網(wǎng)關(guān)連接。因此,任何連接到API網(wǎng)關(guān)的人都會自動連接到整個系統(tǒng) 現(xiàn)在,讓我們通過查看其功能來了解有關(guān)微服務(wù)的更多信息。 解耦 - 系統(tǒng)內(nèi)的服務(wù)很大程度上是分離的。因此,整個應(yīng)用程序可以輕松構(gòu)建,更改和擴展 組件化 - 微服務(wù)被視為可以輕松更換和升級的獨立組件 業(yè)務(wù)能力 - 微服務(wù)非常簡單,專注于單一功能 自治 - 開發(fā)人員和團隊可以彼此獨立工作,從而提高速度 持續(xù)交付 - 通過軟件創(chuàng)建,測試和審批的系統(tǒng)自動化,允許頻繁發(fā)布軟件 職責 - 微服務(wù)不關(guān)注作為項目的應(yīng)用程序。相反,他們將應(yīng)用程序視為他們負責的產(chǎn)品 分散治理 - 重點是使用正確的工具來做正確的工作。這意味著沒有標準化模式或任何技術(shù)模式。開發(fā)人員可以自由選擇最有用的工具來解決他們的問題 敏捷 - 微服務(wù)支持敏捷開發(fā)。任何新功能都可以快速開發(fā)并再次丟棄。 獨立開發(fā) - 所有微服務(wù)都可以根據(jù)各自的功能輕松開發(fā) 獨立部署 - 基于其服務(wù),可以在任何應(yīng)用程序中單獨部署它們 故障隔離 - 即使應(yīng)用程序的一項服務(wù)不起作用,系統(tǒng)仍可繼續(xù)運行 混合技術(shù)堆棧 - 可以使用不同的語言和技術(shù)來構(gòu)建同一應(yīng)用程序的不同服務(wù) 粒度縮放 - 單個組件可根據(jù)需要進行部署節(jié)點縮放,無需將所有組件部署縮放在一起 在當今世界,復(fù)雜性已經(jīng)蔓延到互聯(lián)網(wǎng)的每個產(chǎn)品當中。微服務(wù)架構(gòu)有望保持團隊規(guī)模和功能更好。 現(xiàn)在,讓我們看一個案列來更好地理解微服務(wù)。 案例:購物網(wǎng)站 當您打開購物網(wǎng)站時,您看到的只是一個購買頁面。但是,在幕后,購物網(wǎng)站具有接受付款的服務(wù),用于客戶咨詢的服務(wù)等。 假設(shè)此網(wǎng)站的開發(fā)人員已在單一框架中創(chuàng)建它。請參閱下圖: 因此,所有功能都放在一個代碼庫中,并且位于單個底層數(shù)據(jù)庫下。 現(xiàn)在,讓我們假設(shè)市場上出現(xiàn)了一個新的品牌,開發(fā)商希望將即將到來的品牌所有細節(jié)都放在這個網(wǎng)站中,原有的數(shù)據(jù)庫結(jié)構(gòu)和UI展示已經(jīng)無法滿足。 然后,他們不僅需要為新標簽重做服務(wù),而且還必須重新構(gòu)建整個系統(tǒng)并相應(yīng)地進行部署。 為避免此類挑戰(zhàn),購物網(wǎng)站的開發(fā)人員決定將其應(yīng)用程序從單片架構(gòu)轉(zhuǎn)移到微服務(wù)。請參閱下圖了解購物網(wǎng)站的微服務(wù)架構(gòu)。 這意味著開發(fā)人員不會創(chuàng)建Web微服務(wù),邏輯微服務(wù)或數(shù)據(jù)庫微服務(wù)。相反,他們?yōu)樗阉?,推薦,客戶服務(wù)等創(chuàng)建單獨的微服務(wù)。 這種類型的應(yīng)用程序架構(gòu)不僅可以幫助開發(fā)人員克服以前架構(gòu)所面臨的所有挑戰(zhàn),還可以幫助輕松構(gòu)建,部署和擴展購物車應(yīng)用程序。 通過上述案列,我們可以總結(jié)出來,設(shè)計微服務(wù)的最佳實踐: 1,為每個微服務(wù)分別存儲數(shù)據(jù) 2,將代碼保持在類似的成熟度級別 3,為每個微服務(wù)單獨構(gòu)建 4,部署到容器 5,將服務(wù)設(shè)計為無狀態(tài)服務(wù) 陛下...看完奏折,點個贊再走吧!
|
|
|
來自: 萬皇之皇 > 《IT互聯(lián)》