Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

1.12. 區塊鏈落地面臨的問題

1.12.1. 性能問題

區塊鏈目前的底層只適合做,低頻高價值的業務。

區塊鏈的讀取性能通常是沒有問題的,但是區塊鏈的寫入實際上無論你用多少個伺服器節點都不能提升,因為寫入區塊需要做共識算法,這步操作,會在所有節點上進行,同時還需要加密運算,這些操作都是 CPU 密集型操作。所以寫入操作是存在瓶頸的。

解決這個問題,我想出了幾種方案:

性能解決方案

  • 通過消息隊列技術非同步寫入,將需要寫入的區塊放入隊列,非同步完成上鏈操作。

  • 並行寫入,我們可以建設多個區塊鏈平台。多個平台同時服務于業務。

為了達到去中心化並行寫入,我們將在客戶端通過算法,匹配伺服器。而不是在兩個平台前面增加負載均衡。因為這樣又回到了中心化系統。

1.12.2. 顆粒度問題

朔源的顆粒度問題,例如“紅酒”的溯源,我們是將單位溯源做到箱呢?還是打,或是瓶呢?

我們用“四象限法則”分析

		
                       高價值
                   o     |
                         |    o
                         |
    低頻率  --------------+-------------  高頻率 操作頻率
                         |
            o            |	o	
                         |
                       低價值		
                        
                      物品價值   
		
			

通過觀察上面圖,我們可以看到可以有四種情況,低頻低價值,低頻高價值,高頻高價值,高頻低價值

我認為對於低頻高價值和高頻高價值的業務,儘量做到最小顆粒度。

而對於低頻低價值和高頻低價值的業務,可以顆粒度更粗。

1.12.3. 區塊鏈不能替代傳統數據

回歸技術本質,我認為區塊鏈技術本身是一種追求分佈一致性的資料庫。

我們學過資料庫的,都知道CAP理論。CAP理論是指的是在一個分散式系統中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可得兼。大多數區塊鏈,放棄了一些可用性,偏向了一致性和分區容錯。

區塊鏈並非能解決所有問題,雖然他也算是一種資料庫,它能解決問題十分有限,它的數據管理和查詢能力還打不到 NoSQL 的水平,更別提 SQL 的複雜應用。所以在實際的應用中,區塊鏈不能替代數據,只能互補。

所以在項目實施前,仔細想想自己需求,真的需要區塊鏈嗎?還是需要區塊鏈上的一些特性?例如數據不可撰改。如果僅僅是需要區塊鏈的某一個特性。我們可以針對這個需求,思考一下能否使用傳統資料庫解決。

1.12.4. 鏈上,鏈下數據一致性問題

既然區塊鏈替代不了傳統資料庫,那麼必然要在項目中同時使用兩種技術。這樣問題來了,會有兩份數據,一份存儲在鏈下,即傳統資料庫,另外一部分數據上鏈,這樣就有兩份重複的數據,那麼怎樣保證他們的一致性呢?

非鏈上的原生資產在上鏈過程中,有一個重要的問題:原生資產的真實性問題,即鏈上資產、鏈下資產如何保持一致性問題。

區塊鏈和比特幣網絡不同,比特幣是在鏈上產生的,它與區塊鏈密佈可分,是一體的,所以它的數據安全性是自閉環的。而我們的鏈下數據並不是在區塊鏈中產生的,將鏈下數據與區塊鏈對接上鏈

我們需要考慮幾個問題

  1. 怎樣能保證數據的真實和一致性呢?

  2. 當出現不一致的時候以哪個為準呢?

  3. 當需要讀取數據時,是走連上,還是鏈下呢?

  4. 什麼數據上鏈,什麼數據不上鏈?

下面回答上面提出的問題

  • 兩端都將數據做一次hash,可以快速對比是否數據一致

  • 我認為以連上數據為準較好,因為資料庫數據更容易被撰改。

  • 前台走上鏈,後台走資料庫,前台是為用戶提供服務的,所以要走連上數據,後台是管理的,可以直接走資料庫,然後保證資料庫與區塊鏈數據一致。

  • 共享數據上鏈,私有數據不上鏈,想象一下在盟鏈系統中,需要共享給其他成員數據,之前採用 Api介面,有了區塊鏈更好的解決了資源共享問題。

例如下圖我們將共享數據上鏈,在聯盟中共享。私有數據(不能公開的數據)放到自己本地資料庫,或者私鏈中。

			
			盟鏈系統
			
+----------+    +----------+    +----------+
| 你       |    | 我        |   | 他        |
+----------+    +----------+    +----------+			
     |                |              |
     V                V              V
   +------------------------------------+
   | Block Chain                        |  
   +------------------------------------+