SOA 架構
SOA 全稱是:Service Oriented Architecture,“面向服務的架構”。
它是一種設計理念,其中包含多個服務,服務之間通過相互依賴最終提供一系列完整的功能。
各個服務通常以獨立的形式部署運行,服務之間通過網絡進行調用。
跟 SOA 相提並論的還有一個 ESB(企業服務總線),簡單來說 ESB 就是一根管道,用來連接各個服務節點。
ESB 的存在是為了集成基於不同協議的不同服務,ESB 做了消息的轉化、解釋以及路由的工作,以此來讓不同的服務互聯互通。
SOA 所要解決的核心問題是:
-
系統間的集成:站在系統的角度來看,首先要解決各個系統間的通信問題。目的是將原先系統間散亂、無規划的網狀結構,梳理成規整、可治理的星形結構,這步的實現往往需要引入一些概念和規范。比如 ESB、以及技術規范、服務管理規范;這一步解決的核心問題是【有序】。
-
系統的服務化:站在功能的角度,需要把業務邏輯抽象成可復用、可組裝的服務,從而通過服務的編排實現業務的快速再生。目的是要把原先固有的業務功能抽象設計為通用的業務服務、實現業務邏輯的快速復用;這步要解決的核心問題是【復用】。
-
業務的服務化:站在企業的角度,要把企業職能抽象成可復用、可組裝的服務,就要把原先職能化的企業架構轉變為服務化的企業架構,以便進一步提升企業的對外服務的能力。“前面兩步都是從技術層面來解決系統調用、系統功能復用的問題”。而本步驟,則是以業務驅動把一個業務單元封裝成一項服務。要解決的核心問題是 【高效】。
微服務(Microservices)架構
微服務架構和 SOA 架構非常類似,微服務是 SOA 的升華,只不過微服務架構強調的是“業務需要徹底的組件化及服務化”,原單個業務系統會被拆分為多個可以獨立開發、設計、部署運行的小應用。這些小應用間通過服務化完成交互和集成。 組件表示的就是一個可以獨立更換和升級的單元,就像 PC 中的 CPU、內存、顯卡、硬盤一樣,獨立且可以更換升級而不影響其他單元。
微服務不再強調傳統 SOA 架構里面比較重的 ESB 企業服務總線,同時以 SOA 的思想進入到單個業務系統內部實現真正的組件化。
Docker 容器技術的出現,為微服務提供了非常便利的條件,比如更小的部署單元,每個服務可以通過類似 Spring Boot 或者 Node 等技術獨立運行。
微服務的特征:
-
通過服務實現組件化
-
按業務能力來划分服務和開發團隊
-
去中心化
-
基礎設施自動化(DevOps、自動化部署)
服務網格(Service Mesh)架構
非侵入式的 Service Mesh 技術慢慢走向了成熟。Service Mesh (服務網格),作為服務間通信的基礎設施層在系統中存在。
什么叫 Service Mesh,我們可以將它比作是應用程序或者說微服務間的 TCP/IP,負責服務間的網絡調用、熔斷、限流和監控。
我們都知道在編寫應用程序時程序猿一般都無須關心 TCP/IP 這一層(比如提供 HTTP 協議的 Restful 應用)。同樣如果使用服務網格我們也就不需要關心服務間的那些原來是由應用程序或者其他框架實現的事情(熔斷、限流、監控等),現在只要交給 Service Mesh 就可以了。
微服務更注重服務之間的生態,專注於服務治理等方面,而服務網格更專注於服務之間的通信以及和 DevOps 更好的結合等。
服務網格的特征:
-
應用程序間通訊的中間層
-
輕量級網絡代理
-
應用程序無感知
-
解耦應用程序的重試/超時、監控、追蹤和服務發現
分布式架構下的高可用設計
避免單點故障:
-
負載均衡技術(failover/選址/硬件負載/ 軟件負載/去中心化的軟件負載(gossip(redis- cluster)))
-
熱備(Linux HA)
-
多機房(同城災備、異地災備)
應用的高可用性:
-
故障監控(系統監控(CPU、內存)/鏈路監控/日志監控) 自動預警
-
應用的容錯設計、(服務降級、限流)自我保護能力
-
數據量(數據分片、讀寫分離)
分布式架構下的可伸縮設計:
-
垂直伸縮
-
提升硬件能力
-
水平伸縮
-
增加服務器