摘要:?最近大家都在談微服務(wù),隨著越來(lái)越多的在線業(yè)務(wù)需要提供更大并發(fā)的scale-up 和 scale out能力,微服務(wù)確實(shí)提供了比較好分布式服務(wù)的解決方案。
阿里云高級(jí)解決方案架構(gòu)師 楊旭
世界最大混合云的總架構(gòu)師,4年前,開(kāi)始作為雙11阿里云技術(shù)負(fù)責(zé)人,負(fù)責(zé)搭建全球最大的混合云結(jié)構(gòu),把 “雙11”的電商業(yè)務(wù)和技術(shù)場(chǎng)景在阿里云上實(shí)現(xiàn),并保障這個(gè)混合云在雙11當(dāng)天能夠滿足全球客戶的購(gòu)物需求。
正文:
最近大家都在談微服務(wù),隨著越來(lái)越多的在線業(yè)務(wù)需要提供更大并發(fā)的scale-up 和 scale out能力,微服務(wù)確實(shí)提供了比較好分布式服務(wù)的解決方案。
微服務(wù)并不陌生,知道SOA其實(shí)也就很容易理解微服務(wù),可以把微服務(wù)當(dāng)做去除了ESB的SOA。ESB是SOA企業(yè)服務(wù)架構(gòu)中的總線,而微服務(wù)是去中心化的分布式軟件架構(gòu),個(gè)人認(rèn)為最大的設(shè)計(jì)區(qū)別在于設(shè)計(jì)初衷:
SOA是為了最大化的實(shí)現(xiàn)復(fù)雜系統(tǒng)代碼的可復(fù)用性
而微服務(wù)是為了最大限度的解耦,不同業(yè)務(wù)系統(tǒng)甚至可以是不同語(yǔ)言之間的通信
沒(méi)有最優(yōu)的架構(gòu),只有最合適的架構(gòu),一切系統(tǒng)設(shè)計(jì)原則都要以解決業(yè)務(wù)問(wèn)題為最終目標(biāo),脫離實(shí)際業(yè)務(wù)的技術(shù)情懷架構(gòu)往往會(huì)給系統(tǒng)帶入大坑。所有問(wèn)題的前提要搞清楚我們今天面臨的業(yè)務(wù)量有多大,增長(zhǎng)走勢(shì)是什么樣,而且解決高并發(fā)的過(guò)程,一定是一個(gè)循序漸進(jìn)逐步的過(guò)程。
網(wǎng)上的一張圖很經(jīng)典,總結(jié)的非常好:
整個(gè)系統(tǒng)進(jìn)化分為三個(gè)階段:
x軸,水平擴(kuò)展階段,通過(guò)負(fù)載均衡服務(wù)器不斷的橫向擴(kuò)充應(yīng)用服務(wù)器,水平擴(kuò)展最重要的問(wèn)題是需要注意不用服務(wù)器之間的如何保持session和會(huì)話同步,不能讓用戶在不通服務(wù)器之間切換時(shí)有感知應(yīng)用擴(kuò)展后自然遇到的問(wèn)題就是DB的瓶頸:連接數(shù),iops等。
z軸,就是對(duì)數(shù)據(jù)庫(kù)的拆分,難度上了一個(gè)臺(tái)階,Sharding的基本思想就要把一個(gè)數(shù)據(jù)庫(kù)如何進(jìn)行切分,可以分為水平切分和垂直切分,水平切分相對(duì)簡(jiǎn)單,一主多從,多主都可以,根據(jù)業(yè)務(wù)的需要,多主切分設(shè)計(jì)時(shí)需要注意主鍵的關(guān)系,解決多寫(xiě)在進(jìn)行數(shù)據(jù)同步時(shí)候的沖突問(wèn)題,垂直拆分更加復(fù)雜,一般都會(huì)涉及到架構(gòu)邏輯的改造,需要引入中間件,來(lái)進(jìn)行數(shù)據(jù)源的管理,垂直拆分時(shí)把關(guān)系緊密(比如同一模塊)的表切分出來(lái)放在一個(gè)庫(kù)上,或者通過(guò)hash進(jìn)行拆分,從而將原有數(shù)據(jù)庫(kù)切分成類似矩陣一樣可以無(wú)限擴(kuò)充的隊(duì)列。
y軸擴(kuò)展,最后就是功能分解了,也就是我們講的微服務(wù)切分。微服務(wù)拆分將巨型應(yīng)用按照功能模塊分解為一組組不同的服務(wù),淘寶的系統(tǒng)當(dāng)年也經(jīng)歷了這樣的過(guò)程,通過(guò)五彩石項(xiàng)目從單一的war包拆分成了今天的大家看到買家,賣家中心,交易等系統(tǒng)。
引入微服務(wù)前你要知道的兩三事:
**
1、成本升高,引入微服務(wù)架構(gòu),需要對(duì)原來(lái)單一系統(tǒng)進(jìn)行拆分,1到100以后多服務(wù)的部署會(huì)帶來(lái)成本的升高**
2、解決分布式事務(wù)一致性問(wèn)題
以前單一的系統(tǒng)好處很多,一條sql解決完成所有業(yè)務(wù)邏輯,微服務(wù)做完一件事情需要涉及多系統(tǒng)調(diào)用,系統(tǒng)間網(wǎng)絡(luò)的不確定性給結(jié)果帶來(lái)很多不確定性,如今天淘寶的系統(tǒng),完成一次交易下單需要在上百個(gè)系統(tǒng)之間調(diào)用,如何保證系統(tǒng)的可靠性,以及核心數(shù)據(jù)如錢的最終一致性是設(shè)計(jì)之初就要想明白的,這里大多都要借助中間件來(lái)實(shí)現(xiàn)。
3、微服務(wù)的邏輯設(shè)計(jì)原則
隨著不斷拆分微服務(wù),以及業(yè)務(wù)的迭代發(fā)展,系統(tǒng)之間極有可能出現(xiàn)混亂調(diào)用,所以微服務(wù)的頂層設(shè)計(jì)顯得尤為重要,架構(gòu)師需要搞清楚微服務(wù)的架構(gòu)模型。那核心的設(shè)計(jì)思想就在于如何進(jìn)行服務(wù)的分層,以及服務(wù)的重用,通過(guò)分層將服務(wù)進(jìn)行分配,上層服務(wù)包裝下層服務(wù),下層服務(wù)負(fù)責(zé)原子性的操作,上層服務(wù)對(duì)下層服務(wù)進(jìn)行業(yè)務(wù)性的組合編排,一定要理解業(yè)務(wù),微服務(wù)拆分不是簡(jiǎn)單的系統(tǒng)組合,再說(shuō)一遍一定要理解業(yè)務(wù),否則上層服務(wù)一定會(huì)出現(xiàn)大量的交叉調(diào)用,系統(tǒng)復(fù)雜度會(huì)指數(shù)級(jí)上升,好的微服務(wù)架構(gòu)師一定是業(yè)務(wù)架構(gòu)師,基于業(yè)務(wù)的建瓴,微服務(wù)設(shè)計(jì)三部曲,遵循自下而上的設(shè)計(jì)原則:
原子服務(wù)
首先確認(rèn)最基本業(yè)務(wù)最維度的原子服務(wù),原子服務(wù)定義就是大家都會(huì)最大化重用的功能,需要在應(yīng)用內(nèi)的閉環(huán)操作,沒(méi)有任何跨其他服務(wù)的分支邏輯,杜絕對(duì)其他服務(wù)的調(diào)用,有自己獨(dú)立的數(shù)據(jù)存儲(chǔ),作為最底層服務(wù)抽象存在,以淘寶為例,賣家數(shù)據(jù),賣家數(shù)據(jù),訂單數(shù)據(jù)就屬于最基本的原子服務(wù)。
服務(wù)組合
在業(yè)務(wù)場(chǎng)景下,一個(gè)功能都需要跨越多個(gè)原子服務(wù)來(lái)完成一個(gè)動(dòng)作。組合服務(wù)就是將業(yè)務(wù)邏輯抽象拆成獨(dú)立自主的域,域之間需要保持隔離,服務(wù)組合會(huì)使用到多個(gè)原子服務(wù)來(lái)完成業(yè)務(wù)邏輯,如淘寶的交易平臺(tái)會(huì)調(diào)用用戶,商品,庫(kù)存等系統(tǒng)。
業(yè)務(wù)編排
最外層就是面向用戶的業(yè)務(wù)流程,一個(gè)產(chǎn)品化的商業(yè)流程需要對(duì)組合服務(wù)進(jìn)行邏輯編排來(lái)完成最終的業(yè)務(wù)結(jié)果,這個(gè)編排服務(wù)可以完全是自動(dòng)化的,通過(guò)工作流引擎進(jìn)行組合自動(dòng)化來(lái)完成特定SOP定義,這對(duì)企業(yè)應(yīng)用的自動(dòng)化流程改進(jìn)也很有意義。如淘寶類目的雙十一活動(dòng),通過(guò)對(duì)不通服務(wù)組合進(jìn)行重用實(shí)現(xiàn)不通的營(yíng)銷活動(dòng)邏輯。
4、運(yùn)維管理的復(fù)雜度提升
微服務(wù)讓?xiě)?yīng)用數(shù)量增加很多,鏈路的集成、測(cè)試、部署都成為新的挑戰(zhàn),以前一個(gè)war包解決的問(wèn)題,需要通過(guò)多應(yīng)用發(fā)布來(lái)完成,發(fā)布時(shí)服務(wù)之間的依賴影響,會(huì)導(dǎo)致功能不可用,測(cè)試階段的依賴性可能會(huì)讓用例跑不下去,這些都會(huì)是需要新考慮的問(wèn)題,需要有平臺(tái)化的工具來(lái)支撐,目前阿里通過(guò)aone產(chǎn)品來(lái)保證從日常到預(yù)發(fā)到線上的持續(xù)集成交付。
實(shí)踐:
目前很多微服務(wù)通過(guò)DevOps和Docker來(lái)落地, 也可以借助云上FAAS平臺(tái)來(lái)實(shí)現(xiàn),如AWS的Lambda,阿里云的Bazaar,都可以把Function發(fā)布成一個(gè)Service,結(jié)合云效系統(tǒng)來(lái)進(jìn)行服務(wù)整個(gè)生命周期的編排,可以極大的提高工程效率,實(shí)現(xiàn)應(yīng)用微服務(wù)。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
電子發(fā)燒友App


































評(píng)論