軟件架構(gòu)模式之微服務(wù)架構(gòu)
本文轉(zhuǎn)載自微信公眾號(hào)「架構(gòu)精進(jìn)之路」,作者架構(gòu)精進(jìn)之路。轉(zhuǎn)載本文請(qǐng)聯(lián)系架構(gòu)精進(jìn)之路公眾號(hào)。
1、微服務(wù)架構(gòu)介紹
微服務(wù)架構(gòu)(Microservice Architecture)是一種架構(gòu)概念,旨在通過將功能分解到各個(gè)離散的服務(wù)中以實(shí)現(xiàn)對(duì)解決方案的解耦。你可以將其看作是在架構(gòu)層次而非獲取服務(wù)的類上應(yīng)用很多SOLID原則。微服務(wù)架構(gòu)是個(gè)很有趣的概念,它的主要作用是將功能分解到離散的各個(gè)服務(wù)當(dāng)中,從而降低系統(tǒng)的耦合性,并提供更加靈活的服務(wù)支持。
概念:把一個(gè)大型的單個(gè)應(yīng)用程序和服務(wù)拆分為數(shù)個(gè)甚至數(shù)十個(gè)的支持微服務(wù),它可擴(kuò)展單個(gè)組件而不是整個(gè)的應(yīng)用程序堆棧,從而滿足服務(wù)等級(jí)協(xié)議。
定義:圍繞業(yè)務(wù)領(lǐng)域組件來創(chuàng)建應(yīng)用,這些應(yīng)用可獨(dú)立地進(jìn)行開發(fā)、管理和迭代。在分散的組件中使用云架構(gòu)和平臺(tái)式部署、管理和服務(wù)功能,使產(chǎn)品交付變得更加簡(jiǎn)單。
本質(zhì):用一些功能比較明確、業(yè)務(wù)比較精練的服務(wù)去解決更大、更實(shí)際的問題。
2、模式描述
不管你使用何種實(shí)現(xiàn)風(fēng)格和拓?fù)?,有幾個(gè)通用的核心概念應(yīng)用在這種架構(gòu)模式上。首先是分隔發(fā)布單元(separately deployed units)。
如圖所示,每一個(gè)微內(nèi)核的組件都被分隔成一個(gè)獨(dú)立的單元。
微服務(wù)包含服務(wù)組件(service component)。不要考慮微內(nèi)核的單個(gè)服務(wù),而是最好考慮服務(wù)組件,從粒度上講它可以是單一的模塊或者一個(gè)一個(gè)大的應(yīng)用程序,代表單一功能(提供天氣預(yù)報(bào)或者圖片存儲(chǔ))。
正確設(shè)計(jì)服務(wù)組件的粒度是一個(gè)很大的挑戰(zhàn)。
另一個(gè)關(guān)鍵概念是微內(nèi)核是分布式的。這意味著服務(wù)組件可能是遠(yuǎn)程方法(通過JMS, AMQP, REST, SOAP, RMI......等等)。分布式意味著這種模式可以建立大規(guī)模的應(yīng)用。
另一個(gè)值得興奮的特性是它可以從其它有問題的架構(gòu)模式中演化出來,而不是直接創(chuàng)建出來等待問題發(fā)生。當(dāng)你遇到一些無法解決的問題,特別是互聯(lián)網(wǎng)企業(yè)的規(guī)模擴(kuò)大時(shí),是很好的引入微服務(wù)架構(gòu)的時(shí)機(jī)。
一般會(huì)從兩個(gè)模式中演化:
- 一種就是一開始就是整體的應(yīng)用,所有的模塊都是緊耦合的;
- 另外一種是面向服務(wù)的架構(gòu)模式(SOA,service-oriented architecture pattern)。SOA不是不好,但是太昂貴了,不好理解和實(shí)現(xiàn)。
3、模式拓?fù)?/h3>
有很多實(shí)現(xiàn)微服務(wù)的方式。最通用最流行的三個(gè)方式是: API REST-based, applicaiton REST-based 和 中心化的消息。API REST-based 適合網(wǎng)站提供小規(guī)模的,自包含的服務(wù)。很多互聯(lián)網(wǎng)網(wǎng)站都提供這樣的服務(wù),比如OAuth2服務(wù)。
application REST-based不同于上面的架構(gòu),客戶端看到的是web界面或者富客戶端程序,而不是調(diào)用API。UI層獨(dú)立發(fā)布,可以訪問服務(wù)組件。
中心消息模式,它類似前面的模式,但是使用一個(gè)輕量級(jí)的消息broker取代RESTful的服務(wù)調(diào)用。這個(gè)輕量級(jí)的broker不會(huì)執(zhí)行服務(wù)的編排,傳輸和路由,這和SOA不同,不要把它看作SOA的簡(jiǎn)化版。
4、架構(gòu)考量
微服務(wù)架構(gòu)解決了無架構(gòu)的整體編碼的應(yīng)用的問題以及SOA的問題。同時(shí)它還可以提供實(shí)時(shí)的產(chǎn)品發(fā)布。它是一個(gè)分布式架構(gòu),也會(huì)有上面分布式的問題。
微服務(wù)模式優(yōu)劣分析:
總體靈活性:高
發(fā)布易用性:高
可測(cè)試性:高
性能:低
規(guī)模擴(kuò)展性:高
開發(fā)容易度:高
5、總結(jié)
微服務(wù)作為單一整體的程序和面向服務(wù)架構(gòu)的替代者, 微服務(wù)架構(gòu)模式在工業(yè)界很快贏得了地位。這種模式還在進(jìn)化之中,在業(yè)界對(duì)于它的特性和實(shí)現(xiàn)還有些困惑。對(duì)于我們的思考,更多的是思維上的轉(zhuǎn)變。對(duì)于微服務(wù)架構(gòu):技術(shù)上不是問題,意識(shí)比工具重要。