本文為“融合創新”系列講座之一,溪塔科技聯合創始人兼首席架構師寧志偉,分享了“區塊鏈+雲”的融合,會衍生出什麼樣的新技術、新模式。

大家晚上好,今天分享的主題是區塊鏈+雲原生,為鏈插上雲的翅膀。

今天的分享內容主要分為四部分:

聯盟鏈傳統解決方案介紹;實際案例及問題分析;雲原生與聯盟鏈的對比;雲原生聯盟鏈解決方案。

聯盟鏈傳統解決方案介紹

我先簡單介紹下聯盟鏈出現的初衷。區塊鏈最早是比特幣,後來也出現以太坊等公鏈。區塊鏈剛開始的時候,尤其是以太坊出現之後,因為有EVM虛擬機,可以有編程能力,所以很早就有人想把現有的商業場景,像支付、電商、信用卡等這樣的傳統商業場景搬到區塊鏈上來。

但是有幾個問題:

更高的TPS。我們都知道比特幣和以太坊的TPS都非常低,根本無法支撐商業應用。更低的能耗。之前的供應鏈大部分都是用POW算法,能耗耗電非常多,運維一條鏈的成本非常高。更簡單的治理。傳統公鏈裡面有礦工、開發者以及其他各方勢力,一旦公鏈上線之後如果想再做新功能開發或者修復bug,都是需要做分叉,這就需要協調各方面,時間會非常長,所以治理是比較複雜的。

聯盟的初衷大家應該都知道,把共識算法換成基於PBFT之類的共識算法,這樣效率就很高,現在基本上像CITA能夠做到1.5萬以上的TPS。因為是基於投票也不需要耗電去挖礦,所以能耗也降下來了,整個運維一條鏈的成本也非常低。

治理的話,聯盟鏈可以認為是一種實名制的參與方,它都是企業,而且大家都是相互知道有合作的場景,所以才會加到一個聯盟鏈裡,所以治理起來會簡單很多。

在應用方面,現有的聯盟鏈解決方案,包括CITA,基本上都沿襲了以太坊的思路,就是所謂的智能合約DApp。如果想開發應用,就用solidity智能合約語言去寫出合約來實現業務邏輯。

客戶端會提供各種語言的SDK,包括區塊鏈瀏覽器,還有各種錢包,比如說電腦、手機等移動端的錢包。整個鏈其實定位是作為平台,就像現在的以太坊,有多個Dapp都在一條鏈上。

實際案例及問題分析

案例一:我們與寧波移動一起做了個停車場的場景。

停車場的場景比較簡單,這裡面有幾個參與方,一個是停車場的業主,比如說一棟大樓的業主方。還有就是停車場的運維方,因為停車場都不是業主方自己去運維,會找專門的運維公司來做。還有一些設備,比如說停車場有車過來之後抬桿的閘機,這設備一般是由專門的廠商來提供。

這牽涉到幾方的合作,停車場收到錢之後就要按照事先商定好的比例去分賬,這時候一般還會有銀行、金融機構進來,可能還會有監管節點。

這個場景中,業主方會擔心停車場運營方少報賬,因為少報賬之後相當於這錢它自己拿了,不用和其他參與方去分。這裡面做的事情很簡單,就說停車場有車過來之後一抬桿,直接通過設備就把賬戶信息發送到鏈上去,做一個存證,當然停車場運營方也會出一個賬單,會把鏈上賬單和傳統運營平台上的賬單做對比,來保證信息是無誤的。

裡面涉及到的系統(如右圖),其實還是比較複雜的,最底下的終端設備比如說閘機、網絡,閘機裡面會有SIM卡,通過移動互聯網和服務器或者其他系統通信。鍊是部署在中國移動的BSN上。再上面可能就是停車場的一些管理,例如計費、優惠券、導航等,跟這些業務再結合起來。這個場景是比較簡單,但是衍生出來的東西是非常有想像力的。

案例二:存證,這應該是區塊鏈最簡單、最經典的場景。

政鏈通電子數據存證管理系統,這個地方鏈其實做的事情非常簡單,會有各個不同的部門,比如說電子招投標,招標方先發布招標信息,投標方會去製作電子標書,然後把標書提交過去,可能後面還有各種各樣的流程,會有電子文件在不同的參與方之間相互傳遞。

鏈在這裡起的作用非常簡單,就是把電子的文件算一下Hash,把文件的Hash值上鍊。文件本身還是靠傳統的下載、郵件方式去傳輸,作用就是發送的文件接收方能夠做一個確認,收到文件之後在區塊鏈上看到已經放入Hash上了,再做一次Hash,和鏈上做對比,就知道文件確實是你發的,而且中間沒有被人篡改過。

