架構(gòu)應(yīng)用(10),SOA&微服務(wù)

一、面向服務(wù)的架構(gòu) SOA

SOA 提出的背景是企業(yè)內(nèi)部的 IT 系統(tǒng)重復(fù)建設(shè)且效率低下。

SOA產(chǎn)生的背景:

??企業(yè)各部門有獨(dú)立的 IT 系統(tǒng),這些系統(tǒng)可能都涉及人員管理,各 IT 系統(tǒng)都需要重復(fù)開發(fā)人員管理的功能。

??隨著業(yè)務(wù)的發(fā)展,復(fù)雜度越來越高,更多的流程和業(yè)務(wù)需要多個(gè) IT 系統(tǒng)合作完成。

??各個(gè)獨(dú)立的 IT 系統(tǒng)可能采購于不同的供應(yīng)商,實(shí)現(xiàn)技術(shù)不同,企業(yè)自己也不太可能基于這些系統(tǒng)進(jìn)行重構(gòu)。

SOA 提出了 三個(gè)關(guān)鍵概念:

服務(wù),所有業(yè)務(wù)功能都是一項(xiàng)服務(wù), 服務(wù)就意味著要對(duì)外提供開放的能力。服務(wù)可大可小, 可簡(jiǎn)單也可復(fù)雜。

ESB,將企業(yè)中各個(gè)不同的服務(wù)連接在一起,SOA 使用 ESB 來屏蔽異構(gòu)系統(tǒng) 對(duì)外提供各種不同的接口方式, 以此來達(dá)到服務(wù)間高效的互聯(lián)互通。

松耦合,松耦合的目的是減少各個(gè)服務(wù)間的依賴和互相影響 。


典型的 SOA 架構(gòu)

SOA 最廣為人垢病的就是 ESB, ESB 需要實(shí)現(xiàn)與各種系統(tǒng)間的協(xié)議轉(zhuǎn)換、數(shù)據(jù)轉(zhuǎn)換、透明的動(dòng)態(tài)路由等功能 。ESB 要完成這么多協(xié)議和數(shù)據(jù)格式的互相轉(zhuǎn)換,工作量和復(fù)雜度都很大,而且這種轉(zhuǎn)換是需要耗費(fèi)大量計(jì)算性能的,當(dāng) ESB 承載的消息 太多時(shí), ESB 本身會(huì)成為整個(gè)系統(tǒng)的性能瓶頸 。

二、微服務(wù)

提到微服務(wù),都會(huì)跟SOA進(jìn)行對(duì)比。我們看一些常見的對(duì)比觀點(diǎn):

? 微服務(wù)是 SOA 的實(shí)現(xiàn)方式,SOA 是一種架構(gòu)理念,而微服務(wù)是 SOA 理念的一種具體實(shí)現(xiàn)方法。

??微服務(wù)是去掉 ESB 后的 SOA。

?微服務(wù)是一種和 SOA 相似但本質(zhì)上不同的架構(gòu)理念,認(rèn)為微服務(wù)和 SOA 只是有點(diǎn)類似,但本質(zhì)上是不同的架構(gòu)設(shè)計(jì)理念。

對(duì)比一下 SOA 和微服務(wù):

1.服務(wù)粒度:SOA 的服務(wù)粒度要粗一些,而微服務(wù)的服務(wù)粒度要細(xì)一些。

2.服務(wù)通信:SOA 采用了 ESB 作為服務(wù)間通信的關(guān)鍵組件,負(fù)責(zé)服務(wù)定義、服務(wù)路由 、消息轉(zhuǎn)換、 消息傳遞,總體上是重量級(jí)的實(shí)現(xiàn)。微服務(wù)推薦使用統(tǒng)一 的協(xié)議和格式,例如,阻STful 協(xié)議、盯C 協(xié)議,無須 ESB 這樣的重量級(jí)實(shí)現(xiàn)。

3.服務(wù)交付:SOA 對(duì)服務(wù)的交付并沒有特殊要求,SOA 更多考慮的是兼容己有的系統(tǒng);微服務(wù)的架構(gòu)理念要求“快速交付飛相應(yīng)地要求采取自動(dòng)化測(cè)試、持續(xù)集成、自動(dòng)化部署等 敏捷開發(fā)相關(guān)的最佳實(shí)踐 。

4.應(yīng)用場(chǎng)景:SOA 更加適合于龐大、 復(fù)雜、異構(gòu)的企業(yè)級(jí)系統(tǒng);微服務(wù)更加適合于快速、輕量級(jí)、基于 Web 的互聯(lián)網(wǎng)系統(tǒng),這類系統(tǒng)業(yè)務(wù)變化快,需 要快速嘗試、快速交付。

