知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
區塊鏈目前的底層只適合做,低頻高價值的業務。
區塊鏈的讀取性能通常是沒有問題的,但是區塊鏈的寫入實際上無論你用多少個伺服器節點都不能提升,因為寫入區塊需要做共識算法,這步操作,會在所有節點上進行,同時還需要加密運算,這些操作都是 CPU 密集型操作。所以寫入操作是存在瓶頸的。
解決這個問題,我想出了幾種方案:
性能解決方案
通過消息隊列技術非同步寫入,將需要寫入的區塊放入隊列,非同步完成上鏈操作。
並行寫入,我們可以建設多個區塊鏈平台。多個平台同時服務于業務。
為了達到去中心化並行寫入,我們將在客戶端通過算法,匹配伺服器。而不是在兩個平台前面增加負載均衡。因為這樣又回到了中心化系統。
朔源的顆粒度問題,例如“紅酒”的溯源,我們是將單位溯源做到箱呢?還是打,或是瓶呢?
我們用“四象限法則”分析
高價值 o | | o | 低頻率 --------------+------------- 高頻率 操作頻率 | o | o | 低價值 物品價值
通過觀察上面圖,我們可以看到可以有四種情況,低頻低價值,低頻高價值,高頻高價值,高頻低價值
我認為對於低頻高價值和高頻高價值的業務,儘量做到最小顆粒度。
而對於低頻低價值和高頻低價值的業務,可以顆粒度更粗。
回歸技術本質,我認為區塊鏈技術本身是一種追求分佈一致性的資料庫。
我們學過資料庫的,都知道CAP理論。CAP理論是指的是在一個分散式系統中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可得兼。大多數區塊鏈,放棄了一些可用性,偏向了一致性和分區容錯。
區塊鏈並非能解決所有問題,雖然他也算是一種資料庫,它能解決問題十分有限,它的數據管理和查詢能力還打不到 NoSQL 的水平,更別提 SQL 的複雜應用。所以在實際的應用中,區塊鏈不能替代數據,只能互補。
所以在項目實施前,仔細想想自己需求,真的需要區塊鏈嗎?還是需要區塊鏈上的一些特性?例如數據不可撰改。如果僅僅是需要區塊鏈的某一個特性。我們可以針對這個需求,思考一下能否使用傳統資料庫解決。
既然區塊鏈替代不了傳統資料庫,那麼必然要在項目中同時使用兩種技術。這樣問題來了,會有兩份數據,一份存儲在鏈下,即傳統資料庫,另外一部分數據上鏈,這樣就有兩份重複的數據,那麼怎樣保證他們的一致性呢?
非鏈上的原生資產在上鏈過程中,有一個重要的問題:原生資產的真實性問題,即鏈上資產、鏈下資產如何保持一致性問題。
區塊鏈和比特幣網絡不同,比特幣是在鏈上產生的,它與區塊鏈密佈可分,是一體的,所以它的數據安全性是自閉環的。而我們的鏈下數據並不是在區塊鏈中產生的,將鏈下數據與區塊鏈對接上鏈
我們需要考慮幾個問題
怎樣能保證數據的真實和一致性呢?
當出現不一致的時候以哪個為準呢?
當需要讀取數據時,是走連上,還是鏈下呢?
什麼數據上鏈,什麼數據不上鏈?
下面回答上面提出的問題
兩端都將數據做一次hash,可以快速對比是否數據一致
我認為以連上數據為準較好,因為資料庫數據更容易被撰改。
前台走上鏈,後台走資料庫,前台是為用戶提供服務的,所以要走連上數據,後台是管理的,可以直接走資料庫,然後保證資料庫與區塊鏈數據一致。
共享數據上鏈,私有數據不上鏈,想象一下在盟鏈系統中,需要共享給其他成員數據,之前採用 Api介面,有了區塊鏈更好的解決了資源共享問題。
例如下圖我們將共享數據上鏈,在聯盟中共享。私有數據(不能公開的數據)放到自己本地資料庫,或者私鏈中。
盟鏈系統 +----------+ +----------+ +----------+ | 你 | | 我 | | 他 | +----------+ +----------+ +----------+ | | | V V V +------------------------------------+ | Block Chain | +------------------------------------+