欧美日操-欧美日韩91-欧美日韩99-欧美日韩ay在线观看-xxxx色-xxxx视频在线

當(dāng)微服務(wù)撞上區(qū)塊鏈

2018-03-12 14:43:39 csdn  點(diǎn)擊量: 評(píng)論 (0)
導(dǎo)語:每一種新技術(shù)的產(chǎn)生與發(fā)展,都會(huì)與既有的技術(shù)與實(shí)踐存在著聯(lián)系,例如微服務(wù)作為一種技術(shù)架構(gòu),實(shí)際上是在SOA架構(gòu)和JavaEE等分布式架

導(dǎo)語:

每一種新技術(shù)的產(chǎn)生與發(fā)展,都會(huì)與既有的技術(shù)與實(shí)踐存在著聯(lián)系,例如微服務(wù)作為一種技術(shù)架構(gòu),實(shí)際上是在SOA架構(gòu)和JavaEE等分布式架構(gòu)的基礎(chǔ)上,進(jìn)一步明晰了服務(wù)實(shí)現(xiàn)的方式與規(guī)則。區(qū)塊鏈技術(shù)脫胎于比特幣,作為一種多方信任的交易和技術(shù)模型,被包括國家、政府、監(jiān)管機(jī)構(gòu)等諸多業(yè)務(wù)方所關(guān)注,反而是技術(shù)從業(yè)者有些茫然,這一技術(shù)到底是什么,解決什么問題,能夠用在哪里普元近年來持續(xù)對(duì)微服務(wù)和區(qū)塊鏈技術(shù)進(jìn)行了研究,這里和大家分享一下研究的成果。我們的研究重點(diǎn)放在了如下幾個(gè)方面:

 

  • 區(qū)塊鏈技術(shù)適用的應(yīng)用場景有哪些,該技術(shù)帶來的價(jià)值是什么?
  • 區(qū)塊鏈技術(shù)是由哪些技術(shù)組合而成,和現(xiàn)有技術(shù)的關(guān)系如何?
  • 采用區(qū)塊鏈技術(shù)后,應(yīng)用技術(shù)架構(gòu)是什么,與微服務(wù)架構(gòu)的關(guān)系,現(xiàn)有應(yīng)用如何進(jìn)行遷移?

 

區(qū)塊鏈的業(yè)務(wù)價(jià)值是通過數(shù)據(jù)共享降低信任成本

區(qū)塊鏈技術(shù)是從比特幣開始的,2008年由中本聰提出開始,造成了一個(gè)比特幣的熱潮。但是,比特幣的熱潮退去后,比特幣提出的問題和解決方式卻吸引著我們。2014年左右區(qū)塊鏈逐步從比特幣中脫離出來,做為一種獨(dú)立的技術(shù)發(fā)展,進(jìn)入了 2.0 時(shí)代,以數(shù)字資產(chǎn)的方式解決商業(yè)的信任問題,同時(shí)用數(shù)字化手段提高業(yè)務(wù)的效率,在很多業(yè)務(wù)中已經(jīng)有了嘗試。

 

做為一種獨(dú)立的技術(shù)發(fā)展,區(qū)塊鏈分為公有鏈、聯(lián)盟鏈、私有鏈三個(gè)方向。而從業(yè)務(wù)角度看,區(qū)塊鏈的核心價(jià)值在于通過數(shù)據(jù)共享建立了多方的信任機(jī)制。

 

多參與方業(yè)務(wù)產(chǎn)生的信任問題是采用區(qū)塊鏈技術(shù)的源動(dòng)力

信任問題,始終是一個(gè)大問題,為了解決信任問題,人類投入了大量的時(shí)間和金錢。尤其是多個(gè)參與方參加的業(yè)務(wù),信任的成本更高,這里我舉一個(gè)復(fù)雜的例子:信用證業(yè)務(wù)(參見下圖),信用證是指開證銀行應(yīng)申請(qǐng)人(買方)的要求并按其指示向受益人開立的載有一定金額的、在一定的期限內(nèi)憑符合規(guī)定的單據(jù)付款的書面保證文件。信用證是國際貿(mào)易中最主要、最常用的支付方式(摘自百度百科)。

 

之所以舉這個(gè)例子,是因?yàn)閰^(qū)塊鏈技術(shù)適用的場景往往是業(yè)務(wù)比較復(fù)雜的情況,簡單例子很容易被誤解,這里我通俗易懂的解釋一下,在國際貿(mào)易活動(dòng),買賣雙方往往互不信任,進(jìn)口商(買方)擔(dān)心預(yù)付款后,出口商(賣方)不發(fā)貨;賣方擔(dān)心發(fā)貨后買方不付款(類似詐騙經(jīng)常發(fā)生,例如賣方把貨運(yùn)到碼頭了,買方就是不付余款,于是只能在當(dāng)?shù)刭v賣,這時(shí)買方再去抄底),典型的麻桿打狼兩頭怕。因此雙方各找了一家銀行作為擔(dān)保人,由兩家銀行之間開具憑證,代理進(jìn)口商、出口商之間業(yè)務(wù)往來,達(dá)到條件后由銀行付款,減少進(jìn)口商、出口商的風(fēng)險(xiǎn),這就是信用證業(yè)務(wù)。即使這樣,信用證詐騙還是很多,銀行為規(guī)避風(fēng)險(xiǎn),需要各種書面的證明,反復(fù)各種確認(rèn)…業(yè)務(wù)處理周期會(huì)非常長。

