之前遇到問題查詢的資料,做個整理。
Service Oriented Architecture(SOA) 服務導向架構
特性:
- 針對某特定要求的輸出,該服務就是運作一項商業邏輯
- 具有完備的特性(self-contained)
- 消費者並不需要瞭解此服務的運作過程
- 可能由底層其他服務組成
原則:
- 可重複使用、粒度、模組性、可組合型、物件化原件、構件化以及具互動操作性
- 符合開放標準(通用的或行業的)
- 服務的識別和分類,提供和發布,監控和跟蹤。
SOA 所解決的核心問題
- 系統整合(技術層面)
- 系統的服務化(技術層面)
- 業務的服務化(是以業務驅動把一個 業務單元封裝成一項服務)
Microservices 微服務
- 通過服務實現元件化
- 按業務能力來劃分服務和開發團隊
- 去中心化
- 基礎設施自動化(devops、自動化部署)
與服務導向架構(Service-Oriented Architecture)不同,後者是整合各種業務的應用程式,但微服務只屬於一個應用程式。(強調單一業務組件化)
Microservices 特性
- 每個服務都容易被取代。
- 服務是以能力來組織的,例如使用者介面、前端、推薦系統、帳單或是物流等。
- 由於功能被拆成多個服務,因此可以由不同的程式語言、資料庫實作。
- 架構是對稱而非分層(即生產者與消費者的關係)
Microservices 資料庫三種設計模式
- 每個服務都各有一個數據庫,同屬性的服務可共享同個資料庫。
- 所有服務都共享同個資料庫,但是不同表格,並且不會跨域存取。
- 每個服務都有自己的資料庫,就算是同屬性的也是,資料庫並不會共
資料庫的可棄性:
實踐微服務架構中有許多的做法。但是其中一種的做法是將資料庫視作短期的儲存空間而不是長期的資料。因為他們可以在上線時從事件中心回覆,因此可以快速的從記憶體中快速存取(例:Redis)作為資料庫伺服器。這種做法需要將每個請求當作事件來進行廣播,這樣就可以從事件儲存中心重播所有的事件。
在微服務中,則通過 API 調用來完成。這些模塊或者服務間調用,大部分時候是為了共享數據。
共享數據最賤的方式當然就是採用一種共享資料庫的模式,也就是單體應用常用的方式。應用可以有多個系統模塊,但一般都是只有一個資料庫。
一庫多服,這種架構模式通常會被認為是 微服務架構下的反範式,它的問題在於:
- 單點故障:一個資料庫倒下,整批服務全部停止。何來的服務獨立性?
- 數據在同一個地方,會給貪圖方便的開發或者 DBA 工程師編寫很多數據間高度依賴的程序或者工具。
- 無法針對某一個服務進行精準優化或擴展。
所以一般推薦的做法,是為每一個微服務準備一個單獨的資料庫,也即一庫一服(Database per Service)模式。這種模式更加適合微服務架構,它滿足每一個服務是獨立開發、獨立部署、獨立擴展的特性。需要對一個服務進行升級或者數據架構改動的時候,不會影響到其他的服務。需要對某個服務進行擴展的時候,也可以手術式的對某一個服務進行局部擴容。
微服務的切割
- domain-driven design (DDD) 領域驅動設計
- Infrastructure(基礎實施層)
- Domain(領域層)
- Application(應用層)
- Interfaces(表示層,也叫用戶界面層或是接口層)
- 資料結構
微服務的利和弊
- 利: 單一服務組件化、可獨立部署、技術多樣性
- 弊: 分佈式的系統複雜性(各別服務的溝通複雜化)、最終一致性、運維複雜性
微服務(設計模式)
Service Oriented Architecture 與 Microservice 差別
- 微服務不再強調傳統SOA架構裡面比較重的ESB(企業服務匯流排),進入到單個業務系統內部實現真正的元件化。
- SOA注重的是系統整合方面,而微服務關注的是組件服務完全分離 。
more info:Microservices wiki 英文
more info:微服務(Microservices) wiki
more info:微服務(Microservices) 設計模式
more info:架構設計思想-微服務架構設計模式
more info:如何在微服務架構下進行數據設計?
more info:微服務-柔性事务
more info:微服務-DB規劃
more info:技術觀念 | 淺談分散式系統 - 微服務淺談
more info:关于分布式事务BASE模型和柔性事务TCC
more info:SOA架構和微服務架構的比較
more info:架構師必看:微服務架構綜述
more info:SOA Wiki
more info:我只是下了個訂單,鬼知道我在微服務里經歷了什麼? (DDD 領域驅動設計-微服務切割-訂單設計)
more info:老司機避坑指南:如何快速搞定微服務架構?
more info:martinfowler blog原文
more info:6 Data Management Patterns for Microservices