一、SOA 系統(tǒng)架構(gòu)
SOA 的誕生是為了解決一個特定歷史時期的核心問題:企業(yè)內(nèi)部的信息孤島。在 SOA 之前,大型企業(yè)經(jīng)過多年信息化建設(shè),往往擁有上百個獨立的應(yīng)用系統(tǒng)(如CRM、ERP、財務(wù)系統(tǒng)、庫存系統(tǒng)等)。這些系統(tǒng)由不同團隊,在不同時期,使用不同技術(shù)棧開發(fā)。若企業(yè)需要實現(xiàn)一個跨系統(tǒng)的業(yè)務(wù)流程時,變得異常困難且代價高昂。
而 SOA 的理念是:“不推倒重來,而是將現(xiàn)有系統(tǒng)的功能包裝成可重用的、標準的服務(wù),讓這些服務(wù)能夠協(xié)同工作,支撐更上層的業(yè)務(wù)流程”。其核心是集成,目標是將企業(yè)內(nèi)部各種龐大、異構(gòu)的(不同語言、不同平臺)系統(tǒng)通過集中式架構(gòu)(通常是企業(yè)服務(wù)總線 ESB)連接和暴露為可重用的服務(wù)。它的目標是共享和重用。
SOA 架構(gòu)示意圖
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 客戶端 │ │ 客戶端 │ │ 客戶端 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
└────────────────┼────────────────┘
┌──────▼──────┐
│ ESB總線 │
└──────┬──────┘
┌────────────────┼────────────────┐
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ 服務(wù)A │ │ 服務(wù)B │ │ 服務(wù)C │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
└────────────────┼────────────────┘
┌──────▼──────┐
│ 共享數(shù)據(jù)庫 │
└─────────────┘
在這個模型中,采用集中式架構(gòu),所有通信都經(jīng)過 ESB,是系統(tǒng)的智能中心和控制點。承擔了服務(wù)路由、協(xié)議轉(zhuǎn)換、業(yè)務(wù)編排等重任。
二、微服務(wù)核心思想
微服務(wù)架構(gòu)將單個應(yīng)用程序劃分成一組小的、松耦合的、圍繞業(yè)務(wù)能力構(gòu)建的服務(wù)。每個服務(wù)都是一個獨立的、可部署的單元,擁有自己的專屬數(shù)據(jù)庫,并可以通過輕量級的通信機制(如HTTP/REST、gRPC)相互協(xié)作。
其核心是解構(gòu)。它將一個單一應(yīng)用程序拆分成一組小型的、獨立的服務(wù)。采用去中心化的分布式架構(gòu),每個服務(wù)圍繞業(yè)務(wù)能力構(gòu)建,專注于做一件事并做好。它的目標是解耦和獨立。
微服務(wù)架構(gòu)圖
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 客戶端 │ │ 客戶端 │ │ 客戶端 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
└────────────────┼────────────────┘
┌──────▼──────┐
│ API網(wǎng)關(guān) │
└──────┬──────┘
┌─────────┬─────────┼─────────┬─────────┐
┌───▼───┐ ┌───▼───┐ ┌───▼───┐ ┌───▼───┐ ┌───▼───┐
│用戶服務(wù)│ │訂單服務(wù)│ │商品服務(wù)│ │支付服務(wù)││庫存服務(wù)│
└───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘
┌───▼───┐ ┌───▼────┐ ┌───▼───┐ ┌───▼────┐ ┌───▼───┐
│用戶數(shù)據(jù)庫││訂單數(shù)據(jù)庫││商品數(shù)據(jù)庫││支付數(shù)據(jù)庫││庫存數(shù)據(jù)庫│
└───────┘ └────────┘ └───────┘ └────────┘ └───────┘
以電商系統(tǒng)為例,拆分出“商品服務(wù)”、“訂單服務(wù)”、“支付服務(wù)”、“庫存服務(wù)”、“用戶服務(wù)”等。每個服務(wù)有自己的數(shù)據(jù)庫。訂單服務(wù)需要用戶信息時,通過API直接調(diào)用用戶資料服務(wù)。如果支付失敗,訂單服務(wù)會通過消息隊列發(fā)出一個“支付失敗事件”,讓其他服務(wù)(如庫存服務(wù))自行處理。是一個去中心化的分布式架構(gòu)。
三、總結(jié)
SOA 的核心動作是集合:是對已經(jīng)存在的、各種不同的單體系統(tǒng)(比如一個老舊的 CRM 和一個新買的 ERP)。目標是把這些系統(tǒng)用一根總線(ESB)連接起來,讓它們能互相通信,解決的是異構(gòu)系統(tǒng)集成的問題。
微服務(wù)的核心動作是拆分:是對一個將要開發(fā)的或現(xiàn)有的單體應(yīng)用。主要任務(wù)是把這一個大單體應(yīng)用打碎成很多小應(yīng)用,每個小塊獨立開發(fā)、獨立部署,解決的是復(fù)雜應(yīng)用敏捷開發(fā)的問題。
但是,這里有一個重要的補充理解:雖然一個是“集合”,一個是“拆分”,看似背道而馳,但微服務(wù)常被認為是“現(xiàn)代化的、細粒度的 SOA”。為什么呢?
因為 SOA 提出的“面向服務(wù)架構(gòu)”這個思想是先進的。只是在過去的技術(shù)條件下(沒有 Docker 容器、沒有 DevOps),SOA 的落地方式比較重,變成了通過 ESB 做系統(tǒng)集成。
而微服務(wù),其實是用更先進的技術(shù)(容器、云平臺等)和理念(去中心化、領(lǐng)域驅(qū)動設(shè)計),實現(xiàn)了 SOA 思想中那個最核心的“服務(wù)化”的理想。
可以這樣理解:
SOA 的實踐(老派做法): 有一個龐大的機箱(ESB),你把你家的電視(系統(tǒng)A)、冰箱(系統(tǒng)B)、空調(diào)(系統(tǒng)C)都插到這個機箱上,讓它們能通過機箱交流。
微服務(wù)的實踐(新派做法): 不要那個大機箱。把你家的電視拆成屏幕、音響、主板(拆分單體),讓這些零件通過網(wǎng)絡(luò)(API)直接互相調(diào)用,每個零件壞了可以隨時換新的。