上圖中信用證業(yè)務(wù)的參與方包括出口商、進(jìn)口商、開證行、通知行、寄單行/附議行、運(yùn)輸公司,是一個(gè)典型的多方參與業(yè)務(wù),但通常這些參與方只是一部分,可能還會(huì)有海關(guān)、保險(xiǎn)公司、評(píng)級(jí)機(jī)構(gòu)等機(jī)構(gòu)加入到交易鏈條中。

 

多參與方業(yè)務(wù)解決信任問題,現(xiàn)有方案成本高在哪里?

 

解決多參與方業(yè)務(wù)的信任問題,現(xiàn)在是通過建立第三方機(jī)構(gòu)完成的,例如上述信用證業(yè)務(wù),就是通過SWIFT組織(環(huán)球同業(yè)銀行金融電訊協(xié)會(huì))的SWIFT系統(tǒng)開立信用證,銀行和其他金融機(jī)構(gòu)通過它與同業(yè)交換電文來完成金融交易,由 SWIFT 進(jìn)行銀行間轉(zhuǎn)發(fā)。

 

SWIFT僅僅解決了一部分的問題,還差很遠(yuǎn),例如:
業(yè)務(wù)上:那些沒有參加到 SWIFT 的組織無法通過 SWIFT 進(jìn)行交易,例如一些進(jìn)口商、出口商、保險(xiǎn)公司等等,SWITF也不能做清算,因此銀行在辦理信用證業(yè)務(wù)的時(shí)候,只有反復(fù)通過各種其他方式確認(rèn),避免詐騙發(fā)生,導(dǎo)致業(yè)務(wù)非常復(fù)雜,流程很長;


技術(shù)上:多方參與的業(yè)務(wù),一旦在處理業(yè)務(wù)時(shí)發(fā)生技術(shù)故障,處理起來就遠(yuǎn)比普通業(yè)務(wù)復(fù)雜。為了保證少出問題,技術(shù)上的投入會(huì)很高,記得用過很多手段,例如曾經(jīng)給每個(gè)參與方做過應(yīng)急系統(tǒng),采用過兩個(gè)不同廠商的SWIFT網(wǎng)關(guān)互為備份,安排專人排班管理異常情況,而且每個(gè)中心接入的標(biāo)準(zhǔn)和模式也不一致,接入中心機(jī)構(gòu)帶來的開發(fā)/維護(hù)成本都很高。


必須說明的是,為了能把業(yè)務(wù)講清楚,我還是簡化了很多內(nèi)容,例如如何進(jìn)行銀行間清算、如何進(jìn)行付款等等。總之,建立一個(gè)第三方機(jī)構(gòu)來解決信任問題,無論在業(yè)務(wù)上、技術(shù)上復(fù)雜度都很高。

區(qū)塊鏈技術(shù)是通過數(shù)據(jù)共享降低信任成本的

 

如果有一個(gè)分布式的記賬簿:(1)參與方在記賬之后有相當(dāng)多的副本存在,不再是一家之言;(2)保證提交的交易一定被記錄下來;(3)保證記賬不可逆,無法篡改;(4)參與方的交易記錄是相對(duì)透明的,可以通過這些記錄驗(yàn)證新的交易。


如果有機(jī)構(gòu)建立了這樣一個(gè)記賬簿,每個(gè)參與方在交易中都通過這個(gè)記賬簿進(jìn)行交互,保證每一筆發(fā)生的交易一定被可靠的記錄下來并不可篡改,不就不必再反復(fù)確認(rèn),不必?fù)?dān)心技術(shù)問題導(dǎo)致的業(yè)務(wù)流程變更,不必做應(yīng)急系統(tǒng),這樣成本就低多了。

 

通過分布式的記賬簿進(jìn)行數(shù)據(jù)共享,從而降低信任成本,這就是區(qū)塊鏈技術(shù)的價(jià)值。

 

聯(lián)盟鏈才是應(yīng)用區(qū)塊鏈技術(shù)優(yōu)先選擇的方向

 

既然區(qū)塊鏈?zhǔn)且粋€(gè)分布式的記賬簿,那這個(gè)記賬簿由誰來建立呢?這是這一技術(shù)應(yīng)用的核心問題。
目前建立記賬簿的方式有三種:

  • 公有鏈,象互聯(lián)網(wǎng)一樣,做為一種開放的網(wǎng)絡(luò)基礎(chǔ)設(shè)施,向任何人公開,任何人自由加入,
  • 私有鏈,一個(gè)組織內(nèi)部建立,可以幫助組織內(nèi)部完成審計(jì)等工作
  • 聯(lián)盟鏈,為特定業(yè)務(wù)由相關(guān)核心企業(yè)建立,采用多中心(每個(gè)核心企業(yè)為一個(gè)中心)的方式,其他上下游企業(yè)加入

建立公有鏈難度高,業(yè)務(wù)場景不夠精準(zhǔn),分布式存儲(chǔ)帶來的性能低下問題阻礙了可用的應(yīng)用場景,而私有鏈脫離了區(qū)塊鏈的商業(yè)價(jià)值,只是把區(qū)塊鏈做為一個(gè)技術(shù)組件使用。在目前的應(yīng)用場景中,絕大多數(shù)都可以用聯(lián)盟鏈解決,商業(yè)上相對(duì)容易成立,性能遠(yuǎn)遠(yuǎn)高于公有鏈。

 


