真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用HyperledgerFabric超級賬本會遇到什么坑

這篇文章將為大家詳細講解有關(guān)使用Hyperledger Fabric超級賬本會遇到什么坑,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司長期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為二連浩特企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作,二連浩特網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

Hyperledger Fabric 超級賬本的硬傷

在使用超級賬本的過程中我發(fā)現(xiàn)一個問題,超級賬本無法并發(fā)操作一個 key,stub.PutState 是異步執(zhí)行,我們無法確認它是否執(zhí)行完成,在沒有執(zhí)行完成之前再發(fā)起操作,就會產(chǎn)生覆蓋。這個問題限制了超級賬本的很多場景應(yīng)用,這是超級賬本的硬傷。

下面舉一個例子來說明超級賬本的問題

func (s *SmartContract) counter(stub shim.ChaincodeStubInterface, args []string) pb.Response {
    key  := "counter"
    count,err = stub.GetState(key)
    count = count + 1
    stub.PutState(key,count)
    return shim.Success(count)
}

使用多線程請求chaincode中的counter函數(shù)100次。你會發(fā)現(xiàn)最終 count 并不等于 100。學習過多線程的朋友一定很清楚出了什么問題。

問題出在 stub.PutState 函數(shù)count還沒有被寫入,其他線程就開始讀取stub.GetState(key),導(dǎo)致讀取舊數(shù)據(jù),最終計數(shù)器數(shù)字混亂。

很多場景需要更新區(qū)塊中的數(shù)據(jù),如果頻繁操作,就會產(chǎn)生覆蓋,目前Hyperledger Fabirc 并沒有提供解決方案。

1. 我們不知道 stub.PutState是否執(zhí)行完成,因為存儲過程需要共識排序。

2. 超級賬本沒有提供事物處理或者互斥鎖。

我的應(yīng)用場景是實現(xiàn)代幣功能,需要從總賬號給注冊用戶轉(zhuǎn)賬,操作頻繁。

從總賬中減去 100
    key  := "coinbase"
    money,err = stub.GetState(key)
    money = money - 100
    stub.PutState(key,money)
  
    用戶賬號額度加100
    key  := "account"
    money,err = stub.GetState(key)
    money = money + 100
    stub.PutState(key,money)

golang 提供的 mutex 也無法解決上面的問題,因為 mutex 鎖只能工作在一個進程中。Peer / Orderer 節(jié)點不止一個。

使用 redis實現(xiàn)分布式鎖或許能實現(xiàn),但思考過后決定放棄,轉(zhuǎn)為傳統(tǒng)數(shù)據(jù)庫。

另一個方案就是代幣功能使用以太坊,其他需求使用超級賬本。

關(guān)于“使用Hyperledger Fabric超級賬本會遇到什么坑”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


文章標題:使用HyperledgerFabric超級賬本會遇到什么坑
分享URL:http://weahome.cn/article/gjojei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部