從鏈上來說也是非常簡單的,但其實它上面可以做的東西也非常多,除了電子招投標,比如說電子檔案、數據交換、電子憑證等各種各樣的業務。

總結一下:

解決企業間數據可信的問題。這也是一開始提到的CITA科技是基於區塊鏈來做的系統,解決的就是企業間數據傳輸可信。業務系統複雜。像剛才舉的兩個例子,除了鏈在其中是非常薄的一層或者說佔比非常小,它上面、下面可能都有更加複雜的業務系統來做支撐。私有化部署。傳統的聯盟鏈解決方案的定位還是在平台中,希望很多應用都來共用同一條鏈,但在實際實施過程中基本上都是私有化部署的,聯盟鏈的運維其實成本非常低,用幾台服務器可以了,系統配置要求也不是很高。基本上一個應用一條鏈。

看了這些場景的特點之後,就可以看到傳統的聯盟鏈解決方案在其中有幾個問題。

1、切換成本太高。這個可能和公鏈還不太一樣,公鏈面向的更多是2C,或者說面臨的場景是一種之前沒有出現過的新場景,所以說並沒有很多的歷史成本。但對於企業市場來說,企業已經在傳統的IT系統上投入非常大,而且可能持續了很多年。如果你想讓它遷移到區塊鏈上來,把業務系統拋掉,用智能合約solidity把業務邏輯再重新實現一遍,這對企業用戶來說是不可接受的。

2、生態不成熟。雖然說以太坊在眾多區塊鏈項目裡算做的比較好,但和傳統的IT系統,尤其企業領域的IT系統相比來說成熟度還是差很多。

3、平台定位不成立。在具體實施部署的時候基本上都是一個應用一條鏈,大家不會說要再去共用一個之前的鏈。

雲原生與聯盟鏈的對比

雲原生是基於容器編排、微服務這樣一些技術興起之後出現的,有CNCF基金會,孵化了很多項目推動了整個生態的發展。當然這裡講的就是K8S,雲原生里面最基礎也是最重要的系統。

可以先看一下右邊的架構圖,可以跟區塊鏈的應用架構做對比,它這個etcd也是分佈式的系統,可以有多個節點,相互之間會做備份,當然主要是為了高可用性,保存了整個集群的狀態。

API server,所有其他的系統都不能直接訪問etcd,都是通過API server去訪問,所以說API server有點像聯盟鏈裡的JsonRPC的位置。

剩下的都可以把它看成是業務系統,如果把K8S看成業務系統,它的業務就是做集群資源調度,比如說Controller、Scheduler,我們都把它視為具體的業務系統。區塊鍊或者說etcd在整個系統裡面的作用其實只是保存元信息,其他的業務系統通過監控元信息的變化,比如寫入或者更新來驅動業務系統去做具體業務的事情。

k8s有一個非常獨特的特點,就是“聲明式”,比如說我想部署一個網站,如果只有一個實例,它掛掉之後網站就無法訪問。其實通過API server只要聲明要起一個應用,它的鏡像是什麼,要起幾個實例,系統會把信息記在etcd裡面,其他的組件會監控etcd元信息。比如說看到創建了一條記錄之後,就開始往work節點上的Kubelet發消息,去創建相應的容器。

從整體架構來講,K8S和聯盟鍊是有相似的地方,接下來會做更詳細的對比。

首先,不管是etcd還是聯盟鏈,都可以視為分佈式的系統,所以它們都用到了分佈式的技術。

在分佈式技術裡etcd用的一致性算法是Raft;像聯盟鏈一般都是用PBFT之類的共識算法。區別是BFT即拜占庭容錯算法,能容忍其中有一部分節點是惡意的。而Raft只能解決機器宕機的場景。

在etcd中使用一致性算法主要是為了高可用的目的。聯盟鏈使用拜占庭容錯的共識算法,是因為系統裡會有不同的參與方,而且參與方面是不同的企業,沒有人能夠約束其他人不作惡。

面臨的場景不一樣,所以選擇了不同的技術。

對外表現來說“信任的邊界”,對傳統的etcd、K8S這樣的分佈式系統,主要還是在一個企業內部起多個節點和備份,只是為了高可用,所以他們之間相互是信任的,你發送給我什麼數據,我直接接收了,信任邊界是在外面的,可能在機房最外用防火牆、密碼、登錄服務等各種技術,只要把外圍守好,整個系統就沒問題了。

