微服務(wù)拆分之道,幾條策略和堅(jiān)持的原則
點(diǎn)擊“開發(fā)者技術(shù)前線”,選擇“星標(biāo)??”
在看|星標(biāo)|留言, 真愛
背景
ALIWARE
拆分目的是什么?
ALIWARE
開發(fā)簡(jiǎn)單直接,代碼和項(xiàng)目集中式管理。 排查問題時(shí)只需要排查這個(gè)應(yīng)用就可以了,更有針對(duì)性。
只需要維護(hù)一個(gè)工程,節(jié)省維護(hù)系統(tǒng)運(yùn)行的人力成本。

拆分時(shí)機(jī)應(yīng)該如何決策?
ALIWARE

業(yè)務(wù)規(guī)模:業(yè)務(wù)模式得到市場(chǎng)的驗(yàn)證,需要進(jìn)一步加快腳步快速占領(lǐng)市場(chǎng),這時(shí)業(yè)務(wù)的規(guī)模變得越來越大,按產(chǎn)品生命周期來劃分(導(dǎo)入期、成長(zhǎng)期、成熟期、衰退期)這時(shí)一般在成長(zhǎng)期階段。如果是導(dǎo)入期,盡量采用單體架構(gòu)。 團(tuán)隊(duì)規(guī)模:一般是團(tuán)隊(duì)達(dá)到百人的時(shí)候。
技術(shù)儲(chǔ)備:領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、注冊(cè)中心、配置中心、日志系統(tǒng)、持續(xù)交付、監(jiān)控系統(tǒng)、分布式定時(shí)任務(wù)、CAP 理論、分布式調(diào)用鏈、API 網(wǎng)關(guān)等等。 人才儲(chǔ)備:精通微服務(wù)落地經(jīng)驗(yàn)的架構(gòu)師及相應(yīng)開發(fā)同學(xué)。
研發(fā)效率:研發(fā)效率大幅下降,具體問題參加上面拆分目的里提到的。
拆分時(shí)應(yīng)該堅(jiān)守哪些指導(dǎo)原則?
ALIWARE
1. 單一服務(wù)內(nèi)部功能高內(nèi)聚低耦合

拆分的粒度是不是越細(xì)越好?
ALIWARE

拆分策略有哪些?
ALIWARE
第一步,找出領(lǐng)域?qū)嶓w和值對(duì)象等領(lǐng)域?qū)ο蟆?/span> 第二步,找出聚合根,根據(jù)實(shí)體、值對(duì)象與聚合根的依賴關(guān)系,建立聚合。
第三步,根據(jù)業(yè)務(wù)及語義邊界等因素,定義限界上下文。 第四步,每一個(gè)限界上下文可以拆分為一個(gè)對(duì)應(yīng)的微服務(wù),但也要考慮一些非功能因素。

擴(kuò)展性:區(qū)分系統(tǒng)中變與不變的部分,不變的部分一般是成熟的、通用的服務(wù)功能,變的部分一般是改動(dòng)比較多、滿足業(yè)務(wù)迭代擴(kuò)展性需要的功能,我們可以將不變的部分拆分出來,作為共用的服務(wù),將變的部分獨(dú)立出來滿足個(gè)性化擴(kuò)展需要。同時(shí)根據(jù)二八原則,系統(tǒng)中經(jīng)常變動(dòng)的部分大約只占 20%,而剩下的 80% 基本不變或極少變化,這樣的拆分也解決了發(fā)布頻率過多而影響成熟服務(wù)穩(wěn)定性的問題。
復(fù)用性:不同的業(yè)務(wù)里或服務(wù)里經(jīng)常會(huì)出現(xiàn)重復(fù)的功能,比如每個(gè)服務(wù)都有鑒權(quán)、限流、安全及日志監(jiān)控等功能,可以將這些通過的功能拆分出來形成獨(dú)立的服務(wù),也就是微服務(wù)里面的 API 網(wǎng)關(guān)。在如,對(duì)于滴滴業(yè)務(wù),有快車和順風(fēng)車業(yè)務(wù),其中都涉及到了訂單支付的功能,那么就可以將訂單支付獨(dú)立出來,作為通用服務(wù)服務(wù)好上層業(yè)務(wù)。如下圖:

高性能:將性能要求高或者性能壓力大的模塊拆分出來,避免性能壓力大的服務(wù)影響其它服務(wù)。常見的拆分方式和具體的性能瓶頸有關(guān),例如電商的搶購(gòu),性能壓力最大的是入口的排隊(duì)功能,可以將排隊(duì)功能獨(dú)立為一個(gè)服務(wù)。同時(shí),我們也可以基于讀寫分離來拆分,比如電商的商品信息,在 App 端主要是商詳有大量的讀取操作,但是寫入端商家中心訪問量確很少。因此可以對(duì)流量較大或較為核心的服務(wù)做讀寫分離,拆分為兩個(gè)服務(wù)發(fā)布,一個(gè)負(fù)責(zé)讀,另外一個(gè)負(fù)責(zé)寫。還有數(shù)據(jù)一致性是另一個(gè)基于性能維度拆分需要考慮的點(diǎn),對(duì)于強(qiáng)一致的數(shù)據(jù),屬于強(qiáng)耦合,盡量放在同一個(gè)服務(wù)中(但是有時(shí)會(huì)因?yàn)楦鞣N原因需要進(jìn)行拆分,那就需要有響應(yīng)的機(jī)制進(jìn)行保證),弱一致性通常可以拆分為不同的服務(wù)。

高可用:將可靠性要求高的核心服務(wù)和可靠性要求低的非核心服務(wù)拆分開來,然后重點(diǎn)保證核心服務(wù)的高可用。具體拆分的時(shí)候,核心服務(wù)可以是一個(gè)也可以是多個(gè),只要最終的服務(wù)數(shù)量滿足“三個(gè)火槍手”的原則就可以。比如針對(duì)商家服務(wù),可以拆分一個(gè)核心服務(wù)一個(gè)非核心服務(wù),核心服務(wù)供交易服務(wù)訪問,非核心提供給商家中心訪問。
安全性:不同的服務(wù)可能對(duì)信息安全有不同的要求,因此把需要高度安全的服務(wù)拆分出來,進(jìn)行區(qū)別部署,比如設(shè)置特定的 DMZ 區(qū)域?qū)Ψ?wù)進(jìn)行分區(qū)部署,可以更有針對(duì)性地滿足信息安全的要求,也可以降低對(duì)防火墻等安全設(shè)備吞吐量、并發(fā)性等方面的要求,降低成本,提高效率。
異構(gòu)性:對(duì)于對(duì)開發(fā)語言種類有要求的業(yè)務(wù)場(chǎng)景,可以用不同的語言將其功能獨(dú)立出來實(shí)現(xiàn)一個(gè)獨(dú)立服務(wù)。
服務(wù)都拆了為什么還要合并?
ALIWARE

拆分過程中要注意的風(fēng)險(xiǎn)
ALIWARE
— 完 —
點(diǎn)這里??關(guān)注我,記得標(biāo)星呀~
前線推出學(xué)習(xí)交流一定要備注: 研究/工作方向+地點(diǎn)+學(xué)校/公司+昵稱(如JAVA+上海 掃碼加小編微信,進(jìn)群和大佬們零距離
回復(fù)“電子書” “資料” 領(lǐng)取一份干貨,數(shù)百面試手冊(cè)等
Log4j2 維護(hù)者發(fā)聲:沒有工資,還要挨罵!!
評(píng)論
圖片
表情
