SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Build
the Blockchain as a Service
using Ethereum on Kubernetes
Ci-Jie
李麒傑 (James)
• Web (front end & back end developer)
• Spark, Hadoop
• TensorFlow, Keras
• Docker, Kubernetes
• Blockchain (Ethereum)
Agenda
區塊鏈是什麼?
架構
Demo
Q & A
區塊鏈
是什麼?
採用以太坊(Ethereum)為例
概念
• 沒有中心點
• 所有節點共同維護帳本
• 已驗證的交易永久保存在區塊鏈
• 區塊與區塊間有密不可分的關係
• 交易驗證節點並非自己的
特點
Block 111(hash: a)
Transaction A
Transaction B
Block 112(hash: b)
Transaction C
hash b = hash(hash(Transaction C) + hash a)
區塊與交易
Block 200(hash: a)
Transaction A
Transaction B
Block 201(hash: b)
Transaction C
Block 202(hash: c)
Transaction D
Transaction E
假設目前區塊已產生至 Block 1000,並惡意竄改 Block 200 的 Transaction A
為 Transaction F,則…
Transaction F
惡意竄改
Block 200(hash: a)
Transaction A
Transaction B
Block 201(hash:b)
Transaction C
Block 202(hash:b)
Transaction D
Transaction E
• Block 200 的 hash a 受影響,以此類推 201, 202…1000 的 hash 皆受到影響
• 若要讓此竄改成功需更改 800 * (node / 2 + 1) 筆交易
• 在修改的同時,可能會產生新的 block
Transaction F
惡意竄改
• 愈久以前的交易紀錄更改愈困難
• 節點愈多也會增加更改難度
小結
• 任何交易的驗證並非使用自己的運算資源
• 需支付手續費作為獎勵給提供資源的節點
• 手續費 = gas price * gas used
Gas
• 區塊產生間隔時間保持約 14 秒
• 節點愈多則系統會調整困難度
困難度
架構
• 擴展或縮減區塊鏈叢集規模耗時
• 挖礦節點故障無法自動還原
• 無統一介面管理所有節點
解決問題
• 各別節點儲存所註冊帳號的金鑰
• 若在Kubernetes受限於load balancer
額外問題
Kuberum
Kubernetes
Service
Netstat
Pod
Node1
Pod
NodeN
Pod
… Monitor
Pod
OpenStack
NFS
Server
• Netstat : Ethereum dashboard
• Node : Ethereum miner nodes
• Monitor : 監控所有節點狀況,並維護整體 Ethereum 叢集
• NFS : 儲存整體 Ethereum 叢集資訊供同步使用
• Proxy : 獨立 JSON-RPC 窗口供呼叫使用
• 運用 docker-compose 建立測試叢集
• 建立兩個 Node containers,一個 Netstat container 與
一個 Monitor container
miniEther
Docker
Node1
Container
(172.16.0.11)
Node2
Container
(172.16.0.12)
Netstat
Container
(172.16.0.10)
Monitor
Container
(172.16.0.13)
Demo
Q & A
Thank you!

Mais conteúdo relacionado

Mais procurados

Block chain
Block chainBlock chain
Block chainJini Lee
 
區塊鏈創新基地 - 區塊鏈
區塊鏈創新基地 - 區塊鏈區塊鏈創新基地 - 區塊鏈
區塊鏈創新基地 - 區塊鏈Hu Kenneth
 
20160230联动技术大讲堂xx(刘胜)区块链应用研究1初探v1.2.0305
20160230联动技术大讲堂xx(刘胜)区块链应用研究1初探v1.2.030520160230联动技术大讲堂xx(刘胜)区块链应用研究1初探v1.2.0305
20160230联动技术大讲堂xx(刘胜)区块链应用研究1初探v1.2.0305liu sheng
 
区块链与金融科技的未来
区块链与金融科技的未来区块链与金融科技的未来
区块链与金融科技的未来Wanfeng Chen
 
投資還是投機?帶你入門虛擬貨幣與區塊鏈
投資還是投機?帶你入門虛擬貨幣與區塊鏈投資還是投機?帶你入門虛擬貨幣與區塊鏈
投資還是投機?帶你入門虛擬貨幣與區塊鏈Yao-Wei Ou
 
比特币与区块链
比特币与区块链比特币与区块链
比特币与区块链haipome
 
PKI Introduction / 公钥基础设施介绍
PKI Introduction / 公钥基础设施介绍PKI Introduction / 公钥基础设施介绍
PKI Introduction / 公钥基础设施介绍Zac John
 
金融革命?談區塊鏈上的去中心化金融應用
金融革命?談區塊鏈上的去中心化金融應用金融革命?談區塊鏈上的去中心化金融應用
金融革命?談區塊鏈上的去中心化金融應用Yao-Wei Ou
 
在 Kotlin/Android 使用 Ethereum Smart Contract
在 Kotlin/Android 使用 Ethereum Smart Contract在 Kotlin/Android 使用 Ethereum Smart Contract
在 Kotlin/Android 使用 Ethereum Smart ContractYenwen Feng
 

