
微服務(wù)架構(gòu)是一種架構(gòu)風(fēng)格,一個大型復(fù)雜軟件應(yīng)用由多個微服務(wù)架構(gòu)組成。系統(tǒng)中的各個微服務(wù)架構(gòu)可被獨立部署,各個微服務(wù)架構(gòu)之間是松耦合的。每個微服務(wù)架構(gòu)僅關(guān)注于完成一項任務(wù)并很好地完成該任務(wù)。在所有情況下,每項任務(wù)代表著一個小的業(yè)務(wù)能力。
隨著人們轉(zhuǎn)向云原生策略,我們需要一個支持它的架構(gòu)。作為面向服務(wù)架構(gòu)的一種變體,微服務(wù)架構(gòu)有助于數(shù)字世界中的服務(wù)多樣化。
企業(yè)不能忽視的 3 大微服務(wù)架構(gòu)優(yōu)勢
1.微服務(wù)架構(gòu)的自動化部署
微服務(wù)架構(gòu)中,系統(tǒng)會被拆分為若干個微服務(wù)架構(gòu),每個微服務(wù)架構(gòu)又是一個獨立的應(yīng)用程序。單體架構(gòu)中的應(yīng)用程序只需要部署一次,而微服務(wù)架構(gòu)中有多少服務(wù)就需要部署多少次。隨著服務(wù)數(shù)量的增加,部署的難度就會增加。業(yè)務(wù)的粒度劃分得越細(xì),微服務(wù)架構(gòu)的數(shù)量就越多。因此就出現(xiàn)了自動化部署技術(shù),例如Docker容器自動化部署技術(shù)方便了微服務(wù)架構(gòu)項目下各模塊在服務(wù)器上的部署。
2.服務(wù)集中化管理
微服務(wù)架構(gòu)系統(tǒng)是按照業(yè)務(wù)單元來劃分的,服務(wù)數(shù)量越多,管理起來越復(fù)雜。在這里,微服務(wù)架構(gòu)提供了集中化管理組件Spring Cloud Config,人們可以在Spring Cloud Config配置文件中統(tǒng)一配置服務(wù),這樣很大程度上方便了對項目的集中化管理。
3.支持熔斷機制
微服務(wù)架構(gòu)就是分布式的。在分布式系統(tǒng)中,服務(wù)之間是相互依賴的,如果一個服務(wù)出現(xiàn)了故障或者網(wǎng)絡(luò)延遲,在高并發(fā)的情況下,就會導(dǎo)致線程阻塞,在很短的時間內(nèi)該服務(wù)的線程資源會消耗殆盡,最終使得該服務(wù)不可用。
微服務(wù)架構(gòu)主要受益于此,因為職責(zé)分工要容易得多。
構(gòu)建單個服務(wù)在理論上可能聽起來很簡單,但實際上要復(fù)雜得多。當(dāng)我們將應(yīng)用程序分解為單個服務(wù)時,如果有一個龐大的團(tuán)隊構(gòu)建單個服務(wù),事情就會變得更順利。
微服務(wù)架構(gòu)的挑戰(zhàn)
1. 技術(shù)多樣性
微服務(wù)架構(gòu)的主要優(yōu)勢之一是在開發(fā)單個服務(wù)時可以靈活地使用各種技術(shù)基礎(chǔ)。這意味著工程團(tuán)隊必須維護(hù)多種工具來維護(hù)這些微服務(wù),只是因為每個服務(wù)使用不同的技術(shù)。
在這里,每個微服務(wù)組件都不同,不是因為任何技術(shù)要求,而是基于開發(fā)人員的個人喜好。這不僅在開發(fā)人員切換團(tuán)隊時成為技能問題,而且在應(yīng)用程序進(jìn)入維護(hù)模式時會縮減所有操作。突然之間,鑒于技術(shù)的多樣性,我們需要更多的人力和資源來維護(hù)應(yīng)用程序。
從財務(wù)角度來看,它在維護(hù)技能和運行時資源方面都涉及更多成本。
2. 復(fù)雜系統(tǒng)通信
基于微服務(wù)的架構(gòu)強制執(zhí)行模塊化結(jié)構(gòu),其中應(yīng)用程序被分解為多個獨立部署的微服務(wù)。區(qū)別就在這里——當(dāng)我們使用單體架構(gòu)時,所有的依賴關(guān)系都被隱藏并編碼在組件之間的依賴關(guān)系規(guī)則中。
在微服務(wù)架構(gòu)中,所有這些依賴項都必須在基礎(chǔ)架構(gòu)配置中進(jìn)行編碼(引入基礎(chǔ)架構(gòu)即代碼的概念)。這包括基礎(chǔ)設(shè)施的維護(hù)和配置。
需要注意的另一點是,在單體應(yīng)用中,通信是作為內(nèi)存調(diào)用發(fā)生的,而在談?wù)撐⒎?wù)時,通信在進(jìn)程之間移動,可能通過網(wǎng)絡(luò)進(jìn)行。這帶來了新的挑戰(zhàn),例如延遲和速度損失。假設(shè)我們循環(huán)調(diào)用遠(yuǎn)程微服務(wù);它會在每次循環(huán)迭代時增加延遲,使服務(wù)調(diào)用無法使用。
這個問題的一個可能的解決方案是,如果我們以一種避免服務(wù)調(diào)用循環(huán)的方式設(shè)計我們的服務(wù)。
3. 遷移
如果您已經(jīng)考慮遷移到微服務(wù)架構(gòu),那么您正計劃遷移現(xiàn)有的單體應(yīng)用程序,將每個域分解為新服務(wù)。
當(dāng)我們知道基于微服務(wù)的架構(gòu)強制執(zhí)行模塊化結(jié)構(gòu)時,我們必須在將單體分解為新的單個組件時引入新的連接及其依賴關(guān)系?,F(xiàn)在從傳統(tǒng)應(yīng)用程序調(diào)用微服務(wù)可能有點麻煩。為什么?因為缺少事務(wù)管理可能會出現(xiàn)一些問題,因為它們都在單體應(yīng)用程序中交織在一起。
何時使用微服務(wù)架構(gòu)?
當(dāng)您想要適應(yīng)可擴(kuò)展性、敏捷性和可管理性時,您想要縮短上市時間。
如果您打算使用當(dāng)今的編程語言或技術(shù)堆棧重寫您的遺留應(yīng)用程序,以跟上當(dāng)前的市場需求和解決方案。
有許多獨立的業(yè)務(wù)軟件組件可以跨多個渠道重用,例如登錄服務(wù)、身份驗證設(shè)施、搜索選項等。
如果您計劃不時使用新功能更新您的應(yīng)用程序,并且還需要靈活地刪除過時或不太喜歡的部分。
什么時候不使用微服務(wù)架構(gòu)?
我們都知道基于微服務(wù)的架構(gòu)強制執(zhí)行模塊化結(jié)構(gòu)。然而,真正的問題是每個應(yīng)用程序是否都需要分解為模塊/片段/微服務(wù)。
如果您的應(yīng)用程序不復(fù)雜,則不適合。進(jìn)一步詳細(xì)說明,您不打算添加新功能;沒有太多可試驗的東西,您的功能或產(chǎn)品始終保持不變,等等。
如果您沒有相當(dāng)熟練的團(tuán)隊規(guī)模精通各種編程語言或技術(shù)堆棧,則很有可能會導(dǎo)致高成本以及頻繁和延長的停機時間。
有些應(yīng)用程序不需要分解成更簡單的模塊。重要的是要知道哪些應(yīng)用程序在分解時性能更好,以及何時將它們放在一起更好。這是構(gòu)建無縫產(chǎn)品體驗的第一步。
軟件架構(gòu)風(fēng)格推動產(chǎn)品發(fā)揮其全部潛力。這不是要遵循任何架構(gòu)模式的規(guī)則并根據(jù)樣式進(jìn)行構(gòu)建。這更像是一次了解我們?nèi)绾问刮覀兊姆?wù)交付無縫的旅程。如果您認(rèn)為您的產(chǎn)品交付能力可以通過微服務(wù)架構(gòu)得到放大,那么您應(yīng)該這樣做。今天,我們看到許多企業(yè)級托管微服務(wù)平臺出現(xiàn)在市場上。借助這些平臺,DevOps 團(tuán)隊可以跨環(huán)境管理和部署微服務(wù)。確保微服務(wù)可投入生產(chǎn),以縮短上市時間、增強應(yīng)用穩(wěn)定性并增強應(yīng)用安全性。