按:原文發(fā)表于2017年8月湿颅。
微服務(wù)架構(gòu)
那一年架構(gòu)大師Martin Fowler寫(xiě)了一篇名字叫做Microservices的著名文章乐疆,微服務(wù)的思想?yún)s是在那之前就流行在架構(gòu)師的圈子里面。這思想與結(jié)構(gòu)化編程的理念一脈相承碗旅,即軟件系統(tǒng)的功能應(yīng)該切分為盡可能的簡(jiǎn)單的模塊笨使,然后通過(guò)某種標(biāo)準(zhǔn)的方式組裝起來(lái)。在進(jìn)程內(nèi)我們可以將代碼解耦成一個(gè)個(gè)類和對(duì)象销部,通過(guò)對(duì)象間消息把它們組合起來(lái);在UNIX系統(tǒng)里面我們實(shí)現(xiàn)了一個(gè)個(gè)極小而專一的工具制跟,利用管道組合這些小工具從而完成各種復(fù)雜的任務(wù)舅桩;于是在企業(yè)級(jí)架構(gòu)中,將系統(tǒng)拆分成一個(gè)個(gè)獨(dú)立的應(yīng)用雨膨,相互之間通過(guò)HTTP協(xié)議或是企業(yè)消息總線進(jìn)行連接擂涛,也就是自然而然的事情了。
每一個(gè)微服務(wù)都是一名匠人聊记,它只專注于一件事情撒妈,而且能夠很好的完成它。將一個(gè)軟件系統(tǒng)重構(gòu)為微服務(wù)架構(gòu)的過(guò)程排监,就是不斷的將單個(gè)獨(dú)立的任務(wù)發(fā)掘出來(lái)并且將其代理給一位位值得托付的工匠的過(guò)程狰右。(還真是像我們發(fā)展創(chuàng)業(yè)團(tuán)隊(duì)的過(guò)程喲 0_0)
如果我們仔細(xì)觀察交易從被用戶構(gòu)造出來(lái)發(fā)送到網(wǎng)絡(luò)開(kāi)始的整個(gè)處理流程,我們會(huì)發(fā)現(xiàn)主要有這樣幾個(gè)階段:
- 交易在網(wǎng)絡(luò)上被廣播社露,擴(kuò)散挟阻。
- 網(wǎng)絡(luò)給交易安排一個(gè)唯一而且遞增的“序號(hào)”琼娘,例如交易所在的區(qū)塊高度+區(qū)塊內(nèi)index就是一個(gè)“序號(hào)”峭弟。
- 每個(gè)節(jié)點(diǎn)都看到了交易的序號(hào),并且按照順序?qū)灰走M(jìn)行處理脱拼,例如將交易作為參數(shù)傳給智能合約就是一種處理方式瞒瘸。
- 用戶通過(guò)節(jié)點(diǎn)提供的接口,獲得交易被處理后的結(jié)果
這幾個(gè)主要階段正好對(duì)應(yīng)了cita里面的四個(gè)主要微服務(wù):
- 網(wǎng)絡(luò)服務(wù)
- 共識(shí)服務(wù)
- 執(zhí)行服務(wù)
- RPC服務(wù)
cita網(wǎng)絡(luò)中的每一個(gè)全節(jié)點(diǎn)都會(huì)運(yùn)行這一組服務(wù)熄浓。由于這些服務(wù)可以運(yùn)行在多臺(tái)服務(wù)器上情臭,因此cita里面的節(jié)點(diǎn)概念不再和服務(wù)器一一綁定,而是變成了由一臺(tái)或者多臺(tái)物理服務(wù)器構(gòu)成的集群赌蔑。集群運(yùn)行在企業(yè)內(nèi)部俯在,因此同一節(jié)點(diǎn)的微服務(wù)之間可以相互信任,共享相同的安全邊界娃惯。
微服務(wù)通過(guò)消息中間件連接(雖然cita v0.8只支持RabbitMQ跷乐,但對(duì)消息中間件透明從一開(kāi)始就是cita的設(shè)計(jì)目標(biāo),對(duì)kafka的支持正在開(kāi)發(fā)中趾浅,很快就會(huì)與大家見(jiàn)面_)愕提。網(wǎng)絡(luò)醬負(fù)責(zé)與P2P網(wǎng)絡(luò)中的其它節(jié)點(diǎn)建立連接馒稍,交換消息。無(wú)論交易被發(fā)送到哪個(gè)節(jié)點(diǎn)浅侨,都會(huì)被擴(kuò)散并被本節(jié)點(diǎn)的網(wǎng)絡(luò)醬接收到纽谒,網(wǎng)絡(luò)醬接收到這個(gè)交易之后,會(huì)通過(guò)消息的形式把它遞交給共識(shí)醬如输。共識(shí)醬又會(huì)請(qǐng)網(wǎng)絡(luò)醬幫忙和其他節(jié)點(diǎn)的共識(shí)醬交換消息鼓黔,以對(duì)這個(gè)交易的序號(hào)達(dá)成共識(shí)。在共識(shí)完成之后挨决,執(zhí)行醬會(huì)接手请祖,調(diào)用某個(gè)智能合約對(duì)交易進(jìn)行處理。最后用戶通過(guò)詢問(wèn)RPC醬脖祈,獲取交易的處理結(jié)果肆捕。
通過(guò)這樣一種相互配合、團(tuán)隊(duì)協(xié)作的流水線作業(yè)盖高,cita節(jié)點(diǎn)將一個(gè)個(gè)交易搬到了區(qū)塊鏈上慎陵。在這樣一種作業(yè)方式中,節(jié)點(diǎn)不再是一位需要自己完成所有工作的小作坊老板喻奥,而是一座擁有大量熟練工人的工廠席纽。每一位微服務(wù)醬都專心一件事情,因此可以把這件事做得很好很高效撞蚕。不僅如此润梯,流水線的每個(gè)環(huán)節(jié)都可以有很多選項(xiàng):我們可以請(qǐng)CITA-BFT醬來(lái)負(fù)責(zé)共識(shí),也可以請(qǐng)PBFT醬或者PoA醬來(lái)做這件事甥厦,只要結(jié)果一樣纺铭,流水線其他環(huán)節(jié)的工人完全不會(huì)意識(shí)到他們是在和共識(shí)部門(mén)的哪位工人在協(xié)作。在cita“工廠”里面刀疙,組件可插拔不是口號(hào)舶赔,而是現(xiàn)實(shí)。
同樣的谦秧,小作坊受生產(chǎn)流程所限竟纳,產(chǎn)出上限固定,無(wú)法應(yīng)對(duì)銷售旺季交易量保障的情況疚鲤;而cita工廠由于建立了一套標(biāo)準(zhǔn)的協(xié)作體系锥累,只需要增加更多的流水線和工人就能夠從容應(yīng)對(duì)這些情況!
Scalability
cita的這個(gè)特點(diǎn)就是傳說(shuō)中的scalability集歇。
“等等桶略,scalability不是區(qū)塊鏈的一個(gè)尚未解決的問(wèn)題嗎?你們不是吹牛吧?”
目前區(qū)塊鏈網(wǎng)絡(luò)的scale問(wèn)題源自其多復(fù)本的設(shè)計(jì)思路删性,由于每一個(gè)交易都會(huì)被復(fù)制到所有節(jié)點(diǎn)上處理和驗(yàn)證亏娜,節(jié)點(diǎn)在驗(yàn)證交易的同時(shí)也是在進(jìn)行重復(fù)計(jì)算,造成了整個(gè)網(wǎng)絡(luò)的交易處理能力約等于網(wǎng)絡(luò)中單個(gè)節(jié)點(diǎn)的處理能力蹬挺,無(wú)論怎么增加節(jié)點(diǎn)都沒(méi)有用维贺。我們常常討論的,就是如何能做出一個(gè)方案巴帮,在保證安全的前提下能夠通過(guò)增加節(jié)點(diǎn)來(lái)提高區(qū)塊鏈的處理能力溯泣,行話又稱為水平擴(kuò)展(scale out)。
我們知道榕茧,scalability可以分為兩種垃沦,除了上述水平擴(kuò)展外,還有垂直擴(kuò)展(scale up):如果增加節(jié)點(diǎn)沒(méi)用用押,能不能想辦法提高單個(gè)節(jié)點(diǎn)的能力呢肢簿?既然整個(gè)網(wǎng)絡(luò)的處理能力約等于網(wǎng)絡(luò)中的單個(gè)節(jié)點(diǎn),如果單個(gè)節(jié)點(diǎn)的能力很強(qiáng)蜻拨,那么整個(gè)網(wǎng)絡(luò)的處理能力不是就提高了嗎池充?
這就是cita具有scalability的原因。通過(guò)節(jié)點(diǎn)的微服務(wù)架構(gòu)缎讼,cita可以做到節(jié)點(diǎn)內(nèi)的水平擴(kuò)展收夸,從區(qū)塊鏈這個(gè)層面看,便是節(jié)點(diǎn)在垂直擴(kuò)展了血崭。相較于國(guó)際大公司通過(guò)專有硬件來(lái)提升單節(jié)點(diǎn)處理能力的方案卧惜,cita只需要運(yùn)行在普通PC服務(wù)器上,不僅能夠?yàn)橛脩艄?jié)約成本夹纫,水平擴(kuò)展能力也比單機(jī)架構(gòu)更強(qiáng)咽瓷。
這么好的思路,為什么公有鏈不用呢捷凄?
敏銳的讀者可能已經(jīng)發(fā)現(xiàn)了問(wèn)題所在:中心化忱详。
對(duì)于公有鏈的設(shè)計(jì)者來(lái)說(shuō)围来,節(jié)點(diǎn)應(yīng)該被盡可能多的用戶運(yùn)行在盡可能多的計(jì)算機(jī)上跺涤。運(yùn)行一個(gè)計(jì)算機(jī)集群雖然能提升節(jié)點(diǎn)能力,但是維護(hù)集群所需要的專業(yè)知識(shí)以及資源投入监透,卻是普通用戶不具備的桶错。如果在公有鏈中使用這樣的設(shè)計(jì),必然出現(xiàn)的情況是只有少數(shù)具有專業(yè)知識(shí)胀蛮、能夠投入一定資源的人才有能力運(yùn)行全節(jié)點(diǎn)院刁,這與公有鏈的節(jié)點(diǎn)對(duì)等無(wú)中心的目標(biāo)是相悖的。
cita則是針對(duì)企業(yè)級(jí)用戶設(shè)計(jì)的區(qū)塊鏈粪狼。作為cita的目標(biāo)用戶退腥,企業(yè)天生就具有運(yùn)行一個(gè)集群的資源和能力任岸。在云計(jì)算以及容器化技術(shù)已經(jīng)非常成熟的今天,企業(yè)級(jí)用戶可以輕松的將cita服務(wù)部署到多臺(tái)服務(wù)器上狡刘,并對(duì)這些服務(wù)進(jìn)行管理享潜。相較于其他區(qū)塊鏈技術(shù),cita微服務(wù)架構(gòu)能夠真正發(fā)揮云服務(wù)的潛力嗅蔬,可以說(shuō)剑按,cita不僅僅是針對(duì)企業(yè)級(jí)用戶設(shè)計(jì),也是針對(duì)云服務(wù)設(shè)計(jì)的區(qū)塊鏈澜术。秘猿技術(shù)團(tuán)隊(duì)正在開(kāi)發(fā)cita部署工具與組件艺蝴,如果您有興趣成為我們的合作伙伴或者用戶,歡迎與我們聯(lián)系鸟废,共同推動(dòng)BaaS(Blockchain as a Service)的發(fā)展猜敢。
下回分解
不同的設(shè)計(jì)目標(biāo),需要不同的設(shè)計(jì)思路盒延。作為秘猿科技完全自主研發(fā)的區(qū)塊鏈框架锣枝,cita凝結(jié)了秘猿技術(shù)團(tuán)隊(duì)對(duì)區(qū)塊鏈的認(rèn)識(shí)與理解,對(duì)區(qū)塊鏈設(shè)計(jì)作出了大膽的創(chuàng)新與突破兰英。微服務(wù)架構(gòu)只是cita設(shè)計(jì)的一個(gè)方面撇叁,本文也對(duì)cita微服務(wù)進(jìn)行了簡(jiǎn)化,實(shí)際上在節(jié)點(diǎn)部署中會(huì)涉及更多的微服務(wù)畦贸,例如成員管理等陨闹,微服務(wù)之間的交互流程也會(huì)更復(fù)雜。更多的介紹可以閱讀cita的白皮書(shū)薄坏,或者關(guān)注我們公眾號(hào)閱讀下一篇文章咯~ : >