從上述描述就可以理解到,公有鏈太理想,私有鏈所處理的問題,傳統(tǒng)架構(gòu)完全能解決,而針對(duì)特定業(yè)務(wù)由企業(yè)聯(lián)盟建立的聯(lián)盟鏈,應(yīng)用方向更清晰,業(yè)務(wù)價(jià)值也更加明確,下圖是一個(gè)聯(lián)盟鏈的示例:

從應(yīng)用的角度看,區(qū)塊鏈技術(shù)提供的是一個(gè)分布式數(shù)據(jù)庫

區(qū)塊鏈技術(shù)的數(shù)據(jù)共享方式要滿足(1)多副本、(2)可靠記錄、(3)不可篡改、(4)多方透明幾個(gè)特性,上述特性總結(jié)下來,采用區(qū)塊鏈技術(shù)后,應(yīng)用技術(shù)架構(gòu)如上圖所示,可以看出,區(qū)塊鏈技術(shù)對(duì)應(yīng)用而言,就是一個(gè)分布式數(shù)據(jù)庫。

 

區(qū)塊鏈技術(shù)的本質(zhì)是分布式數(shù)據(jù)庫

區(qū)塊鏈基于密碼學(xué)中的橢圓曲線數(shù)字簽名算法(ECDSA)來實(shí)現(xiàn)去中心化的P2P系統(tǒng)設(shè)計(jì)。當(dāng)人們?cè)谡務(wù)摶蚴褂?ldquo;區(qū)塊鏈”這個(gè)詞時(shí),有時(shí)候是指數(shù)據(jù)結(jié)構(gòu),有時(shí)候是指數(shù)據(jù)庫,有時(shí)則是指數(shù)據(jù)庫技術(shù)。


和區(qū)塊鏈技術(shù)比,分布式數(shù)據(jù)庫的概念顯然更容易被理解,我就從分布式數(shù)據(jù)庫的一些基本概念出來,理解區(qū)塊鏈的技術(shù)實(shí)現(xiàn),這些概念包括數(shù)據(jù)存儲(chǔ)、點(diǎn)對(duì)點(diǎn)可靠傳輸、存儲(chǔ)過程與觸發(fā)器(智能合約)、數(shù)據(jù)安全:

 

分布式數(shù)據(jù)存儲(chǔ):鏈?zhǔn)酱鎯?chǔ)與共識(shí)機(jī)制

區(qū)塊鏈技術(shù)的數(shù)據(jù)共享是一個(gè)分布式的記賬簿,交易記錄具備多個(gè)副本,因此首先要解決分布式數(shù)據(jù)存儲(chǔ)的問題。

 

1)區(qū)塊鏈存儲(chǔ)的基本單元是區(qū)塊,區(qū)塊采用鏈?zhǔn)浇Y(jié)構(gòu),即新增的區(qū)塊(類似數(shù)據(jù)庫一行記錄)都知道自己前一個(gè)區(qū)塊(前一行記錄)是什么,可以一直追溯到根,區(qū)塊的標(biāo)識(shí)是區(qū)塊的哈希值,同時(shí)鏈?zhǔn)浇Y(jié)構(gòu)保留了業(yè)務(wù)產(chǎn)生的軌跡,可以在新增交易的時(shí)候根據(jù)前面的記錄做校驗(yàn),保證了區(qū)塊的內(nèi)容不容易篡改。

 

這種模式,我們?cè)趥鹘y(tǒng)的數(shù)據(jù)庫設(shè)計(jì)也會(huì)采用,例如下圖拉鏈表的形式,每次對(duì)數(shù)據(jù)的更新都采用追加( Insert而不是Update)模式,有起始時(shí)間、失效時(shí)間和是否生效標(biāo)識(shí),保持全部交易歷史。

 

區(qū)塊鏈把這一點(diǎn)變成了一種底層固有模式,加入了哈希、時(shí)間戳等機(jī)制在技術(shù)上保證鏈條的正確性,因此非常有價(jià)值。

 

2)既然是分布式、多中心的存儲(chǔ)方式,就必須解決存儲(chǔ)時(shí)的分布式一致性問題。在區(qū)塊鏈的前身比特幣應(yīng)用中,解決這一問題的方式是工作量證明(POW  Proof-Of-Work)方式,即通過工作以獲得指定成果,用成果來證明曾經(jīng)付出的努力。


這也是接觸區(qū)塊鏈技術(shù)時(shí)第一個(gè)比較迷惑的地方,我為啥一定要用工作量來證明,是不是還有其他方式?區(qū)塊鏈技術(shù)從比特幣中獨(dú)立出來后,大家把這一問題歸結(jié)為共識(shí)問題,工作量證明是達(dá)成共識(shí)的一種方式,這樣就清晰多了。于是就產(chǎn)生了權(quán)益證明(POS Proof of Stake)方式,是一種通過業(yè)務(wù)規(guī)則達(dá)成共識(shí)的方式;實(shí)用拜占庭容錯(cuò)(PBFT  Practical Byzantine Fault Tolerance)方式,是一種通過技術(shù)規(guī)則達(dá)成共識(shí)的機(jī)制。在公有鏈上,工作量證明(POW)還是一種最主要的共識(shí)方式,不容易取代,但在聯(lián)盟鏈上,完全可以根據(jù)自己的情況,創(chuàng)造出新的共識(shí)方式出來。我們就根據(jù)這一想法,在特定業(yè)務(wù)中創(chuàng)造過共識(shí)算法,解決分布式數(shù)據(jù)存儲(chǔ)的一致性問題。

 

