為什么說(shuō)2015年將是微服務(wù)架構(gòu)元年?
譯文編者按:微服務(wù)架構(gòu)(MSA)是一種架構(gòu)概念,旨在通過(guò)將功能分解到各個(gè)離散的服務(wù)中以實(shí)現(xiàn)對(duì)解決方案的解耦。你可以將其看作是在架構(gòu)層次而非獲取服務(wù)的類上應(yīng)用很多SOLID原則。微服務(wù)架構(gòu)是個(gè)很有趣的概念,它的主要作用是將功能分解到離散的各個(gè)服務(wù)當(dāng)中,從而降低系統(tǒng)的耦合性,并提供更加靈活的服務(wù)支持。
【51CTO譯文】作為加快Web和移動(dòng)應(yīng)用程序開(kāi)發(fā)進(jìn)程的一種方法,微服務(wù)架構(gòu)在2014年開(kāi)始受到關(guān)注。今年,更多的企業(yè)組織會(huì)獲得微服務(wù)帶來(lái)的好處。
使用服務(wù)構(gòu)建應(yīng)用程序這個(gè)概念一直具有吸引力。要是既然可以匯編通過(guò)標(biāo)準(zhǔn)API利用相同服務(wù)的多個(gè)應(yīng)用程序,何必要從頭開(kāi)始編寫代碼呢?只要正確配置那些服務(wù),你應(yīng)該能獲得巨大的規(guī)模經(jīng)濟(jì)效益。
在過(guò)去,試圖踐行這個(gè)概念的做法在過(guò)度設(shè)計(jì)(尤其是CORBA 和 SOA趨勢(shì))的重壓之下未能如愿以償。但是微服務(wù)最令人關(guān)注的方面之一在于,使用微服務(wù)在過(guò)去是開(kāi)發(fā)人員推動(dòng)之下的草根現(xiàn)象。大致上來(lái)說(shuō),微服務(wù)就是可通過(guò)API訪問(wèn)的、單一用途的小型程序。這回,服務(wù)理念深得人心。
想了解微服務(wù)架構(gòu)的實(shí)際案例,只要看一下Stefan Borsje在2014年撰寫的這篇博客:How we build microservices at Karma,他是專門向廣大消費(fèi)者銷售無(wú)線熱點(diǎn)設(shè)備的Karma公司的***技術(shù)官兼聯(lián)合創(chuàng)始人。據(jù)Borsje聲稱,該公司在開(kāi)發(fā)網(wǎng)上商店時(shí),其開(kāi)發(fā)團(tuán)隊(duì)“無(wú)意中使用了”微服務(wù)。
我們從一個(gè)大型的后端應(yīng)用程序著手,必要時(shí)將它分解成多個(gè)部分。隨著不斷地構(gòu)建應(yīng)用程序,我們開(kāi)始清楚自己在努力解決的那個(gè)問(wèn)題;而我們對(duì)這個(gè)問(wèn)題越熟悉,我們需要為該應(yīng)用程序的不同部分設(shè)置邊界就來(lái)得越明顯。每當(dāng)我們遇到應(yīng)該是獨(dú)立部分的組件,我們就將它變成一個(gè)服務(wù)。
起初,這些部分相對(duì)較大,但是與其他用戶采用微服務(wù)的情況一樣,我們也發(fā)現(xiàn)那些部分可以變得越來(lái)越小。
比如說(shuō),那個(gè)整體式應(yīng)用程序最初有一個(gè)“商店”組件,Borsje的開(kāi)發(fā)團(tuán)隊(duì)將其細(xì)分為訂單處理、訂單執(zhí)行和跟蹤等服務(wù)。連面向公眾的前端也被分解成了多個(gè)服務(wù)。Borsje表示,將細(xì)粒度功能分隔成獨(dú)立服務(wù)大幅提升了工作效率,這在一方面歸功于開(kāi)發(fā)人員在開(kāi)發(fā)時(shí)不需要操心整體式應(yīng)用程序的所有依賴項(xiàng)。
對(duì)Karma來(lái)說(shuō),微服務(wù)存在的***問(wèn)題在于測(cè)試方面。正如Borsje所說(shuō):“行動(dòng)和最終結(jié)果相距甚遠(yuǎn),以至于很難發(fā)現(xiàn)準(zhǔn)確的因果關(guān)系。整條鏈中可能會(huì)出現(xiàn)問(wèn)題,但這條鏈中到底哪個(gè)環(huán)節(jié)出了問(wèn)題呢?”
《敏捷宣言》一書的合著者M(jìn)artin Fowler在去年3月份整理出了人們青睞微服務(wù)的原因,隨后在11月份發(fā)布了一篇演示文稿,較為詳細(xì)地概述了多層微服務(wù)測(cè)試體系。他支持單個(gè)服務(wù)的單元測(cè)試,這不足為奇,不過(guò)他承認(rèn)這不足以確定整個(gè)系統(tǒng)是否在正常運(yùn)行。他貼心地列出了一系列整合、組件、契約和端到端測(cè)試策略,這些策略有望幫助開(kāi)發(fā)人員盡量弄明白微服務(wù)最棘手的問(wèn)題之一。
另一個(gè)問(wèn)題是:你無(wú)法總是預(yù)測(cè)哪些微服務(wù)在某些情形下可能無(wú)力滿足需求。我確信,這是Karma將其電子商務(wù)平臺(tái)部署在亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)上的一個(gè)原因。在AWS環(huán)境下,自動(dòng)擴(kuò)展功能能夠在有需要的地方添加計(jì)算能力,有助于確保沒(méi)有哪個(gè)服務(wù)成為瓶頸。請(qǐng)注意:微服務(wù)的典型代表Netfilx也使用AWS――換句話說(shuō),微服務(wù)和云相輔相成。從理論上來(lái)說(shuō),你可以使用VMware或OpenStack,自行構(gòu)建具有自動(dòng)擴(kuò)展功能的私有云,但是這么做困難重重,這是公有云勝出的一大原因。
支持微服務(wù)的另一項(xiàng)***技術(shù)是Docker,這項(xiàng)技術(shù)用于包裝應(yīng)用程序,然后將它們部署在Linux容器中。事實(shí)證明,微服務(wù)和Docker可謂是天作之合,這是各大公有云現(xiàn)在都支持Docker的一大原因。
很顯然,沒(méi)有人聲稱微服務(wù)解決得了所有問(wèn)題。但是微服務(wù)架構(gòu)可能會(huì)在其他基于服務(wù)的解決方案失敗的地方取得成功,因?yàn)樗亲韵露铣霈F(xiàn)的。開(kāi)發(fā)人員確定服務(wù)類型和服務(wù)的細(xì)粒度;隨著這股趨勢(shì)波及到大企業(yè),開(kāi)發(fā)團(tuán)隊(duì)就能夠決定哪些服務(wù)對(duì)整個(gè)企業(yè)而言是同類中***的服務(wù)。
如果使用過(guò)去的硬連線基礎(chǔ)設(shè)施,不可能實(shí)現(xiàn)這種臨時(shí)擴(kuò)建(ad hoc build-out)。同樣重要的是,開(kāi)發(fā)人員在協(xié)作方面已大有改進(jìn),文化的轉(zhuǎn)變有助于自然有序地構(gòu)建軟件架構(gòu),而不是遵守從上面下達(dá)的命令和規(guī)定。
據(jù)我所聞,許多企業(yè)的開(kāi)發(fā)人員已經(jīng)在采用微服務(wù)架構(gòu),無(wú)論管理層知情還是不知情。借助合適的云基礎(chǔ)設(shè)施,無(wú)論是公有云還是私有云, 微服務(wù)架構(gòu)不僅能夠提高開(kāi)發(fā)人員的工作效率,還能幫助開(kāi)發(fā)人員開(kāi)發(fā)出以往不可能構(gòu)建的新型應(yīng)用程序。
英文原文:Why 2015 will be the year of microservices
布加迪編譯