Mais procurados (9)

Block chain
Block chainBlock chain
Block chain
 
區塊鏈創新基地 - 區塊鏈
區塊鏈創新基地 - 區塊鏈區塊鏈創新基地 - 區塊鏈
區塊鏈創新基地 - 區塊鏈
 
20160230联动技术大讲堂xx(刘胜)区块链应用研究1初探v1.2.0305
20160230联动技术大讲堂xx(刘胜)区块链应用研究1初探v1.2.030520160230联动技术大讲堂xx(刘胜)区块链应用研究1初探v1.2.0305
20160230联动技术大讲堂xx(刘胜)区块链应用研究1初探v1.2.0305
 
区块链与金融科技的未来
区块链与金融科技的未来区块链与金融科技的未来
区块链与金融科技的未来
 
投資還是投機?帶你入門虛擬貨幣與區塊鏈
投資還是投機?帶你入門虛擬貨幣與區塊鏈投資還是投機?帶你入門虛擬貨幣與區塊鏈
投資還是投機?帶你入門虛擬貨幣與區塊鏈
 
比特币与区块链
比特币与区块链比特币与区块链
比特币与区块链
 
PKI Introduction / 公钥基础设施介绍
PKI Introduction / 公钥基础设施介绍PKI Introduction / 公钥基础设施介绍
PKI Introduction / 公钥基础设施介绍
 
金融革命?談區塊鏈上的去中心化金融應用
金融革命?談區塊鏈上的去中心化金融應用金融革命?談區塊鏈上的去中心化金融應用
金融革命?談區塊鏈上的去中心化金融應用
 
在 Kotlin/Android 使用 Ethereum Smart Contract
在 Kotlin/Android 使用 Ethereum Smart Contract在 Kotlin/Android 使用 Ethereum Smart Contract
在 Kotlin/Android 使用 Ethereum Smart Contract
 

Semelhante a Build the Blockchain as a Service using Ethereum on Kubernetes

Ethereum Smart Contract Development
Ethereum Smart Contract DevelopmentEthereum Smart Contract Development
Ethereum Smart Contract DevelopmentTitan gene
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训青帅 常
 
Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Ch Rick
 
以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.jsHO-HSUN LIN
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am iTwinsen Liang
 
Make your DVR playground using DevStack
Make your DVR playground using DevStackMake your DVR playground using DevStack
Make your DVR playground using DevStackJiang Jun
 

Semelhante a Build the Blockchain as a Service using Ethereum on Kubernetes (6)

Ethereum Smart Contract Development
Ethereum Smart Contract DevelopmentEthereum Smart Contract Development
Ethereum Smart Contract Development
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器
 
以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
 
Make your DVR playground using DevStack
Make your DVR playground using DevStackMake your DVR playground using DevStack
Make your DVR playground using DevStack
 

Build the Blockchain as a Service using Ethereum on Kubernetes

