1. 微服務架構 (MSA)及構成元件
傳統軟體系統多層架構
Java EE應用服務器和單一中大型軟體架構的時代已經不復存在了。硬體執行越來越快,但Internet 流量仍在增加。平台必須支持擴展,負載必須分配給多個主機。
微服務的架構可以為上述需求提供解決方案。
- 除了更好的擴展之外,微服務提供更快的開發週期,動態縮放取決於負載和改進的故障轉移行為。
- 為了處理更高的需求而不是複製一個完整的系統,在微服務體系結構中,只需要調整需要更多資源的部份。
- 軟體可以解耦,軟體維護變得越來越簡單。每個開發人員必須在單一應用程式中更新一個版本,才能知道保持大容量的最新版本,減少技術負擔。
- 使用微服務技術,您可以一步一步地按服務進行服務。隨著服務數量的增加,每個開銷都需要最小化。
- 為了快速創建這樣的服務,需要一個模板或框架。
- 這樣的框架在其他語言中是突出的,但對於Java,只有幾個選項可用,如使用Dropwizard [1],Play Framework [2]或Spring Boot [3],至少有3個框架在 Java 微服務世界中大量使用。
傳統的多層(N 層)架構類似堆疊,最底層是資料層,其上為領域層(和服務層、應用程式層等),最頂端是展現層,然後還有各層都會用到的基礎建設(infrastructure),如下圖所示。
多層架構缺點
- 傳統 JEE 架構
- 單體架構每一層整合很多服務,見下圖
3. 也要共用很多資料庫,見下圖
Ports and Adapters 模式 (六角型架構 Hexagonal Architecture)
- 是由 Alistair Cockburn 於 2005 年提出。
- Duncan Nisbet 用六角形的桌子來比喻六角架構:
- 所有的 domain objects 都在桌上。
- 環繞桌子周圍的椅子就是 adapters。
- 站在椅背後面的人等同於外部系統或服務。
- 桌子的結構基本上不會變動(領域物件不變);會變動的部分是跟外界銜接的 adapters。
- 椅子的規格必須符合桌子的 port,才能卡進去 -- Adapters 必須符合 Domain Objects 的 port,彼此才能銜接得上。
下圖取自 Duncan Nisbet 部落格: