本文摘自《微服務(wù)文集》thoughtworks 浙版數(shù)媒
“微服務(wù)” 這個(gè)術(shù)語(yǔ)在過(guò)去幾年如雨后春筍般涌現(xiàn),它是一種構(gòu)建可獨(dú)立部署服務(wù)套件的軟件設(shè)計(jì)方式。雖然這樣的架構(gòu)風(fēng)格沒(méi)有明確的定義,但它們?cè)诮M織方式、業(yè)務(wù)能力、自動(dòng)化部署、智能化終端以及對(duì)語(yǔ)言與數(shù)據(jù)的去中心化等方面具備共同特征。
以下內(nèi)容摘自Martin Fowler的網(wǎng)站。
“微服務(wù)”,又一個(gè)出現(xiàn)在擁擠的軟件架構(gòu)街道的新名詞。雖然我們的第一反應(yīng)是不屑一顧,但它的確是一個(gè)出鏡率越來(lái)越高的軟件設(shè)計(jì)風(fēng)格。在過(guò)去的幾年中,我們已經(jīng)看到很多的項(xiàng)目使用了微服務(wù),目前來(lái)看效果不錯(cuò),我們很多同事已經(jīng)將它作為構(gòu)建企業(yè)應(yīng)用的默認(rèn)方式。但很遺憾,,并沒(méi)有很多資料解釋微服務(wù)是什么以及如何實(shí)現(xiàn)微服務(wù)。
簡(jiǎn)而言之,微服務(wù)是一種將單個(gè)應(yīng)用以許多微小服務(wù)所組成的服務(wù)套件的形式來(lái)構(gòu)建軟件的方法,每個(gè)微服務(wù)擁有自己的輕量級(jí)數(shù)據(jù)處理模塊以及通信機(jī)制(通常是HTTP API的形式)。微服務(wù)圍繞業(yè)務(wù)能力和各自獨(dú)立的自動(dòng)化部署機(jī)制構(gòu)建而來(lái)。由于微服務(wù)需要極少的集中管理,因此各個(gè)服務(wù)可以使用不同的編程語(yǔ)言以及存儲(chǔ)技術(shù)。
為了解釋微服務(wù)的設(shè)計(jì)風(fēng)格,我們先來(lái)把他和單塊架構(gòu)風(fēng)格做一個(gè)比較。單塊架構(gòu)的應(yīng)用只有一個(gè)單元。企業(yè)應(yīng)用常常包含三個(gè)主要部分:客戶端用戶界面(包括運(yùn)行在用戶計(jì)算機(jī)瀏覽器中的HTML頁(yè)面和JavaScipt)、數(shù)據(jù)庫(kù)(包括保存在常見(jiàn)關(guān)系型數(shù)據(jù)庫(kù)中的各種表)和服務(wù)器端應(yīng)用程序。服務(wù)器端應(yīng)用程序處理HTTP請(qǐng)求,執(zhí)行業(yè)務(wù)邏輯,在數(shù)據(jù)庫(kù)中檢索和更新數(shù)據(jù)并選擇和渲染HTML視圖發(fā)送到瀏覽器。此服務(wù)器端應(yīng)用程序是一個(gè)完整的、單一的邏輯可執(zhí)行單元。任何對(duì)系統(tǒng)的更改都需要構(gòu)建和部署完整的服務(wù)器端應(yīng)用程序的新版本。
這樣的單塊服務(wù)器是構(gòu)建系統(tǒng)最自然的方式。所有處理請(qǐng)求的業(yè)務(wù)邏輯都在同一個(gè)進(jìn)程中,它允許你使用編程語(yǔ)言的特性來(lái)講整個(gè)應(yīng)用劃分為類、函數(shù)及命名空間。利用某些方法,你可以在筆記本電腦中運(yùn)行和測(cè)試應(yīng)用程序,并使用部署流水線確保新的更改通過(guò)了測(cè)試,并部署到了生產(chǎn)環(huán)境中。最后你可以通過(guò)增加運(yùn)行實(shí)例并進(jìn)行負(fù)載均衡,對(duì)應(yīng)用進(jìn)行橫向擴(kuò)展。
單塊應(yīng)用是可行的,但越來(lái)越多的人在使用的過(guò)程中受挫,尤其是隨著越來(lái)越多的應(yīng)用被部署到云中。整個(gè)系統(tǒng)的更新周期是被綁在一起的 - 對(duì)應(yīng)用的一小部分進(jìn)行了更改,就需要整個(gè)系統(tǒng)重新構(gòu)建和部署。隨著時(shí)間的推移它往往很難保持一個(gè)良好的模塊化結(jié)構(gòu),繼而難以保證新的更改只影響其所在的模塊。需要對(duì)應(yīng)用進(jìn)行擴(kuò)展時(shí),只能將整個(gè)應(yīng)用一起進(jìn)行擴(kuò)展,而不是擴(kuò)展應(yīng)用中的某個(gè)部分,這也消耗了更多的資源。
這些挫折導(dǎo)致了微服務(wù)的架構(gòu)方式:以服務(wù)套件的形式構(gòu)建軟件。微服務(wù)是獨(dú)立部署的可擴(kuò)展的,每個(gè)服務(wù)都有明確的模塊邊界,甚至允許不同的服務(wù)使用不同的編程語(yǔ)言,它們甚至可以由不同的團(tuán)隊(duì)管理。
我們不認(rèn)為微服務(wù)架構(gòu)是什么創(chuàng)新,它的歷史可以追溯到Unix年代的設(shè)計(jì)思想。但還沒(méi)有足夠多的人考慮過(guò)采用微服務(wù)架構(gòu),如果他們使用微服務(wù),很多軟件開(kāi)發(fā)過(guò)程會(huì)變得更好。
了解更多信息:
詹姆斯和馬丁的文章接著羅列了九個(gè)微服務(wù)的特點(diǎn)來(lái)定義什么是微服務(wù)架構(gòu),并探討了其與面向服務(wù)的架構(gòu)(SOA)的關(guān)系,最后論述了這種風(fēng)格是否是企業(yè)軟件的未來(lái)。
請(qǐng)到這里閱讀: