從 SOA 到 微服務(wù) 的演變

一、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)用,每個零件壞了可以隨時換新的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容