點(diǎn)對(duì)點(diǎn)可靠傳輸:可靠消息與P2P

區(qū)塊鏈技術(shù)是一組技術(shù)的組合,既然是一個(gè)分布式的記賬簿,就要解決數(shù)據(jù)可靠傳輸問題。包括記賬節(jié)點(diǎn)(信任節(jié)點(diǎn))之間、非記賬節(jié)點(diǎn)(非信任節(jié)點(diǎn))、客戶端與記賬節(jié)點(diǎn)(信任節(jié)點(diǎn))之間的數(shù)據(jù)傳輸。在以前我們的方案中,往往通過可靠消息或者P2P方式解決數(shù)據(jù)傳輸問題,這些技術(shù)也被用于區(qū)塊鏈技術(shù)中。但必須說明的是,在真實(shí)業(yè)務(wù)場景下,不可能把所有的數(shù)據(jù)都記錄在記賬簿中,部分業(yè)務(wù)數(shù)據(jù)還是要保存在自己的系統(tǒng)中,這就還需要在技術(shù)框架上做到本地業(yè)務(wù)數(shù)據(jù)與區(qū)塊鏈的記賬簿保持一致,后文會(huì)具體闡述,總之,區(qū)塊鏈平臺(tái)只能保證自身數(shù)據(jù)之間的一致,業(yè)務(wù)不能完全依賴區(qū)塊鏈平臺(tái)保證數(shù)據(jù)一致性。

 

智能合約:觸發(fā)器與存儲(chǔ)過程

智能合約是指當(dāng)一定條件滿足的情況下,可以被自動(dòng)執(zhí)行的數(shù)字化合約。實(shí)現(xiàn)這一特性,在數(shù)據(jù)庫中就是由觸發(fā)器和存儲(chǔ)過程完成的。雖然在目前流行的應(yīng)用架構(gòu)中,都不建議把邏輯寫在存儲(chǔ)過程中,但觸發(fā)器和存儲(chǔ)過程還是常用的工具,尤其在數(shù)據(jù)遷移相關(guān)的運(yùn)維活動(dòng)中。區(qū)塊鏈技術(shù)中智能合約就是觸發(fā)器和存儲(chǔ)過程,他是一個(gè)在沙箱中運(yùn)行的腳本,用于執(zhí)行區(qū)塊鏈業(yè)務(wù)中的業(yè)務(wù)邏輯,也可以用于各種檢查。舉個(gè)例子,A產(chǎn)生一筆支付時(shí),可以通過智能合約在數(shù)據(jù)鏈上進(jìn)行檢查,如果發(fā)現(xiàn)A的余額無法支付這筆交易,就可以中止這筆交易。和存儲(chǔ)過程相比,智能合約運(yùn)行在沙箱之中,不能對(duì)外部 API 做調(diào)用。這也比較好理解,如果允許外部調(diào)用,就可能無法保證自身的數(shù)據(jù)一致性,后面我們會(huì)講到這種缺陷如何彌補(bǔ)。美中不足的是目前的智能合約并不支持 SQL 語法。

 

數(shù)據(jù)安全:用業(yè)務(wù)手段達(dá)成妥協(xié)

交易數(shù)據(jù)是透明的,但不是全部透明,而是相對(duì)透明,這是區(qū)塊鏈技術(shù)的一個(gè)難點(diǎn),關(guān)鍵有二:(1)如何保護(hù)隱私,僅僅能看到自己可見的數(shù)據(jù);(2)密鑰分配問題,例如新加入鏈中的一個(gè)節(jié)點(diǎn)會(huì)被分配一個(gè)新的密鑰,如何用這個(gè)密鑰解讀以前鏈中存儲(chǔ)的信息。可見與不可見,這是一個(gè)矛盾,理論上沒有一個(gè)完美的方案,這里我不對(duì)區(qū)塊鏈技術(shù)如何加密、如何做密鑰管理、如何同態(tài)加密等方式做解讀,而是講講如何通過業(yè)務(wù)方法而不是技術(shù)手段規(guī)避這一問題。舉個(gè)例子,在一個(gè)小企業(yè)支付的聯(lián)盟鏈中,核心企業(yè)包括某銀行、企業(yè)A,為A的上下游企業(yè)提供信貸業(yè)務(wù),對(duì)于所有交易的數(shù)據(jù),銀行和核心企業(yè)A都是可見的,他們擁有記賬節(jié)點(diǎn),對(duì)于其他加盟企業(yè),只擁有非記賬節(jié)點(diǎn),他們雖然也有全部的數(shù)據(jù),但是只能看到自己相關(guān)的數(shù)據(jù)。很明顯,加盟企業(yè)放棄了自己的部分隱私權(quán),但也得到了生意的機(jī)會(huì),這種方式加盟企業(yè)是可以接受的,就好比貸款企業(yè)要向銀行提供經(jīng)營數(shù)據(jù)一樣。數(shù)據(jù)安全問題,在技術(shù)上很難解決,但通過業(yè)務(wù)手段是可以規(guī)避的,這也是我們看好聯(lián)盟鏈的重要原因。

 

為分布式應(yīng)用而生的微服務(wù),與區(qū)塊鏈技術(shù)是天生的一對(duì)

