整體架構(gòu)和微服務(wù)是開發(fā)者組織應(yīng)用組件的兩種方式。架構(gòu)的選擇是開發(fā)者的事。那么,你為什么要在乎呢?架構(gòu)類型不僅影響開發(fā)成本,還影響添加新功能的能力。
如果你不想最終重寫整個(gè)應(yīng)用程序,了解更多關(guān)于單片和微服務(wù)之間的區(qū)別。因此,花一點(diǎn)時(shí)間了解哪種架構(gòu)類型處理什么。
什么是整體架構(gòu)
想象一艘巨大的郵輪。它由許多部件組成,包括柴油機(jī)、發(fā)動(dòng)機(jī)和其他設(shè)備。在這樣的結(jié)構(gòu)中進(jìn)行改變是困難的,因?yàn)橐r里的所有元件相互依賴。
整體架構(gòu)也是如此。在單片應(yīng)用程序中,如果不部署整個(gè)代碼,就不能添加新的組件。由于一個(gè)應(yīng)用程序的所有元素都是相互依賴的,開發(fā)者對(duì)做出改變非常謹(jǐn)慎。應(yīng)用組件中的一個(gè)錯(cuò)誤就可能導(dǎo)致應(yīng)用崩潰。
整體結(jié)構(gòu)的優(yōu)點(diǎn)
為什么人們要建立一個(gè)單一的系統(tǒng)?
易于構(gòu)建。單片應(yīng)用程序是一個(gè)巨大的代碼庫,作為一個(gè)單元執(zhí)行。開發(fā)人員不需要考慮應(yīng)用程序組件的進(jìn)程間通信。因此,與微服務(wù)相比,他們需要更少的時(shí)間來構(gòu)建這樣的應(yīng)用。
快速部署。開發(fā)人員部署一個(gè)由一個(gè)文件組成的應(yīng)用程序所需的時(shí)間更少。
可重用組件。當(dāng)開發(fā)人員面臨問題時(shí),他們會(huì)重用其他應(yīng)用程序的代碼來解決問題。除此之外,代碼重用縮短了應(yīng)用功能的上市時(shí)間。
整體架構(gòu)的弱點(diǎn)
讓我們來看看為什么單體架構(gòu)不是銀彈。
難以擴(kuò)展。當(dāng)一個(gè)應(yīng)用的組件需要更多資源時(shí),很難隔離這樣一個(gè)組件進(jìn)行獨(dú)立擴(kuò)展。
難以添加功能。當(dāng)開發(fā)人員添加新功能時(shí),他們需要更改現(xiàn)有組件的依賴關(guān)系。然后,重新部署整個(gè)應(yīng)用程序,這既費(fèi)時(shí)又費(fèi)力。
難以理解。模塊依賴使得應(yīng)用程序的架構(gòu)更加復(fù)雜。因此,新開發(fā)人員很難理解這樣一個(gè)代碼庫中的所有依賴關(guān)系。
不可能采用新技術(shù)。如果新模塊使用的編程語言與你的應(yīng)用不同,則不能向你的應(yīng)用添加新模塊。在這種情況下,您需要重寫整個(gè)應(yīng)用程序。
什么是微服務(wù)架構(gòu)
想象一艘由樂高積木制成的船。與郵輪不同,這種船由獨(dú)立的小部件組成。因此,您可以隨時(shí)更改現(xiàn)有數(shù)據(jù)塊并添加新數(shù)據(jù)塊,而無需更改整個(gè)系統(tǒng)。
微服務(wù)和單片應(yīng)用的區(qū)別在于,微服務(wù)應(yīng)用利用負(fù)責(zé)不同業(yè)務(wù)邏輯的獨(dú)立模塊。模塊可以獨(dú)立更新、部署和擴(kuò)展。開發(fā)人員使用應(yīng)用編程接口(API)添加新模塊。
微服務(wù)優(yōu)于整體服務(wù)
現(xiàn)在,我們來看看微服務(wù)為什么好。
容易理解。開發(fā)團(tuán)隊(duì)需要更少的時(shí)間來安裝新功能。
最低管理。每個(gè)模塊需要一個(gè)小型的集中控制。
更好的可擴(kuò)展性。開發(fā)人員可以隔離需要更多工作負(fù)載的服務(wù),并獨(dú)立于應(yīng)用程序的其他部分進(jìn)行擴(kuò)展。
微服務(wù)架構(gòu)的弱點(diǎn)
為什么微服務(wù)架構(gòu)不是一刀切的解決方案
漫長(zhǎng)的準(zhǔn)備。開發(fā)人員需要額外的時(shí)間來選擇和設(shè)置所有模塊和數(shù)據(jù)庫之間的連接。
資源消耗。應(yīng)用程序的組件消耗不同數(shù)量的服務(wù)器內(nèi)存,影響系統(tǒng)性能。
更高的相關(guān)成本。每個(gè)微服務(wù)都需要其運(yùn)行時(shí)環(huán)境。因此,這類應(yīng)用程序的資源需求更高,這意味著相關(guān)成本更高。
現(xiàn)在,讓我們看看,您的企業(yè)應(yīng)該使用哪種結(jié)構(gòu)。
單片和微服務(wù):選擇什么
那么,單片應(yīng)用vs微服務(wù)?以下是您的業(yè)務(wù)應(yīng)用程序?qū)τ谝环N或另一種架構(gòu)類型的一些需求。
你需要整塊軟件的例子
在以下情況下選擇單片應(yīng)用:
你需要簡(jiǎn)單的商業(yè)邏輯。你開發(fā)了一個(gè)沒有復(fù)雜業(yè)務(wù)邏輯和可伸縮性的小企業(yè)項(xiàng)目,包括應(yīng)用的MVP。
你的最后期限很緊。整體架構(gòu)使得在2-3個(gè)月內(nèi)發(fā)布項(xiàng)目的第一個(gè)版本成為可能。
你的預(yù)算有限。整體應(yīng)用程序開發(fā)成本更低,需要的資源和開發(fā)人員也更少。
需要微服務(wù)的示例
在以下情況下,基于微服務(wù)的架構(gòu)是理想的選擇:
你需要很多數(shù)據(jù)源。您開發(fā)了一個(gè)項(xiàng)目,該項(xiàng)目具有用于數(shù)據(jù)收集、聚合等的大量數(shù)據(jù)管道。
你應(yīng)用機(jī)器學(xué)習(xí)算法。你需要一個(gè)收集、聚合和分析數(shù)據(jù)流的應(yīng)用程序。
你更新整體架構(gòu)。您重構(gòu)整體模塊,并將它們作為微服務(wù)運(yùn)行。
業(yè)務(wù)邏輯需要許多組件。您開發(fā)了一個(gè)具有眾多特性的項(xiàng)目,并且要為每個(gè)特性利用最好的解決方案。
選擇整體服務(wù)還是微服務(wù):應(yīng)用解決方案的觀點(diǎn)
我們分別建議體系結(jié)構(gòu)類型及其主要組件。我們的選擇基于許多因素。它們是:
商業(yè)目標(biāo)
項(xiàng)目類型
項(xiàng)目路線圖
客戶預(yù)算
因此,我們不能說微服務(wù)將最適合這個(gè)或那個(gè)項(xiàng)目。例如,我們不能為一個(gè)音樂應(yīng)用程序建議最好的架構(gòu)。我們需要知道它是否將只包括回放或像音樂流這樣的高級(jí)功能。
整體架構(gòu)與微服務(wù):底線
整體服務(wù)和微服務(wù)代表了組織組件的兩種不同方式。每種方法都有其優(yōu)缺點(diǎn)。
單片應(yīng)用程序開發(fā)起來更快更容易。但是,它們很難擴(kuò)展。
微服務(wù)對(duì)有很多業(yè)務(wù)邏輯和機(jī)器學(xué)習(xí)功能的app有效。但是,這樣的項(xiàng)目需要更多的時(shí)間來開發(fā),并且需要更多的精力來管理工作負(fù)載。
為了給你的應(yīng)用推薦架構(gòu),開發(fā)者需要分析你的商業(yè)目標(biāo)和關(guān)于應(yīng)用擴(kuò)展的計(jì)劃。