一、面向服務(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 最廣為人垢病的就是 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ù)并不是很多人認(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