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