最后說說區(qū)塊鏈技術(shù)與微服務(wù)架構(gòu)的關(guān)系。大家知道,微服務(wù)架構(gòu)是一個(gè)分布式的應(yīng)用技術(shù)架構(gòu),目的是有效的對(duì)應(yīng)用進(jìn)行拆分,實(shí)現(xiàn)敏捷開發(fā)、快速演化、便捷容錯(cuò)與彈性伸縮。

 

微服務(wù)的一個(gè)核心概念是API網(wǎng)關(guān),由于服務(wù)的顆粒變細(xì),網(wǎng)關(guān)承擔(dān)著安全與訪問認(rèn)證等諸多職能。而在現(xiàn)有的大多數(shù)微服務(wù)架構(gòu)中,大家都更多的在談接入網(wǎng)關(guān)的概念,實(shí)際上按照信息的流向,除接入網(wǎng)關(guān)外,微服務(wù)還應(yīng)該有接出網(wǎng)關(guān)的概念。


前面說到,區(qū)塊鏈技術(shù)本質(zhì)上就是分布式數(shù)據(jù)庫,微服務(wù)架構(gòu)與區(qū)塊鏈技術(shù)的結(jié)合,并不能簡單的看成是微服務(wù)與數(shù)據(jù)庫的結(jié)合,而應(yīng)該把區(qū)塊鏈平臺(tái)做為一個(gè)第三方應(yīng)用進(jìn)行交互,這也是微服務(wù)架構(gòu)很好發(fā)揮作用的地方。上圖中紅圈所示的就是微服務(wù)與區(qū)塊鏈平臺(tái)進(jìn)行交互的方式。而微服務(wù)的接出網(wǎng)關(guān),就應(yīng)該起到區(qū)塊鏈網(wǎng)關(guān)的作用。
 

雖然目前的區(qū)塊鏈平臺(tái)一般都有SDK和REST服務(wù)兩種方式,按照上述的原則,一般不要使用 SDK,而是遠(yuǎn)程調(diào)用方式,采用微服務(wù)的設(shè)計(jì)原則,使用區(qū)塊鏈網(wǎng)關(guān),把微服務(wù)與區(qū)塊鏈平臺(tái)集成的功能集中到網(wǎng)關(guān)中,見下圖:

 

微服務(wù)通過區(qū)塊鏈網(wǎng)關(guān)與區(qū)塊鏈平臺(tái)交互,區(qū)塊鏈網(wǎng)關(guān)主要功能包括通訊網(wǎng)關(guān)、事件監(jiān)聽,同時(shí)配合微服務(wù)應(yīng)用框架,完成數(shù)據(jù)一致性、對(duì)賬功能。與區(qū)塊鏈網(wǎng)關(guān)集成的能力,是微服務(wù)架構(gòu)天生具備的。所以我們說微服務(wù)與區(qū)塊鏈,天生是一對(duì)。

通訊網(wǎng)關(guān):處理微服務(wù)發(fā)起的對(duì)區(qū)塊鏈平臺(tái)的調(diào)用

由于區(qū)塊鏈平臺(tái)的服務(wù)能力(每秒交易數(shù) TPS)有限,為保證區(qū)塊鏈平臺(tái)的可用性,區(qū)塊鏈網(wǎng)關(guān)采用了異步處理模式,實(shí)現(xiàn)限流、隔離、服務(wù)升降級(jí)等能力。

網(wǎng)關(guān)在微服務(wù)應(yīng)用與區(qū)塊鏈平臺(tái)之間建立了隔離,避免平臺(tái)與微服務(wù)之間互相影響,這是一種 MiddleBox 的集成方式,用一個(gè)獨(dú)立的基礎(chǔ)設(shè)施做集成。微服務(wù)之間的集成往往采用 MiddlePipe 的模式,但是區(qū)塊鏈平臺(tái)做為一個(gè)第三方應(yīng)用,采用 MiddleBox 方式比較好,統(tǒng)一管理與運(yùn)維比較方便。

由于區(qū)塊鏈平臺(tái)提供的接口各有不同,區(qū)塊鏈網(wǎng)關(guān)在接受請(qǐng)求后記錄交易流水,把區(qū)塊鏈平臺(tái)提供的服務(wù)模擬為冪等服務(wù),調(diào)用者可以多次調(diào)用區(qū)塊鏈網(wǎng)關(guān),而區(qū)塊鏈網(wǎng)關(guān)僅僅調(diào)用區(qū)塊鏈平臺(tái)一次。為方便運(yùn)維,我們可以為區(qū)塊鏈平臺(tái)提供的服務(wù)定義SLA,根據(jù)這些定義靈活的進(jìn)行調(diào)用的控制。

 

區(qū)塊鏈網(wǎng)關(guān)的內(nèi)部實(shí)現(xiàn)是一個(gè) SEDA 架構(gòu)(分階段事件驅(qū)動(dòng)架構(gòu)),把接入、接出和處理分開(處理主要是記錄流水、報(bào)文打解包、安全效驗(yàn)等功能),三階段之間用隊(duì)列連接,采用異步模擬同步的方式,這是一個(gè)用于集成的基礎(chǔ)架構(gòu)。

 

接入、處理、接出三個(gè)階段可處理資源是可以調(diào)配的,資源主要包括處理線程和接入接出的連接,根據(jù)不同業(yè)務(wù)可以有不同的資源為之服務(wù),這樣升降級(jí)、限流等特性就比較容易實(shí)現(xiàn)。

