0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從分層架構(gòu)到微服務(wù)架構(gòu)介紹(五)

jf_78858299 ? 來源:元閏子的邀請(qǐng) ? 作者:元閏子 ? 2023-05-10 17:02 ? 次閱讀

本文要介紹的是 服務(wù)化架構(gòu)Service-Based Architecture, SBA )。

SBA 可以看成是單體架構(gòu)和微服務(wù)架構(gòu)之間的一個(gè)折中方案,它也是按照業(yè)務(wù)領(lǐng)域進(jìn)行服務(wù)劃分,但服務(wù)劃分的粒度相比微服務(wù)要更粗。SBA 與微服務(wù)架構(gòu)一大不同是, 它允許各個(gè)服務(wù)間共享同一個(gè)數(shù)據(jù)庫實(shí)例 ,這也使得 SBA 在架構(gòu)上既有單體架構(gòu)的特點(diǎn),也有分布式架構(gòu)的特點(diǎn),顯得更加的靈活。因此, 從單體架構(gòu)演進(jìn)到 SBA,會(huì)比直接演進(jìn)到微服務(wù)架構(gòu)更加容易 。

架構(gòu)視圖

基礎(chǔ)視圖

SBA 的基礎(chǔ)架構(gòu)視圖分成 3 部分:

  • User Interface ,作為系統(tǒng)的接入口,接收客戶端的請(qǐng)求,并轉(zhuǎn)發(fā)到業(yè)務(wù)服務(wù)。。
  • Domain Services ,業(yè)務(wù)服務(wù)按照領(lǐng)域進(jìn)行劃分,分開部署、業(yè)務(wù)獨(dú)立。
  • Database ,服務(wù)間共享的數(shù)據(jù)庫實(shí)例,因?yàn)閿?shù)據(jù)庫實(shí)例只有一個(gè),所以可以支持 ACID 事務(wù)。

圖片

使用 SBA 的系統(tǒng)通常只會(huì)劃分 4 ~ 12 個(gè)服務(wù),避免產(chǎn)生過多的數(shù)據(jù)庫連接。服務(wù)數(shù)量不多,也決定了 SBA 中的服務(wù)相比微服務(wù)架構(gòu)中的服務(wù)有著更粗的粒度。User Interface 與服務(wù)間通過遠(yuǎn)程通信協(xié)議來完成業(yè)務(wù)往來,常見的通信方式有REST、RPC、消息隊(duì)列等。需要注意的是, SBA 是不允許服務(wù)間通信的 ,這與微服務(wù)架構(gòu)有著本質(zhì)的區(qū)別。

大多數(shù)情況下, SBA 中的服務(wù)只有一個(gè)或者少量實(shí)例 ,與微服務(wù)動(dòng)輒成百上千個(gè)實(shí)例有著很大的區(qū)別。主要是因?yàn)?SBA 服務(wù)粒度更粗,無法做到像微服務(wù)那樣精準(zhǔn)的按需擴(kuò)容,擴(kuò)容太多反而會(huì)導(dǎo)致資源的浪費(fèi)。

SBA 的另一大特點(diǎn)是允許所有服務(wù)共享同一數(shù)據(jù)庫實(shí)例 ,使得它能夠直接將傳統(tǒng)單體架構(gòu)的那一套 SQL 查詢邏輯、ACID 事務(wù)搬過來,讓架構(gòu)的演進(jìn)更加的平滑。不過,共享數(shù)據(jù)也會(huì)帶來一些問題,比如數(shù)據(jù)模型變更的影響范圍更大,后面會(huì)在“ 數(shù)據(jù)拆分” 一節(jié)詳細(xì)講述。

拆分 User Interface

在大型系統(tǒng)中,單一的 User Interface 可能導(dǎo)致代碼耦合、性能瓶頸等問題,這時(shí)候我們可以進(jìn)一步對(duì)它進(jìn)行拆分。拆分的方法可以是 基于業(yè)務(wù)領(lǐng)域的拆分 ,業(yè)務(wù)相關(guān)的幾個(gè)服務(wù)使用同一個(gè) User Interface;或者 基于服務(wù)的拆分 ,為每個(gè)服務(wù)都配備一個(gè) User Interface。

