一、單體服務架構
1、JEE架構:UI、EJB邏輯層、資料庫
優點:對單體架構分層,接入層、邏輯層、數據層;
缺點:
a、邏輯層業務耦合性高,組件指責劃分不清晰,導致新功能迭代,增加和維護非常困難。
b、EJB2.0實現採用了大量的XML配置文件,組件學習曲線高、難以單元測試,超重量級;
2、SSH架構:Structs(UI 交互層)、Spring(業務邏輯實現)、Hibernate(對象領域的模型與關係型資料庫模式映射)
Structs MVC模型:
Spring:邏輯層實現核心容器,核心思想 IOC和AOP
a、IOC(控制反轉):
EJB 實現: 實現服務化組件 Bean 時,將依賴多個容器接口,複雜容器規則的 XML配置,測試依賴應用伺服器環境;
Spring 實現:業務邏輯服務組件都是獨立的,Spring 容器支持單元測試,對下層依賴服務進行 Mock, 方便測試。
b、AOP(面向切面編程):日誌、安全、事物、應用程式性能APM; 具體實現:AspectJ
Hibernate:對象領域模型與關係型資料庫模型映射
存在性能問題,使用更加靈活的MyBatis實現ORM
二、服務化架構 SOA
1、WebService:
原理:
1)通過UDDI協議註冊WebService服務目錄
2)通過UDDI協議查詢服務,並獲得WSDL服務描述文件
3) 通過WSDL語言遠程調用WebService提供服務
缺點:
1)依賴中心服務發現機制
2)使用SOAP通信協議,通過XML序列和反序列化數據
3)服務化管理和治理設施不完善
2、ESB: 企業服務總線
原理:
1、每個服務提供者通過總線模式插入系統
2、總線根據路程的編排將服務的輸出轉化為流程的下一個輸出節點
缺點:
1、ESB服務過重的整體服務
2、通過ESB試圖隱藏系統內部的複雜性,但是系統內部複雜性依舊存在
三、微服務架構
1、職能團隊劃分
2、去中心化服務治理
微服務架構倡導去中心化的服務管理和治理,儘量不要設置中心化的管理服務,最差在中心化管理服務癱瘓時有替代方案和設計。
API網關:所有外部服務和內部服務通過API網關統一管理
缺點:用戶請求通過機房,都需要經過API網關路由,服務上量後,很大程度上放量了API網關的調用TPS。
3、微服務交互模式
a、讀者容錯模式:服務提供與消費者之間對接口改變進行容錯
b、消費者驅動契約模式:
舉例:
生產者契約:帳務系統入帳請求(商戶帳戶ID、入帳訂單號、入帳金額)
消費者契約:帳務系統入帳返回(商戶帳戶ID、入帳訂單號、入帳金額、入帳時間、財務流水號、入帳狀態)
消費者驅動契約:對於交易系統只需要帳戶系統的入帳訂單號和入帳狀態,為了保證資金的安全,交易系統對帳務系統發起者
提出冪等和濾重處理,對重複的入帳請求進行攔截。
c、去數據共享模式
缺點:
a、微服務之前交互除了接口契約,還有數據存儲契約
b、上遊數據格式發生變化時,可能導致下遊處理邏輯出現問題
在數據服務時,一定不要共享緩存和資料庫等資源。
4、微服務的分解和組合模式
分解:
微服務架構需求分析和架構設計中,通常用領域的動詞和名詞來劃分。拆分後,系統具有敏捷性、靈活性、可伸縮性。
例如電商後臺系統,可分解為訂單、商戶、商戶目錄、庫存、購物車、交易、支付、發票、物流等子系統
組合:
1、服務代理模式:
平滑系統遷移四階段:
1)、新老系統雙寫
2)、遷移雙寫之前的歷史遺留數據
3)、讀請求切換新系統
4)、下調雙寫邏輯、,只寫新系統
2、服務聚合模式
根據業務流程處理的需要,按一定的順序調用一依賴的多個服務,對依賴的微服務返回的數據進行組合、加工和轉換,最後按一定的形式返回給使用方。
3、服務串聯模式,類似工作流
四、技術選型
1、RPC
1)JDK RMI:JDK1.4後內置遠程服務調用技術棧,不採用
a、RMI採用自帶JDK專用序列化協議,不能跨語言
b、使用底層網絡協議,不如基於文本的HTTP可讀
2)Hessian和Burlap
a、基於Http傳輸。
b、Hessian將對象序列化成語言無關的二進位協議
Burlap將對象序列化成與語言無關的XML數據
c、都適合傳輸較小對象,大複雜對象,都沒有RMI有優勢
2、服務化時代框架 (過時)
Dubbo:提供高性能和透明化的RPC遠程服務調用,包含基本服務監控、服務治理和服務調度能力
默認採用傳輸Hessian序列化數據,Dubbo採用ZooKeeper作為註冊中心來註冊和發現服務。
並通過客戶端負載均衡來路由請求,算法包括:隨機、輪詢、最少活躍調用數、一致性hash等。
HSF:淘寶內部大規模使用,不開源。
Thrift: 高性能支持多語言服務調用框架,Apache開源,具有跨語言和高性能優點。
AXIS: Apache Web Service項目,採用SOAP協議
Mule ESB:
3、微服務框架
1)Spring Boot
a、JEE時代
Tomcat Web容器服務管理服務的啟動、停止、監控、配置和日誌,應用人員按照規範打包War
b、Spring Boot,將容器嵌入自動的Jar包中。Spring Boot啟動時,內部啟動嵌入的容器,例如Tomcat,Jetty,Nettry等。
2、Spring Clound Netfix
包含組件Eureka、容錯性組件Hystrix、智能路由組件Zuul和客戶端負載均衡組件Ribbon
Netflix交互流程
1、服務在Eureka伺服器實例上註冊
2、Zuul作為特殊服務在Eureka註冊並發現服務
3、Zuul作為網關,將發現服務給PC網站、APP和開放平臺使用
4、RestTemplate和FergnClient使用簡單服務調用方法調用服務1、服務2