為了方便運(yùn)維,需要對(duì)業(yè)務(wù)有分組的能力,可以根據(jù)分組進(jìn)行批量的運(yùn)維管理。

 

事件監(jiān)聽:Hook與輪詢模式

如果記賬簿發(fā)生了改變,如何通知微服務(wù)呢,這就是區(qū)塊鏈網(wǎng)關(guān)中事件監(jiān)聽發(fā)揮的作用。目前很多區(qū)塊鏈平臺(tái)并沒有提供事件接口,即使未來有也很難統(tǒng)一,前面也說過,智能合約運(yùn)行在沙箱中,為保證數(shù)據(jù)一致性不可能支持對(duì)外部服務(wù)的調(diào)用,也不能做為事件監(jiān)聽的回調(diào),這樣就需要在區(qū)塊鏈網(wǎng)關(guān)中進(jìn)行處理。

 

 

微服務(wù)可以注冊(cè)對(duì)某一類交易進(jìn)行監(jiān)聽,區(qū)塊鏈網(wǎng)關(guān)定時(shí)通過區(qū)塊鏈平臺(tái)的查詢接口檢索,發(fā)現(xiàn)數(shù)據(jù)變更時(shí)通知微服務(wù)。這是一個(gè)效率不高的方法,但區(qū)塊鏈平臺(tái)本身性能也不高,時(shí)延主要由共識(shí)機(jī)制造成,輪詢的做法并不會(huì)有太大影響,這也是期待區(qū)塊鏈平臺(tái)本身提升的地方。

 

數(shù)據(jù)一致性:可靠事件模式是首選

不能把所有數(shù)據(jù)都存儲(chǔ)在區(qū)塊鏈平臺(tái)中,而是將交易數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈平臺(tái),這樣就有了本地?cái)?shù)據(jù)庫的數(shù)據(jù)與區(qū)塊鏈交易數(shù)據(jù)的一致性問題。

 

一般來說,我們不能依賴區(qū)塊鏈平臺(tái)支持事務(wù)的回滾,因?yàn)檫@個(gè)分布式的記賬簿一旦記賬就是不可更改的,我們甚至不能指望區(qū)塊鏈平臺(tái)實(shí)時(shí)給應(yīng)用反饋記賬是否成功,因?yàn)橛锌赡芊祷爻瑫r(shí)錯(cuò)誤,不清楚是否記賬成功。于是,區(qū)塊鏈網(wǎng)關(guān)需要和微服務(wù)配合保證數(shù)據(jù)的一致性。


一般情況下微服務(wù)中的業(yè)務(wù)處理采用異步模式,發(fā)出記賬申請(qǐng)后處于等待狀態(tài),區(qū)塊鏈網(wǎng)關(guān)將記賬申請(qǐng)轉(zhuǎn)發(fā)給區(qū)塊鏈平臺(tái)。如果區(qū)塊鏈平臺(tái)返回接受Accept或者拒絕Reject,將結(jié)果通知微服務(wù);如果區(qū)塊鏈平臺(tái)返回超時(shí)或者不可確定錯(cuò)誤,即開始定時(shí)輪詢,得到結(jié)果后通知微服務(wù)。同時(shí),微服務(wù)本身需要具備事務(wù)補(bǔ)償?shù)哪J剑绻涃~失敗進(jìn)行反交易處理。這種數(shù)據(jù)一致性處理的方式,是微服務(wù)多種處理方式中的一種,我們一般使用服務(wù)編排的方式降低這種模式的開發(fā)復(fù)雜度。


下面是一個(gè)示例:

這是一個(gè)可靠事件與區(qū)塊鏈交互的流程:


1)應(yīng)用框架接到請(qǐng)求后首先記錄業(yè)務(wù)流水,然后執(zhí)行業(yè)務(wù)邏輯,記錄業(yè)務(wù)數(shù)據(jù),最后在事件表中留下對(duì)區(qū)塊鏈平臺(tái)調(diào)用的記錄,事務(wù)完成
2)事件處理輪詢事件記錄,有更新時(shí)通過區(qū)塊鏈網(wǎng)關(guān)調(diào)用區(qū)塊鏈平臺(tái),如果調(diào)用成功,改變事件狀態(tài),如果失敗就要調(diào)用業(yè)務(wù)補(bǔ)償?shù)臋C(jī)制了

對(duì)賬

既然數(shù)據(jù)有本地存放,也有區(qū)塊鏈平臺(tái)存放,就有不一致的可能,就必須對(duì)賬。傳統(tǒng)對(duì)賬有以我為主、以他為主兩種模式。這里就只能以他為主,以區(qū)塊鏈平臺(tái)為主了。由于區(qū)塊鏈技術(shù)針對(duì)交易的特點(diǎn)對(duì)存儲(chǔ)結(jié)構(gòu)進(jìn)行了要求,利用已有的時(shí)間戳、交易先后次序,可以是對(duì)賬變得更加容易。


基本的對(duì)賬處理流程如下
1. 區(qū)塊鏈平臺(tái)和企業(yè)應(yīng)用的記錄必須有關(guān)聯(lián)的id(可以是多要素的組合)
2. 區(qū)塊鏈平臺(tái)和企業(yè)應(yīng)用都要保證生成的對(duì)賬文件明細(xì)記錄的連續(xù)性
3.對(duì)于“隔日賬”需重復(fù)核對(duì)

 