但是對於像聯盟鏈這樣的去中心化系統,節點之間都是相互不信任的,信任邊界在節點周圍,而不是在系統外面,所以不能用用戶名密碼、防火牆來解決安全問題,聯盟鏈要用公私鑰來做賬戶,發消息需要簽名,收到消息之後要驗簽名,證明是你發的而且沒有經過篡改。這是信任邊界的不同。

聯盟鏈沿襲了以太坊的思路,要做擴展開發Dapp就好了,Dapp基本是智能合約+客戶端,就像以太貓,在鏈上部署一個合約,在網頁把合約裡的數據進行圖形化的展示,提供給用戶交互的手段,這是聯盟鏈的做法。

K8S也有非常好的擴展性,K8S裡面一個基礎的名詞叫“資源resource”,它本身提供一些resource類型,比如說Pod、Deployment、Storage、PV等等。還允許開發者自定義資源類型。

就像剛才講的etcd裡只是記錄了資源的源信息,具體資源怎麼創建、怎麼銷毀是由Controller來做,Controller會監控etcd裡存儲的資源的元信息,一旦發生變動之後,監控到了就會做相應的處理。

這其實跟聯盟鏈的做法是非常類似的,因為etcd沒有像以太坊的EVM,是不具備編程能力的,所以Custom Resource自定義資源類型,相當於合約除了邏輯外的數據結構部分。傳統的智能合約裡的邏輯業務處理的代碼和客戶端代碼都在Controller裡。

舉個例子,比如說Statefulset,這也是K8S裡自帶的。假如說K8S裡沒有Statefulset資源類型,是我們自己實現的。自定義資源類型相關的信息是存在etcd裡的,Controller要我們自己開發,其實就是應用,通過API Server去監控etcd裡我關心的類型的資源變化。比如通過命令行工具創建資源,這邊就能監控到,處理就是生成三個Pod,然後會調Docker創建相關的容器。

K8S是平台化的定位,現在很多PaaS平台都是基於K8S來做的,搭一個系統有很多人同時來用,就是所謂的“多租戶”,所以有Namespace機制,能把不同的資源隔離開,大家相互看不到。當然還有基於角色的權限控制系統RBAC,能給不同的角色賦予不同的權限,比方說你不能訪問別人創建的東西。

也有節點管理,etcd也是分佈式系統,可以增加/刪除節點。因為是基於投票,所以也有投票節點和普通的同步節點的區別。你可以把一個節點從同步節點提升為投票節點,也可以反過來。

K8S的治理手段聯盟鏈都有,CITA也實現了基於角色的權限控制系統,節點管理聯盟鏈肯定是有的,能夠動態地增加刪除共識節點。

除此之外,聯盟鏈還有一些比較特別的治理功能。賬戶系統剛才已經提到過了,聯盟鏈賬戶系統是基於公鑰體系的賬戶系統。

聯盟鏈有各種系統管理功能,比方說像增加/刪除共識節點,這樣的事情必須要超級管理員賬戶來做的,普通用戶是沒有系統管理的權限。 CITA的超級管理員不一定是一個單獨的賬戶,也可以是一個合約。如果合約是多籤的合約,就能實現委員會式的系統管理。比如說增加共識節點,事先定好了幾個委員會的成員,他們來投票,比如達到二分之一以上才通過,才去執行增加節點的操作,這些都是可以實現的。

聯盟鏈可以進行非常精確的經濟激勵。比如在鏈上想給早期用戶一些補貼,假設鏈上是有Token的,我們可以設置,早期用戶也是要花Token去玩遊戲,但可以給你返利,返百分之多少,或者前幾天返多少,後面返的更少,這都是可以很靈活設置的,這是聯盟鏈治理方面的優勢。

融合方案——聯盟鏈

經過剛才的介紹大家可以看到聯盟鍊和元原生的K8S從整體架構上是非常相似的,可以認為它是一種分佈式系統的模式,分佈式系統只管理元信息,具體的工作還是靠傳統的IT系統去執行去實現這樣一種模式。

聯盟鍊和雲原生的融合方案,融合肯定需要對兩方面都是有好處的。對於聯盟鏈來說,融合能解決運維問題,K8S在運維方面確實做的非常好。可以增強軟件棧。最早關注到雲原生社區也是看到有很多需要的功能,比如說分佈式存儲,比如說解決複雜網絡場景的各種網絡插件,這在雲原生社區裡做了很多,並且很多都已經成熟的,能夠對聯盟鏈軟件棧進行非常有益的補充。

對於雲原生來說,聯盟鏈融合進來以後能給雲原生提供什麼呢?

(一)去中心化場景。