圖片

拆分 Database

類似地,我們也可以對(duì)數(shù)據(jù)庫進(jìn)行拆分,可以拆分成幾個(gè)服務(wù)共享一個(gè)實(shí)例;也可以像微服務(wù)架構(gòu)中那樣,每個(gè)服務(wù)獨(dú)享一個(gè)實(shí)例。數(shù)據(jù)庫拆分的原則就是: 確保數(shù)據(jù)是解耦的,不會(huì)被其他服務(wù)所依賴 ,避免出現(xiàn)跨庫查詢或服務(wù)間通信。

圖片

增加 API 網(wǎng)關(guān)

我們也可以在 User Interface 和 Domain Services 之間增加一個(gè) API 網(wǎng)關(guān)層,提供流控、鑒權(quán)、指標(biāo)統(tǒng)計(jì)、服務(wù)發(fā)現(xiàn)等公共能力,進(jìn)一步提升系統(tǒng)架構(gòu)的安全性、可靠性、可維護(hù)性。

圖片

業(yè)務(wù)服務(wù)的設(shè)計(jì)

SBA 中的服務(wù)具有較粗的粒度,因此在業(yè)務(wù)服務(wù)的架構(gòu)設(shè)計(jì)上通常也會(huì)用到一些單體架構(gòu)模式,常見的有分層架構(gòu)和基于領(lǐng)域的 組件化架構(gòu) 。

圖片

不管是分層架構(gòu)還是組件化架構(gòu),通常都需要增加一個(gè) API 層,負(fù)責(zé)編排和轉(zhuǎn)發(fā)來自 User Interface 的業(yè)務(wù)請(qǐng)求。下面以訂單創(chuàng)建流程作為示例。

假設(shè)現(xiàn)在有一個(gè)訂單服務(wù) OrderService,當(dāng)它的 API 層接收到來自 User Interface 的訂單創(chuàng)建請(qǐng)求時(shí),API 層協(xié)調(diào)會(huì)各個(gè)組件依次完成如下的幾個(gè)業(yè)務(wù)流程 :

  1. 調(diào)用訂單組件,完成訂單ID、訂單內(nèi)容的生成。
  2. 調(diào)用支付組件,完成用戶的扣款。
  3. 調(diào)用庫存組件,更新商品的庫存數(shù)量。

因?yàn)檫@些業(yè)務(wù)流程都是在同一個(gè)服務(wù)內(nèi)完成,當(dāng)其中的某個(gè)流程異常后,我們很容易通過數(shù)據(jù)庫的 ACID 事務(wù)來完成回滾,從而能夠確保 數(shù)據(jù)的強(qiáng)一致性

相比在微服務(wù)架構(gòu)之下,訂單創(chuàng)建請(qǐng)求往往需要訂單微服務(wù)、支付微服務(wù)、庫存微服務(wù)之間協(xié)作來完成,這就涉及到分布式事務(wù),也即 BASE(Basic Availability, Soft state, Eventual consistency) 事務(wù)。BASE 事務(wù)更加的復(fù)雜,而且無法保證數(shù)據(jù)的強(qiáng)一致性。

當(dāng)然,更粗的服務(wù)粒度也會(huì)帶來 服務(wù)可用性問題 ,比如在訂單服務(wù)例子中,你會(huì)因?yàn)橛唵蜪D生成邏輯的變更而升級(jí)整個(gè)服務(wù),也會(huì)因?yàn)閹齑娼M件中的一個(gè)BUG導(dǎo)致整個(gè)服務(wù)的故障。

所以,服務(wù)粒度的粗與細(xì),實(shí)際上也是數(shù)據(jù)一致性和服務(wù)可用性的一次 trade-off

數(shù)據(jù)拆分

服務(wù)間共享數(shù)據(jù)庫使得系統(tǒng)具有更強(qiáng)的數(shù)據(jù)完整性和一致性,但簡(jiǎn)單的單庫單表數(shù)據(jù)模型會(huì)帶來耦合的問題。