區(qū)塊鏈?zhǔn)且环N新興的技術(shù),他的本質(zhì)是一種加入業(yè)務(wù)特性的分布式數(shù)據(jù)庫,通過對(duì)區(qū)塊鏈技術(shù)的研究,我們找到了業(yè)務(wù)與區(qū)塊鏈技術(shù)結(jié)合的方式,提出了微服務(wù)應(yīng)用架構(gòu)集成區(qū)塊鏈的技術(shù)模式。


1) 區(qū)塊鏈的業(yè)務(wù)價(jià)值是通過數(shù)據(jù)共享降低信任成本。
區(qū)塊鏈建立了一個(gè)記賬簿,每個(gè)參與方在交易中都通過這個(gè)記賬簿進(jìn)行交互,保證每一筆發(fā)生的交易一定被可靠的記錄下來并不可篡改,不必再反復(fù)確認(rèn),不必?fù)?dān)心技術(shù)問題導(dǎo)致的業(yè)務(wù)流程變更,不必做應(yīng)急系統(tǒng),從而降低了信任成本。

2)區(qū)塊鏈技術(shù)的本質(zhì)是分布式數(shù)據(jù)庫。
區(qū)塊鏈技術(shù)的數(shù)據(jù)共享方式要滿足(1)多副本、(2)可靠記錄、(3)不可篡改、(4)多方透明幾個(gè)特性,總結(jié)下來,區(qū)塊鏈技術(shù)對(duì)應(yīng)用而言,就是一個(gè)分布式數(shù)據(jù)庫,分別對(duì)應(yīng)分布式數(shù)據(jù)庫的(1)分布式存儲(chǔ)、(2)點(diǎn)對(duì)點(diǎn)可靠傳輸、(3)存儲(chǔ)過程與(4)數(shù)據(jù)安全幾個(gè)方面。

3)為分布式應(yīng)用而生的微服務(wù),與區(qū)塊鏈技術(shù)是天生的一對(duì)。
微服務(wù)通過區(qū)塊鏈網(wǎng)關(guān)與區(qū)塊鏈平臺(tái)交互,區(qū)塊鏈網(wǎng)關(guān)主要功能包括通訊網(wǎng)關(guān)、事件監(jiān)聽,同時(shí)配合微服務(wù)應(yīng)用框架,完成數(shù)據(jù)一致性、對(duì)賬功能。與區(qū)塊鏈網(wǎng)關(guān)集成的能力,是微服務(wù)架構(gòu)天生具備的。

以上是對(duì)我們研究成果一個(gè)簡要介紹,后續(xù)我們還會(huì)對(duì)使用區(qū)塊鏈技術(shù)的細(xì)節(jié)進(jìn)行分析,與大家共同探討。

 

附記:理解區(qū)塊鏈技術(shù)常見的幾個(gè)困惑

困惑1:比特幣是區(qū)塊鏈技術(shù)的一個(gè)應(yīng)用,不能把比特幣應(yīng)用的所有內(nèi)容都?xì)w結(jié)為區(qū)塊鏈技術(shù)
上文提到,區(qū)塊鏈技術(shù)從比特幣中獨(dú)立出來是 2014 年左右的事情,此前每每舉出區(qū)塊鏈的案例都是比特幣,給區(qū)塊鏈技術(shù)的應(yīng)用造成了很多誤解。我建議先了解區(qū)塊鏈技術(shù),再了解比特幣,先理解聯(lián)盟鏈的業(yè)務(wù)場景,再了解公有鏈的業(yè)務(wù)場景,公有鏈看作是聯(lián)盟鏈的一種大規(guī)模延展,,可以少走一些彎路。
 
困惑2:公有鏈情況下數(shù)據(jù)存儲(chǔ)性能不高,但聯(lián)盟鏈的性能可以遠(yuǎn)高于公有鏈,能滿足多數(shù)場景的要求
數(shù)據(jù)一致性問題是分布式存儲(chǔ)最大的問題,而并發(fā)越高,沖突的概率就越大。區(qū)塊鏈技術(shù)之所以能支持的每秒交易數(shù)(TPS)不高,主要是共識(shí)機(jī)制比較復(fù)雜,或者說共識(shí)機(jī)制就是刻意為了降低并發(fā)性,減少數(shù)據(jù)沖突的概率。在公有鏈上,這是一個(gè)無法逾越的問題,只能從事實(shí)時(shí)性要求不敏感的業(yè)務(wù)。但是,在聯(lián)盟鏈中,由于鏈中的參與方并不多,也不需要每個(gè)節(jié)點(diǎn)都記賬,就可以使用一些性能更高的共識(shí)機(jī)制,例如前面說的PBFT。我們?cè)?jīng)嘗試過一種全對(duì)等的算法,可以支持更高的性能。
 