微服務(wù)的精華,也是微服務(wù)與 SOA 的本質(zhì)區(qū)別:

????????small 服務(wù)細(xì)粒度、 lightweight 通信輕量級(jí)、automated 持續(xù)交付

微服務(wù)有哪些坑:

??服務(wù)劃分過細(xì),服務(wù)間關(guān)系復(fù)雜。

??服務(wù)數(shù)量太多,團(tuán)隊(duì)效率急劇下降。(康威定律)

??調(diào)用鏈太長(zhǎng),性能下降,問題定位困難。

??沒有自動(dòng)化支撐,無法快速交付。

??沒有服務(wù)治理,微服務(wù)數(shù)量多了后管理混亂?。服務(wù)路由,故障隔離,注冊(cè)和發(fā)現(xiàn)。

微服務(wù)最佳實(shí)踐:

1.拆分粒度,“兩個(gè)披薩”理論(每個(gè)團(tuán)隊(duì)的人數(shù)不能多到兩個(gè)披薩都不夠吃的地步);“ 三個(gè)火槍手”的微服務(wù)拆分粒度原則,即 一個(gè)微服務(wù)三個(gè)人負(fù)責(zé)開發(fā) 。

當(dāng)我們?cè)趯?shí)施微服務(wù)架構(gòu)時(shí),根據(jù)團(tuán)隊(duì)規(guī)模來劃分微服務(wù)數(shù)量 ,如果業(yè)務(wù)規(guī)繼續(xù)發(fā)展,團(tuán)隊(duì)規(guī)模擴(kuò)大,我們?cè)賹⒓?有的微服務(wù)進(jìn)行拆分 。 例如,團(tuán)隊(duì)最初有 6 個(gè)人,那么可以劃分為 2 個(gè)微服務(wù)。

2.拆分方法

(1)基于業(yè)務(wù)邏輯拆分。

將系統(tǒng)中的業(yè)務(wù)模塊按照職責(zé)范圍識(shí)別出來,每個(gè)單獨(dú)的業(yè) 務(wù)模塊拆分為一個(gè)獨(dú)立的服務(wù)。

(2)基于可擴(kuò)展拆分。

將系統(tǒng)中的業(yè)務(wù)模塊按照穩(wěn)定性進(jìn)行排序,將己經(jīng)成熟和改動(dòng)不大的服務(wù)拆分為穩(wěn)定服務(wù), 將經(jīng)常變化和法代的服務(wù)拆分為變動(dòng)服務(wù)。穩(wěn)定的服務(wù)粒度可以粗一些,即使邏輯上沒有強(qiáng)關(guān) 聯(lián)的服務(wù),也可以放在同一個(gè)子系統(tǒng)中。

(3)基于可靠性拆分。

將系統(tǒng)中的業(yè)務(wù)模塊按照優(yōu)先級(jí)排序,將可靠性要求高的核心服務(wù)和可靠性要求低的非核心服務(wù)拆分開來,然后重點(diǎn)保證核心服務(wù)的高可用。

基于可靠性拆分帶來的好處:避免非核心服務(wù)故障影響核心服務(wù),核心服務(wù)高可用方案可以更簡(jiǎn)單,能夠降低高可用成本。

(4)基于性能拆分。

將性能要求高或性能壓力大的模塊拆分出來,避免 性能壓力大的服務(wù)影響其他服務(wù)。

以上幾種拆分方式不是多選 1 ,而是可以根據(jù)實(shí)際情況自由排列組合。

微服務(wù)的基礎(chǔ)設(shè)施


微服務(wù)基礎(chǔ)設(shè)施

微服務(wù)并不是很多人認(rèn)為的那樣又簡(jiǎn)單又輕量級(jí)。要做好微服務(wù),這些基礎(chǔ)設(shè) 施都是必不可少的 , 否則微服務(wù)就會(huì)變成一個(gè)焦油坑,讓業(yè)務(wù)和團(tuán)隊(duì)在里面不斷掙扎而無法自拔。

微服務(wù)并沒有減少復(fù)雜度,而只是將復(fù)雜度從 ESB 轉(zhuǎn)移到 了 基礎(chǔ)設(shè)施 。 我們可以看到,“服務(wù)發(fā)現(xiàn)”“服務(wù)路由”等其實(shí)都是 ESB 的功能,只是在微服務(wù)中剝離出來成 了獨(dú)立的基礎(chǔ)系統(tǒng)。


我需要一個(gè)高并發(fā)的架構(gòu),我的系統(tǒng)要改造成微服務(wù)嗎?

https://yq.aliyun.com/articles/623271?utm_content=m_1000011884

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

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

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