理解微服務
關于微服務架構的文章和資料已經不甚枚舉,有興趣的可以先參考Martin Fowler的大作。這里談談個人對微服務架構的認識和理解。
軟件設計的本質問題
軟件設計最終的追求是高內聚、低耦合,各種各樣的編程語言、框架、原則、模式都是為了幫助我們達成這個目標。滿足這種特征的軟件具有更好的可擴展性、可伸縮性、可維護性。
微服務架構也不例外。通過將服務劃分為多個、獨立的微服務,消除單體程序中存在的緊耦合;各個相互獨立的微服務可以獨立開發、維護、部署和升級。關于微服務的優勢和劣勢在此不再贅述,已經有很多的資料對此進行解釋。
Erlang
Erlang跟微服務實際上沒有什么直接的關系。但是這門語言的設計哲學使得我們能發現它跟微服務之間的一些內在關聯。
Erlang具有以下特征:
- 輕量級進程。單臺PC機上可以創建數以萬計的進程。
- 消息驅動。進程之間通過消息進行交互。
- 容錯。進程之間的鏈接、監督使得系統更可靠。
- 通過進程組管理進程。
這些特征使得Erlang開發出來的系統天然地就類似于一個小型的微服務系統,兩者看上去頗有幾分神似。
框架、工具
微服務架構是當前互聯網應用的流行架構模式,最近十分火熱。從各種論壇、會議、演講中可以看到各種框架和工具的出現,甚至有人說,不用XXX的系統就不是微服務架構。
用不用框架、工具,跟是不是微服務架構沒有必然的聯系。架構不等于框架和工具的堆積。從理論上講,不用任何框架和工具,同樣可以開發出高內聚、松耦合的系統,只不過框架和工具的存在讓我們可以站在巨人的肩膀上前進。
實施微服務
一種架構的成功落實和實施,離不開文化、團隊、流程、技術等方面的支撐。
- 持續改進的自組織團隊
就像康威定律所說,一種架構的實施對應著一種組織的形式。為了實施微服務架構,也需要有相應的組織結構。
小而精的團隊往往更有戰斗力,沒有強力干預的自組織團隊更容易產生高質量的軟件。在類似蟻群、神經網絡、免疫系統等復雜自適應系統中,沒有中央控制者進行管理和指揮,卻運行的非常良好,盡管其中的奧秘至今還不為人知。 - 敏捷實踐
如果說團隊的自組織從文化上保證了一種架構的成功實施,敏捷實踐則從流程層面為架構的成功實施提供支持。 - 技術能力
軟件領域的技術能力是團隊和組織實施架構的基本功。它讓我們具有良好的洞察力,識別出快速變化中的變與不變,也是架構得以成功實施的基礎。
借鑒意義
看待事物往往可以從三個不同的層次出發,分別對應著價值觀、原則和實踐。比如,我們經常談到的敏捷,這三個層次分別對應著一棵樹的樹根、樹干和枝葉。
對于微服務架構,我個人認為屬于原則層面。軟件設計的本質復雜性問題并沒有革命性的突破,技術的發展更多地體現在原則和實踐層面。
微服務架構也不是下一個銀彈,也不可能適用于每一個領域,但是其背后的思想卻值得我們借鑒。