困惑3:應(yīng)用區(qū)塊鏈技術(shù)不一定必須有礦工來挖礦
初次接觸區(qū)塊鏈技術(shù),礦工/挖礦這個(gè)概念讓人非常費(fèi)解:(1)為什么一定要挖礦?(2)為什么要給記賬成功的節(jié)點(diǎn)獎(jiǎng)勵(lì)比特幣來鼓勵(lì)記賬?(3)非比特幣的業(yè)務(wù)中如何鼓勵(lì)記賬?這個(gè)困惑歸根結(jié)底還是把區(qū)塊鏈和比特幣混淆造成的。前面說過,挖礦是通過工作量證明(POW)達(dá)成共識(shí)的機(jī)制,挖礦能力愈強(qiáng)就取得了記錄權(quán)。更重要的是比特幣的貨幣屬性,發(fā)行貨幣要么靠國家信用(例如紙幣),要么靠奇缺資源(例如黃金),比特幣為了防止濫發(fā),就需要用算力做為一種奇缺資源。這樣說來,比特幣實(shí)際上把共識(shí)算法、貨幣屬性、鼓勵(lì)記賬這幾件事都用挖礦來解決了,思路確實(shí)精妙。但是,在業(yè)務(wù)規(guī)則不同的聯(lián)盟鏈中就不一樣了,除了有其他更高效的共識(shí)算法外,不需要奇缺資源,不需要專門對(duì)記賬做鼓勵(lì),因?yàn)楸仨氂涃~已經(jīng)是核心企業(yè)之間的契約,可以通過技術(shù)手段保證數(shù)據(jù)的同步,支持審計(jì)等能力,自然就不需要挖礦了。
 
困惑4:目前應(yīng)用區(qū)塊鏈技術(shù)不是去中心,而是多中心
去中心是一個(gè)理想,經(jīng)常有人問(1)為什么要去中心?去中心有什么好處?(2)真的能去中心嗎?后來,我深入研究聯(lián)盟鏈的場景時(shí)發(fā)現(xiàn),實(shí)際的業(yè)務(wù)場景大多是多中心(這又是比特幣惹的禍,他真的想去中心),例如上述的企業(yè)聯(lián)盟方式,幾個(gè)建立聯(lián)盟的核心企業(yè)就是多中心,他們共同成為一個(gè)新的中心。傳統(tǒng)方式建立新的中心,往往通過建立清算機(jī)構(gòu)的方式,而區(qū)塊鏈技術(shù)讓建立中心的成本降低了。
 
困惑5:不是所有的區(qū)塊鏈節(jié)點(diǎn)都是記賬節(jié)點(diǎn),很多節(jié)點(diǎn)僅僅用來進(jìn)行數(shù)據(jù)同步而已
多中心就意味著不是每個(gè)節(jié)點(diǎn)都需要記賬,記賬的工作由幾個(gè)中心節(jié)點(diǎn)負(fù)責(zé)就可以了,其他節(jié)點(diǎn)與記賬節(jié)點(diǎn)間是數(shù)據(jù)同步的關(guān)系,也就是非記賬節(jié)點(diǎn)上也有全部數(shù)據(jù)。聯(lián)盟鏈中非記賬節(jié)點(diǎn)一般處在加盟企業(yè),由于數(shù)據(jù)可見性的要求,非記賬節(jié)點(diǎn)中的數(shù)據(jù)并不是都可見的,但是這一副本可以做為一種法律依據(jù),提高了篡改數(shù)據(jù)的成本。
 
從數(shù)據(jù)的角度來看,區(qū)塊鏈本質(zhì)是一種分布式數(shù)據(jù)庫,這里的“分布式”是指區(qū)塊鏈技術(shù)利用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)不僅解決了分布式數(shù)據(jù)存儲(chǔ)問題,也解決了存儲(chǔ)時(shí)的分布式一致性問題。區(qū)塊鏈技術(shù)利用分布式記賬簿保證數(shù)據(jù)可靠傳輸和訪問,利用可自動(dòng)執(zhí)行的智能合約來編程和操作數(shù)據(jù)。所以,我認(rèn)為,基于分布式數(shù)據(jù)庫來理解區(qū)塊鏈,認(rèn)清區(qū)塊鏈技術(shù)常見的一些困惑和誤區(qū),可以讓大家對(duì)區(qū)塊鏈有個(gè)比較正確的理解方式。

 
大云網(wǎng)官方微信售電那點(diǎn)事兒

責(zé)任編輯:售電衡衡

免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與本站無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。
我要收藏
個(gè)贊
?
主站蜘蛛池模板: 国产欧美日韩在线视频 | 香蕉大伊亚洲人在线观看 | 青青热久免费精品视频精品 | 麻豆你懂的 | www国产永久免费视频看看 | 97成人在线视频 | 天天做天天爱天天做天天吃中 | 欧美日韩高清不卡一区二区三区 | 亚洲国产精久久久久久久春色 | 一区二区三区高清视频在线观看 | 99视频在线免费看 | 91精品啪在线观看国产色 | 日韩一区二区三区在线观看 | 日韩在线视频网 | 东北话清晰刺激对白 | 国产高清晰在线播放 | 日日夜夜精品 | 日本高清不卡免费 | 男男视频免费在线观看 | 免费精品美女久久久久久久久 | 日韩欧美1区 | 日本国产一区在线观看 | 欧美二区视频 | 91一区二区三区四区五区 | 日本高清免费h色视频在线观看 | 99国产精品九九视频免费看 | 日韩精品欧美精品中文精品 | 菠萝蜜在线视频观看 | 97国产品香蕉在线观看 | ww国产 | 亚洲一区二区三区精品国产 | 男人天堂网2020 | 特黄特色大片免费视频大全 | 四虎影院最新入口 | 日本视频在线免费 | 98香蕉草草视频在线精品看 | 日韩区在线观看 | 蜜柚在线观看免费高清 | 国产欧美日韩在线一区二区不卡 | 瑜伽女人一级毛片 | 亚洲 欧美 日韩在线 |