到底什么是微服務(wù)?

微服務(wù)到底意味著什么?它與以往的開發(fā)架構(gòu)有何不同?

背景

最近幾年,越來越多的開發(fā)人員使用“微服務(wù)”一詞來闡述他們的系統(tǒng)或應(yīng)用架構(gòu),當(dāng)然或許這只是他們在吹噓自己在技術(shù)潮流中并未落伍。我認(rèn)為,IT科技行業(yè)的人士至少要了解微服務(wù)的基礎(chǔ)知識,因?yàn)樗碇磥淼陌l(fā)展方向。即使對我的話半信半疑,還有行業(yè)內(nèi)很多大神為我背書。只是,話說回來,到底什么是微服務(wù)呢?

微服務(wù)架構(gòu)

上圖從左到右說明

左:單體架構(gòu)下,應(yīng)用緊耦合,所有的變更必須一起上線,持續(xù)部署就是天方夜譚。

中:傳統(tǒng)SOA架構(gòu)允許單獨(dú)的變更,但是每一個部分必須很謹(jǐn)慎地修改以免破壞整體架構(gòu)設(shè)計。

右:在微服務(wù)架構(gòu)下,開發(fā)可以獨(dú)立地創(chuàng)建、維護(hù)和改進(jìn)服務(wù)。服務(wù)之間通過API連接。

首先,確切地說,當(dāng)談到微服務(wù)時,我們實(shí)際上是指微服務(wù)架構(gòu)。這是一種獨(dú)特的架構(gòu)設(shè)計模式,它將是軟件、web或移動應(yīng)用拆分為一系列獨(dú)立的服務(wù)——如微服務(wù)。這些服務(wù)僅用于某一個特定的業(yè)務(wù)功能,例如:用戶管理、用戶角色、電子商務(wù)購物車、搜索引擎、社交媒體登錄等。此外,它們是相互獨(dú)立的,這意味著它們可以采用不同的編程語言和數(shù)據(jù)存儲。微服務(wù)中幾乎不存在集中管理,它使用輕量級的HTTP、REST或Thrift API來進(jìn)行內(nèi)部通信。

當(dāng)然有些人會問:嘿,這和SOA有什么不一樣?某種程度上,你可以說微服務(wù)首先實(shí)現(xiàn)了面向服務(wù)的架構(gòu)目標(biāo)。然而,兩種架構(gòu)之間仍然存在差異。通常,經(jīng)典的SOA適用于部署一體化架構(gòu)應(yīng)用,并且更傾向于平臺驅(qū)動,而微服務(wù)必須是可獨(dú)立部署的,因此在各個維度上提供了更多的靈活性。當(dāng)然,最主要的區(qū)別應(yīng)該是規(guī)模的不同,“微觀”——這個詞一聽就比常規(guī)的SOA要小得多。正如Martin Fowler所說,我們應(yīng)該將SOA視為微服務(wù)的超集。

話雖如此,我們并不把微服務(wù)視為革命性的突破,它更像是軟件開發(fā)進(jìn)化史中自然而然地往前邁了一步。

微服務(wù)的優(yōu)點(diǎn)

與物理世界(PC硬件、宜家家具、汽車等)中的模塊化趨勢類似,微服務(wù)的理念是允許開發(fā)人員基于各種獨(dú)立組件來構(gòu)建應(yīng)用程序,這些組件可以輕松更改、刪除或升級,而不會影響整個應(yīng)用程序——這與一體化架構(gòu)完全不同。這是這種新型架構(gòu)的主要優(yōu)點(diǎn)之一。除此之外,某些微服務(wù)(例如:文件上傳服務(wù))一次開發(fā)完成之后,開發(fā)人員可以在其他項(xiàng)目中重用該代碼的功能。

微服務(wù)的另一個重要特征是,與單一應(yīng)用程序不同的是——單一程序根據(jù)應(yīng)用程序的不同層級來定義團(tuán)隊(duì):用戶界面團(tuán)隊(duì),服務(wù)器端團(tuán)隊(duì),數(shù)據(jù)庫團(tuán)隊(duì)等——微服務(wù)允許公司圍繞特定業(yè)務(wù)功能來構(gòu)建團(tuán)隊(duì)。這反過來又驅(qū)使團(tuán)隊(duì)具備了跨職能能力,從而擁有了一系列更強(qiáng)大的技能:用戶體驗(yàn)、數(shù)據(jù)庫管理、項(xiàng)目管理等。這使我們進(jìn)一步走進(jìn)DevOps時代。

服務(wù)的分散管理使開發(fā)人員能夠根據(jù)特定業(yè)務(wù)需求選用不同的編程語言,這取決于他們認(rèn)為哪種語言才是圍繞微服務(wù)構(gòu)建的最佳選擇。這也意味著他們可以使用獨(dú)立的數(shù)據(jù)存儲,從而獲得這種架構(gòu)的最大優(yōu)勢——幾乎無限的可擴(kuò)展性。在微服務(wù)多地部署完成后,您只需要調(diào)整所需的功能,而不是每次都創(chuàng)建整個應(yīng)用程序的重復(fù)實(shí)例。這反過來又節(jié)省了時間和資源。

在談到微服務(wù)時,不可避免地要提到容器。容器旨在減少運(yùn)行時所需要的最小可行部件,而不是在同一物理或虛擬機(jī)中打包多個功能。話雖如此,容器只是可以優(yōu)化部署的工具,所以在無容器化環(huán)境中,基于微服務(wù)架構(gòu)構(gòu)建應(yīng)用程序也不是不可能的。

總結(jié)

總而言之,微服務(wù)的目標(biāo)是通過將應(yīng)用程序分解成較小的可組合的部分,以便在需要時可以獨(dú)立部署、升級、刪除或縮放,從而簡化構(gòu)建、維護(hù)和管理應(yīng)用程序。


轉(zhuǎn)自:http://heminit.com/2017/06/30/my-post3/#more

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容