在單庫單表的模型下,我們大概率會(huì)這么實(shí)現(xiàn),將與數(shù)據(jù)庫操作相關(guān)的實(shí)體對(duì)象、SQL 邏輯全部封裝在一個(gè)共享的 shared lib 庫上,供所有業(yè)務(wù)服務(wù)復(fù)用:

圖片

這樣的實(shí)現(xiàn)方式雖然簡(jiǎn)單,但是會(huì)帶來“ 牽一發(fā)而動(dòng)全身 ”的問題。假設(shè)某個(gè)服務(wù)所用到的某個(gè)字段類型需要變化,勢(shì)必會(huì)修改表結(jié)構(gòu)和 shared lib 庫,而這兩者是所有服務(wù)共用的,因此也就會(huì)導(dǎo)致所有服務(wù)都需要升級(jí)重新上線。這樣的耦合會(huì)給 SRE 帶來極大的困擾,一點(diǎn)也不 敏捷 。

更好的方法是 根據(jù)業(yè)務(wù)對(duì)數(shù)據(jù)進(jìn)行拆分 ,將相對(duì)獨(dú)立的數(shù)據(jù)拆分成多個(gè)表,每個(gè)表都有一個(gè)獨(dú)立的 lib 庫,對(duì)于公共表,則有一個(gè) common lib 庫,各服務(wù)按需依賴。對(duì)于 common lib 庫的變更,我們還可以通過版本控制來盡量降低影響范圍,但必須在 common lib 進(jìn)行版本升級(jí)時(shí) 保持向后兼容 。

圖片

SBA 雖然是分布式架構(gòu),但是也保留了單體架構(gòu)下的一些特點(diǎn),在架構(gòu)上具有較高的靈活性,也使得它在各方面的評(píng)分都比較高,沒有明顯的缺點(diǎn)。

SBA 是一個(gè) domain-partitioned 的架構(gòu),因此適合使用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)來進(jìn)行領(lǐng)域限界上下文的劃分,進(jìn)而規(guī)劃出業(yè)務(wù)獨(dú)立的服務(wù)。服務(wù)間業(yè)務(wù)獨(dú)立,而且不會(huì)相互間通信,也就意味著具有更好的 Testability 。

前文有提到過,SBA 雖然支持服務(wù)實(shí)例擴(kuò)容,但是更粗的服務(wù)粒度會(huì)導(dǎo)致擴(kuò)容的性價(jià)比并不高,因此 ScalabilityElasticity 得分不高。

ScalabilityElasticity的差異:

  • Scalability 通常指軟件系統(tǒng)在不中斷業(yè)務(wù)的前提下,通過 scale-up 或 scale-out 等手段來應(yīng)對(duì)更高業(yè)務(wù)負(fù)載,強(qiáng)調(diào)的是軟件系統(tǒng)應(yīng)對(duì)高負(fù)載的能力。
  • Elasticity 通常指硬件系統(tǒng)能夠根據(jù)實(shí)際的業(yè)務(wù)負(fù)載情況,適時(shí)增加或減少硬件資源,強(qiáng)調(diào)的是硬件資源的高效利用。

總結(jié)

