區塊鏈底层技术还有哪一些难以攻克的难点

在进行性能测试时,我们发现超级账本網絡对高并发交易的处理能力存在瓶颈。

Fabric,全称 Hyperledger fabric,中文称“超级账本” ,它是以區塊鏈技术为基础设计的去中心化底层架构,是Linux基金会于2015年发起的推进區塊鏈数字技术和交易验证的开源项目。3DD顯卡之家

在接触區塊鏈时,我们是从以太坊开始研究学习的,后续还了解学习了比特币、小蚁、超级账本等區塊鏈相关项目。对于金融业务,因其对系统的稳定性,健壮性,处理性能以及应用的可扩展性等方面有很高的要求,通过从各方面对比,最终选择了超级账本作为项目的底层框架。在我们深入研究超级账本的过程中,发现其并不是一个完善的框架,还存在着很多问题。3DD顯卡之家

區塊鏈底层技术还有哪一些难以攻克的难点3DD顯卡之家

上圖爲0.6版本整體架構圖,被標記部分是經過我們改良的模塊,主要有以下幾點:3DD顯卡之家

改良共識通道及消息處理機制3DD顯卡之家

在进行性能测试时,我们发现超级账本網絡对高并发交易的处理能力存在瓶颈。通过深入分析,发现在整个底层系统中存在多种不同类型的消息流,例如节点间用于广播交易的消息和共识的消息等,而每个节点处理这些消息流的管道却只有一个,这就好比一条高速路上只有一个检票口一样,检票口的处理能力直接影响到高速的堵车概率。而在系统中,由于消息处理管道很容易被阻塞,导致优先级高的消息因无法及时被处理而大量堆积,从而导致整个系统宕机。3DD顯卡之家

區塊鏈底层技术还有哪一些难以攻克的难点3DD顯卡之家

通過分析,我們使用分流的方式來解決管道阻塞的問題(如上圖)。用單獨的A號管道去處理優先級低但調用頻率高的消息(例如節點間的廣播消息),而一些優先級高的消息(例如共識消息)則通過B號管道去處理,當A號管道出現阻塞時,通過B號管道及時處理,可以逐漸消耗並恢複A號管道的能力。通過分流方式,保證各類消息能被及時處理,進而提高了系統的處理能力,也提升了系統的穩定性。3DD顯卡之家

我们知道,最小的超级账本網絡需要四个节点才能正常运行,所以这些节点之间的通信能力就成了影响该網絡能力的一个重要因素。在测试中,我们也发现节点之间的各类通信都是通过一个通道进行处理的,当有大并发量的交易进入網絡,节点之间大部分时间都在进行频繁的交易广播(将自己收到的交易信息发送给其他节点,以保障交易不被丢失),无法及时处理共识,这直接影响了该網絡处理交易的能力,所以,我们通过使用双通道,将消息分开进行处理,使消息能够被及时处理,进一步提升系统的处理能力及稳定性。3DD顯卡之家

改良內存溢出3DD顯卡之家

通過前面的修改,我們的重點開始落在系統對交易處理的能力上,而這個現象就是在壓力測試時出現的。當我們以400筆每秒的速度向底層寫入數據時,隨著數據量的增加,某個節點就會出現宕機的現象,並且無法恢複,影響了系統的健壯性。通過分析日志、代碼,我們發現當系統重啓時,會加載大量的已被存儲的數據,這使得大量的內存被消耗,沒有資源去處理其他操作,導致系統宕機。3DD顯卡之家

我們通過修改加載數據的邏輯,在保證對數據無影響的情況下,使系統快速恢複運行,提高了系統的健壯性。3DD顯卡之家

改良視圖異常3DD顯卡之家

视图是共识中一个比较重要的概念,用于網絡中各节点的共识,其主要包含共识过程中产生的所有信息及状态。在稳定性测试过程中,当长时间向超级账本系统写入大量数据时,会出现網絡中节点之间共识失败,无法记录交易的现象,通过跟踪分析输出日志,我们发现是由于各节点之间所存储的视图信息不一致而导致的。3DD顯卡之家

修改代码逻辑之后,通过将视图阶段性标识(即每执行一定量的交易后记一个标识)和添加证书的方式来保证各节点所记录的视图信息的一致性,这样使得網絡中各节点能够稳定运行,即使出现视图紊乱,也会很快达成一致,恢复正常。3DD顯卡之家

改良交易處理異常3DD顯卡之家

对于一个金融系统,最不能容忍的就是丢失交易或出现“双花”的现象,而超级账本存在丢交易和“双花”问题。主要是因为当大量交易涌入到系统中,超出了系统的处理能力,部分交易的丢失就成为可能。为了防止这种现象的产生,我们通过增加中间层服务,控制流向底层網絡的数据量;启用非验证节点,使交易均等分发至其他节点,进而保证底层網絡中的节点能够处理所有的交易,防止交易丢失。3DD顯卡之家

而对于“双花”现象,由于超级账本網絡中各节点处理交易的延时,会导致部分交易被重复提交。经过分析,我们通过调整过滤机制及过滤的时机,保证一笔交易只执行一次, 进而防止“双花”现象的出现。3DD顯卡之家

改良讀寫異常3DD顯卡之家

在进行压力测试时,起初只是关注了底层系统对写数据的能力,并未关注对数据读取的能力。在后续进行并发读写数据操作时,发现一段时间后节点与合约之间的通信会断开,导致进入網絡的数据无法记,而查询操作也会失败。深入剖析代码,发现主要原因是由于原版设计中读写锁设计不合理所导致的,通过修改读写部分的代码逻辑,在不影响最终结果的情况下,将通信断开的问题进行修复,进而保证了系统的稳定性及功能的完善。并且将读写锁的修改方案提交到github上,为超级账本的发展贡献了自己的一份力量。3DD顯卡之家

就现在而言,超级账本仍处于概念验证阶段,0.6版本不能在生产环境实施运行。而通过我们团队不懈的努力,改进后的0.6版本已经具备了上线运行的条件。随着技术的成熟,我们推出的fabric1.0 Alpha 版本新增了许多新特性,并且此版本是官方推出可用于生产环境部署的商业级应用,期待1.0版本为我们带来的惊喜。3DD顯卡之家

責任編輯:ct3DD顯卡之家

相關推薦