K8S還是傳統的以高可用為目的的分佈式系統,但是聯盟鍊是去中心化的分佈式系統,能夠把系統邊界擴展到企業間。像K8S原本只能在一個企業內部,融合了聯盟鏈之後有可能把原有的應用擴展到企業間去。

不知道現在的網友還知不知道浩方電競平台?在以前沒有網絡遊戲的時候,有很多遊戲有局域網對戰,比如說像《CS》、《魔獸爭霸》都是有局域網對戰功能的。不像現在網絡可以在公網上運行,比如說一個人在北京,一個人在杭州玩遊戲。

浩方做了一個事情,通過模擬的方式讓遊戲認為這兩個機器是在局域網裡的,這樣就把局域網對戰的遊戲變成了網絡遊戲。聯盟鏈加入之後也起到這樣的作用,能把傳統的IT系統邊界擴展到企業間。

(二)零信任安全。

這也是最近比較火的概念。簡單來說就是系統內部不同部分之間是不信任的,一定要通過簽名等各種方式來證明數據確實是你發的。從描述中可以看到,聯盟鍊是天然符合零信任安全的,因為本身就不信任其他的節點。融合之後能夠給傳統IT系統帶來更高的安全性。

(三)可信計算環境。

可信計算有非常多的實現方案,比如說基於硬件英特爾的SGX,也有一些基於密碼學的。大家可以看到,聯盟鏈、區塊鏈就是一種軟件可信計算環境。原理非常簡單,區塊鏈所有的節點都是副本,比如說調一個合約,是所有的共識節點都做執行,執行完了結果之後會算到State root裡做共識。大家算的都一樣,就認為結果是正確的,是可信的。區塊鍊是一種非常低成本,非常簡單粗暴的可信計算方案,對傳統IT系統是非常有益的補充。

(四)密碼學。

區塊鏈相對於傳統軟件來說最獨特的是涉及到非常多密碼學的東西,這是傳統軟件裡很少涉及到的。區塊鏈也推動了密碼學進展,比如說零知識證明,各種隱私方案。

如果將來雲原生面臨去中心化的場景(混合雲、邊緣計算),聯盟鏈除了零信任安全、可信計算之外還有像零知識證明的密碼學方案能在實際的場景中得到應用。

今天的分享就到這裡,感謝大家。

互動問答

問題一:寧老師可以給大家介紹一下云原生和雲計算的本質區別嗎?

寧志偉:雲原生的出現是因為容器技術的出現,像Docker出現之後,應用的部署運維和Docker出現之前有非常大的變化,尤其機器多了以後,又要在機器上部署很多應用,之前是非常麻煩的事情,但是容器技術出現之後可以很方便地管理很多機器、很多應用。 K8S就是一個容器編排、集群調度的系統。

IaaS層技術成熟了以後有了雲,能以統一的方式管理非常多的機器資源。雲原生會稍微更偏上層一些,關注的是偏開發和運維方面的東西。像K8S就是容器編排系統,在開發過程中跟現在流行的微服務架構也非常契合。

大家有興趣深入了解話,可以參考一下云原生技術方面的優秀書籍。

問題二:謝謝寧老師,對於合約虛擬機的發展您是怎麼看的?

寧志偉:現在用的最多的是以太坊的EVM,因為生態已經起來了,包括CITA雖然是完全重新實現的,但為了兼容以太坊的Dapp和智能合約生態,我們也用了EVM。現在區塊鏈有一種趨勢,大家都在重複造輪子,可能一個鏈搞一個新的VM、新的智能合約編程語言。

至少對企業場景來說是不太好的,用戶開發的時候切換成本會非常高,學習成本會非常高。用戶更希望用熟悉通用的編程語言,JAVA、GO、C++這種語言來寫智能合約。在CITA-Cloud裡目前為止是沒有智能合約語言和VM的,有點像是K8S這種,直接寫類似於Controller應用,來監控鏈上信息做相應的業務處理。可能將來還是會兼容EVM的,把EVM封裝成Controller就可以了。

智能合約在輕量化開發,或者比較小的應用上還是非常有優勢的,寫腳本就可以了。以太坊相當於雲原生里的Serverless技術,對雲、對平台做了非常高層次的抽象,不用開發業務系統,就寫個腳本,系統會動態地分配機器資源,做運算,之後給個結果就可以了。

本次分享結束。 “融合創新”是區塊鏈未來的發展趨勢嗎?區塊鏈又該如何與其它技術進行融合,創新商業模式?點擊閱讀原文,報名第六屆區塊鏈全球峰會,聽聽行業大佬們怎麼說。