本文爲讀書筆記,對書中內容進行重點歸納,並將書中的模塊化結合微服務、Java9 Jigsaw談談理解。架構
以Java軟件系統爲例,重點講解了應用架構中的物理設計問題,即如何將軟件系統拆分爲模塊化系統。因此內容組織包括爲何須要模塊化,圍繞如何實現模塊化講述了模塊化模式,最後在模塊化基礎上使用OSGi技術實現動態模塊化。框架
先談談應用架構的邏輯設計和物理設計。
邏輯設計是關於語言結構的,指類、方法之間的關係,組織結構。物理設計是關於軟件中的物理實體,即部署單元和他們之間的關係,是關於如何將系統拆分爲模塊系統的。運維
模塊定義:
軟件模塊是獨立可部署的、可管理的、進程內可重用的、無狀態的軟件單元。可管理即模塊能夠安裝、卸載和更新。
在Java中,模塊就是jar包。
與分佈式服務不一樣的是,這裏的模塊是進程內重用,須要與想用其功能的進程一塊兒部署,而服務是一次部署被多個client使用。分佈式
基本模式模塊化
依賴模式微服務
可用性模式測試
擴展性模式編碼
通用模式.net
OSGi是Java平臺中的動態模塊系統,定義了一個模塊化單元,稱之爲bundle,是一個jar文件。bundle會在同一個JVM中進行部署和交互,在進程內跨bundle交互,而且可動態部署bundle。
OSGi只是提供一個運行時環境,使得在Java平臺中實現模塊化成爲可能。設計
自上而下的架構
架構的目標是減小變化的成本和影響
軟件傾向於隨着時間變得腐化,隨着時間流逝,變化會悄然發生並以難以預料的方式考驗着設計
技術債用來描述爲了知足進度或用戶指望而作出的設計讓步,與財務債同樣,也須要支付利息,在未來的開發中要付出額外的努力。咱們能夠選擇繼續支付利息或用更好的設計重構來償還本金,儘管償還本金須要成本,可是會下降未來要支付的利息。
複雜性阻止咱們以優雅的方式使軟件系統適應需求的變化。
最大化重用會使得可用複雜化。即軟件模塊的可重用性越高,則其易用性越差。
經過上文的描述,咱們已經瞭解了模塊化思想,那與現在的微服務是什麼關係呢?
微服務也是可獨立部署於容器的,每一個微服務僅關注於完成一件任務並很好地完成該任務,每一個任務表明着一個小的業務能力。各個微服務之間經過輕量級協議(RESTful API接口, 輕量級消息機制)交互通訊。與模塊化強調的進程內重用不一樣,微服務屬於分佈式服務,經過RPC協議在進程間重用。
類似點:
二者都是可獨立部署的,重視邏輯的可複用性,強調一個大的軟件系統須要拆分爲各個部分,保持高內聚低耦合,實現更好的軟件架構。
我的理解:
微服務架構更勝一籌於模塊化架構思想。提出模塊化架構的本書(中文版)發版於2013年,微服務的概念源於2014年,二者目的類似,現現在已有大量企業對已有系統進行改造或實施微服務架構,開發人員對微服務的認知逐漸深刻,大的市場環境已經採用了微服務架構。又微服務已是一個較小且完整的業務部署單元,不會將其拆分爲多個模塊化單元在同一進程中部署,就算拆分也是將其拆分爲更細粒度的微服務。
雖然實施微服務須要具有完善的基礎設施,如容器化、服務註冊發現、配置管理、監控等DevOps開發運維一體化設施,但隨着應用雲化的日益普及,相關設施不斷完善,如SpringCloud,其實施的門檻已經較低了。
且動態模塊化技術如OSGi還沒有普及,因此,我的認爲微服務架構比模塊化架構更優。
Java 9Java 平臺模塊化項目(Jigsaw )參考 https://mp.weixin.qq.com/s/Sr...
微服務相關:
https://www.ibm.com/developer...
https://martinfowler.com/micr...