Notas do Editor

  1. 大家好, 我今天要跟大家分享我在 Kubernetes 建立區塊鏈的經驗,我採用的是以太坊(Ethereum)這套 大家有聽過或用過嘛? 今天議程的內容會以我所遇到的問題與我想出來的解決方案為主 或許我的方法不是最好的,但是可以提供大家作為參考 那我們開始今天的議程
  2. 首先我先自我介紹 我是本校的研究生,早期是以 Web front end 與 back 的開發,後來慢慢開始接觸資料分析 Spark Hadoop 與容器化技術 Docker Kubernetes 與區塊鏈技術 那我本身區塊鏈是以以太坊為主,也是今天我們講的主軸
  3. 今天議程流程大致上如圖,會先簡單介紹什麼是區塊鏈,區塊鏈與 Kubernetes 結合會產生什麼樣的問題,以及我利用什麼方式去解決這個問題及建立以太坊區塊鏈在 Kubernetes 上有什麼好處
  4. 首先什麼是區塊鏈
  5. 如圖我們可以看出來,區塊鏈是由很多個節點所構成的(圓圈),而且每個節點都與其他節點串接在一起構成一個類似網路的樣子,每個節點我們可以利用一般的PC或是Server或者我們利用Openstack將運算節點的資源虛擬化後,建立虛擬機器來當節點都行。並且在這個區塊鏈上的節點彼此互相競爭,爭取產生下一個區塊的權力,那麼競爭的方式我們可以把它想像成用亂數去產生一個符合條件的字串,例如我今天的條件是產生一個開頭是 00 的字串,那麼所有節點都需採用亂數方式去產生一個字串符合這個條件的,所以運算節點資源遇強大我每秒鐘可以產生出的字串也愈多,取得產生區塊的權力機率就愈高。那個取得產生區塊的權力有什麼好處,其實產生區塊及是驗證區塊內所有交易的權力,當然就可以從中賺取手續費獲得獎勵。所以依照前面的流程就是俗稱的挖礦獲取獎勵的機制。
  6. 所以我們這裡列了幾個區塊鏈的特點,區塊鏈沒有所謂的中心節點,或者我們說每個節點都是中心節點,會去記錄所有區塊的內容包含所有交易記錄。將所有交易記錄除儲存在串接在這個區塊鏈的節點上,因此就不會有單一節點被串改資料而導致資料被異動的問題。當有一個區塊被產生出來時,將同步這個區塊到每個節點上進行備份,若已經被驗證個區塊與交易都將被永久保存在區塊鏈中,並加密保存。另外區塊與區塊之間都有密不可分的關係,等等會討論到安全性的問題,我們可以發現若惡意串改一筆交易會連動到很多個區塊,進而影響整理區塊鏈資料的正確性,因此對於資料惡意串改成功的機率就降低了。最後,我們在區塊鏈上的所有交易都並非是自己的節點,也就是說我今天沒有花費任何運算節點在這個區塊鏈上,我仍可以利用這個區塊鏈進行交易。因此會有獎勵機制去獎勵幫助我們驗證交易的節點。
  7. 接下來來看一下區塊加密的方式,若產生新的區塊,如圖上的 block 112 並且上面存在一筆 transaction c 那麼我們 block 112 的 hash 值會是由下方的算是產生。由 transaction c 經過雜湊以後加上 hash a 的值在進一步雜湊
  8. 因此,如果有人要惡意竄改交易,如圖假設現在最新的區塊為 block 1000,因此若要改第 200 個 block 的 transaction a 為 transaction f 則
  9. 依照我們剛剛的算式,會影響到 Block 200 的 hash 值 a ,並且 block 201 的 hash b 也是由 hash a 來的,以此類推會一直往後影響到每個區塊。因此若最新的區塊產生到 block 1000 ,則我們要更改單一條鏈上的 800 個區塊的 hash 值,但是因為以太坊採用的是多數決的策略,所以更改過半的節點即可串改資料。但是其中要探討很多問題,如何進入他人節點進行區塊竄改?在竄改的時候也會有新的區塊產生,因此整體被竄改難度就提昇不少。
  10. 所以對於安全性我們做了一個小結,愈久以前的區塊愈難以被竄改,因為他連動的區塊會愈多。並且若存在的區塊鏈網路夠大,也就是說節點數很多,則也會提昇整體區塊鏈的安全性。
  11. 對於以太坊內還存在很多機制,像是如果對於我的交易我會需要設定一個燃料費,像是我們在現實生活中開車由台中開到台北需要多少油,對於運算節點它只知道所要消耗的燃料。但是燃料價格可以調整的。所以如果我們要明確知道這筆交易需要多少額外的手續費,我們就必須要由當前以太幣與燃料的匯率與我驗證交易需要的燃料相乘。並且這個手續費是由交易方,也就是付錢的人提供。所以假設今天你要給別人十元,實際你帳戶扣款可能是十點零零零一元,其中這個零點零零零一就是由驗證節點賺取的手續費。
  12. 另外以太坊跟比特幣區塊鏈也有一個比較不一樣的地方,以太坊本身有難度回饋機制,會跟去當前區塊產生的時間去更改區塊產生條件的難易度。若區塊大於14秒則降低難度,減少下一個區塊的產生時間。因此在以太坊中,不會有過於長時間未驗證的區塊,但是如果挖礦節點處於高負載狀態仍可能發生等待區塊時間較長的情況
  13. 我們將以太坊建立在 Kubernetes 上想解決的問題如下,將原本挖礦節點服務以 docker base 方式運行,減少服務建立時間,若服務壞掉可透過 deployment 所設定的 replicas 數量重新建立符合數量的 Pod。若發生問題,可以透過 Kubernetes logs 檢視發生狀況,不需一一進入各節點。
  14. 但是把以太坊建立在 Kubernetes 產生了另外的問題,像是我要呼叫各節點帳戶進行交易時,需要呼叫相對應的 JSON RPC 進行帳號認證。我們就必須知道當時所註冊這個帳號的節點,如果呼叫 JSON RPC 時不是找到當時註冊的節點,則會發生找不到該帳戶的錯誤訊息。因此在 Kubernetes 上就需要做而外的元件來彌補 Service 依照 Load balaner 分配請求的問題。
  15. 這邊定義了五個元件來達成整個以太坊區塊鏈的運作。Netstat 是視覺化介面,可以提供使用者觀察當前已驗證的區塊、區塊產生的間隔時間、挖礦節點資訊、手續費匯率等等資訊。 Node 是容器化的挖礦節點,是整個以太坊區塊鏈主要的元件,作為交易驗證的功能,並且同時儲存所有的區塊記錄。Miniter 負責維護整體以太坊區塊鏈的狀態並將狀態更新至NFS Server 上,若有新節點加入或終止在區塊鏈中,則記錄節點資訊至NFS Server 上。NFS 提供一個外部儲存空間儲存以太坊區塊鏈的狀態。Porxy 負責轉發我們預想要將請求導向的位址。
  16. 另外也設計一個 project 以 docker-compose 快速建立一個以太坊環境,提供開發者測試使用