如果你打算從單體架構(gòu)演進(jìn)到分布式架構(gòu),SBA 會(huì)是一個(gè)不錯(cuò)的選擇

  • 相比單體架構(gòu),SBA 按照業(yè)務(wù)進(jìn)行服務(wù)拆分,在業(yè)務(wù)解耦、開發(fā)流程敏捷等方面有著明顯的優(yōu)勢(shì)。
  • 相比其他分布式架構(gòu),SBA 有著更粗的服務(wù)粒度,因此也得以減少了服務(wù)間的遠(yuǎn)程調(diào)用、網(wǎng)絡(luò)帶寬消耗,受網(wǎng)絡(luò)故障的影響更小。
  • 服務(wù)間共享數(shù)據(jù)庫使得 SBA 支持 ACID 事務(wù),在數(shù)據(jù)一致性方面具有良好的表現(xiàn),但我們還是應(yīng)該盡量按照業(yè)務(wù)進(jìn)行分表,避免出現(xiàn)嚴(yán)重的數(shù)據(jù)耦合。
  • 在架構(gòu)評(píng)分上,SBA 各方面評(píng)分都不錯(cuò),沒有明顯的缺點(diǎn),是典型的“ 六邊形戰(zhàn)士 ”。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    505

    瀏覽量

    25420
  • 微服務(wù)架構(gòu)

    關(guān)注

    0

    文章

    23

    瀏覽量

    2945
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    微服務(wù)架構(gòu)和CQRS架構(gòu)基本概念介紹

    微服務(wù)架構(gòu)現(xiàn)在很熱,到處可以看到各大互聯(lián)網(wǎng)公司的微服務(wù)實(shí)踐的分享總結(jié)。但是,我今天的分享和微服務(wù)沒有關(guān)系,希望可以帶給大家一些新的東西。如果一定要說
    發(fā)表于 05-22 09:03

    微服務(wù)優(yōu)勢(shì)_微服務(wù)架構(gòu)的好處與不足

    微服務(wù)是用一組小服務(wù)的方式來構(gòu)建一個(gè)應(yīng)用,服務(wù)獨(dú)立運(yùn)行在不同的進(jìn)程中,服務(wù)之間通過輕量的通訊機(jī)制(如RESTful接口)來交互,并且服務(wù)可以
    發(fā)表于 02-23 11:24 ?4371次閱讀

    什么是微服務(wù)架構(gòu)_微服務(wù)架構(gòu)的優(yōu)缺點(diǎn)及應(yīng)用

    什么是微服務(wù)架構(gòu) 簡(jiǎn)單地說,微服務(wù)是系統(tǒng)架構(gòu)上的一種設(shè)計(jì)風(fēng)格, 它的主旨是將一個(gè)原本獨(dú)立的系統(tǒng)拆分成多個(gè)小型服務(wù),這些小型
    的頭像 發(fā)表于 06-02 10:03 ?1.7w次閱讀
    什么是<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>_<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>的優(yōu)缺點(diǎn)及應(yīng)用

    SOA架構(gòu)微服務(wù)架構(gòu)的主要區(qū)別

    SOA和微服務(wù)架構(gòu)一個(gè)層面的東西,而對(duì)于ESB和微服務(wù)網(wǎng)關(guān)是一個(gè)層面的東西,一個(gè)談到是架構(gòu)風(fēng)格和方法,一個(gè)談的是實(shí)現(xiàn)工具或組件。SOA架構(gòu)
    的頭像 發(fā)表于 05-04 14:11 ?5748次閱讀
    SOA<b class='flag-5'>架構(gòu)</b>和<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>的主要區(qū)別

    微服務(wù)架構(gòu)有哪些_微服務(wù)架構(gòu)設(shè)計(jì)模式

    小伙伴們知道常用的微服務(wù)架構(gòu)框架有哪些嗎?上回我們介紹了一些常用的微服務(wù)架構(gòu)設(shè)計(jì)模式,這次我們就來了解一下一些常用的
    的頭像 發(fā)表于 05-17 17:06 ?2.9w次閱讀
    <b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>有哪些_<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>設(shè)計(jì)模式

    微服務(wù)架構(gòu)的特點(diǎn)_微服務(wù)架構(gòu)適用場(chǎng)景

     微服務(wù)架構(gòu)是一項(xiàng)在云中部署應(yīng)用和服務(wù)的新技術(shù)。
    的頭像 發(fā)表于 05-17 17:28 ?4977次閱讀

    微服務(wù)軟件架構(gòu)應(yīng)用研究綜述

    自2014年,微服務(wù)架構(gòu)概念經(jīng)Martin Flower提出以來,受到廣泛關(guān)注,為更好了解微服務(wù)架構(gòu)風(fēng)格,本文首先分析、梳理了軟件架構(gòu)的發(fā)展
    發(fā)表于 05-26 09:26 ?2次下載

    分層架構(gòu)微服務(wù)架構(gòu)介紹(一)

    們看到一個(gè)架構(gòu)模式的名字時(shí),也要馬上想到對(duì)應(yīng)的架構(gòu)圖及其基本特點(diǎn)。比如,當(dāng)談到**分層架構(gòu)**時(shí),我們就應(yīng)該想起它的架構(gòu)圖是怎樣的、有哪些出
    的頭像 發(fā)表于 05-10 16:55 ?1032次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>到</b><b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>介紹</b>(一)

    分層架構(gòu)微服務(wù)架構(gòu)介紹(二)

    系統(tǒng)按照功能劃分成前端和后端,分別部署在兩臺(tái)服務(wù)器上,問題得到了緩解,于是便有了**Client/Server架構(gòu)**的出現(xiàn)。
    的頭像 發(fā)表于 05-10 16:57 ?657次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>到</b><b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>介紹</b>(二)

    分層架構(gòu)微服務(wù)架構(gòu)介紹(三)

    **管道架構(gòu)** (Pipeline Architecture),通常也被稱為 **管道-過濾器架構(gòu)** (Pipes and Filter Architecture),是最常用的架構(gòu)模式之一
    的頭像 發(fā)表于 05-10 16:58 ?589次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>到</b><b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>介紹</b>(三)

    分層架構(gòu)微服務(wù)架構(gòu)介紹(四)

    微內(nèi)核架構(gòu) (Microkernel Architecture),也被稱為 **插件式架構(gòu)** (plug-in architecture),作為一個(gè)在幾十年前就被創(chuàng)建出來的架構(gòu)模式,它如今仍然被
    的頭像 發(fā)表于 05-10 17:00 ?685次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>到</b><b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>介紹</b>(四)

    springcloud微服務(wù)架構(gòu)

    Spring Cloud是一個(gè)開源的微服務(wù)架構(gòu)框架,它提供了一系列工具和組件,用于構(gòu)建和管理分布式系統(tǒng)中的微服務(wù)。它基于Spring框架,旨在通過簡(jiǎn)化開發(fā)過程和降低系統(tǒng)復(fù)雜性來幫助開發(fā)人員構(gòu)建彈性
    的頭像 發(fā)表于 11-23 09:24 ?1065次閱讀

    docker微服務(wù)架構(gòu)實(shí)戰(zhàn)

    的容器化技術(shù),為微服務(wù)架構(gòu)的實(shí)施提供了強(qiáng)大的支持。本文將介紹Docker微服務(wù)架構(gòu)的實(shí)戰(zhàn)經(jīng)驗(yàn),包括Docker的概述、
    的頭像 發(fā)表于 11-23 09:26 ?578次閱讀

    設(shè)計(jì)微服務(wù)架構(gòu)的原則

    微服務(wù)是一種軟件架構(gòu)策略,有利于改善整體性能和可擴(kuò)展性。你可能會(huì)想,我的團(tuán)隊(duì)需不需要采用微服務(wù),設(shè)計(jì)微服務(wù)架構(gòu)有哪些原則?本文會(huì)給你一些靈感
    的頭像 發(fā)表于 11-26 08:05 ?501次閱讀
    設(shè)計(jì)<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>的原則

    架構(gòu)與設(shè)計(jì) 常見微服務(wù)分層架構(gòu)的區(qū)別和落地實(shí)踐

    架構(gòu)風(fēng)格越傾向于清晰的職責(zé)定位,且讓領(lǐng)域模型成為架構(gòu)的核心。 基于這些架構(gòu)風(fēng)格,在軟件架構(gòu)設(shè)計(jì)過程中又有非常多的架構(gòu)
    的頭像 發(fā)表于 10-22 15:34 ?51次閱讀
    <b class='flag-5'>架構(gòu)</b>與設(shè)計(jì) 常見<b class='flag-5'>微服務(wù)</b><b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)</b>的區(qū)別和落地實(shí)踐