底層技術大PK!分分鐘帶你看透區塊鏈和雲計算
我們在研究區塊鏈的過程中發現,區塊鏈的發展和雲計算有非常多的相似之處,因此便有了此文,帶領大家從宏觀的角度認識區塊鏈和雲計算。
雲計算的底層三要素
1.1 計算虛擬化
計算虛擬化就是在虛擬系統和底層硬體之間抽象出CPU和內存等,以供虛擬機使用。計算虛擬化技術需要模擬出一套操作系統的運行環境,在這個環境你可以安裝Windows也是可以安裝Linux,這些操作系統被稱作Guest OS。他們相互獨立,互不影響(相對的,因為當主機資源不足會出現競爭等問題,導致運行緩慢等問題)。
計算虛擬化可以將主機單個物理核虛擬出多個vcpu,這些vcpu本質上就是運行的進程,考慮到系統調度,所以並不是虛擬的核數越多越好;內存相似的,把物理機上面內存進行邏輯劃分出多個段,供不同的虛擬機使用,每個虛擬機看到的都是自己獨立的一個內存。除了這些還需要模擬網路設備、BIOS等。這個虛擬化軟體叫做hypervisor,著名的有ESXI、xen、KVM等,通常分為兩種,第一種是直接部署到物理伺服器上面的,如下圖ESXI
由於直接部署到裸機上面,hypervisor需要自帶各種硬體驅動,虛擬機的所有操作都需要經過hypervisor。還有另一種虛擬化hypervisor,以KVM最為流行(個人電腦上面安裝的virtualbox以及workstations也是),它們依賴與宿主機操作系統,這樣的好處就是可以充分利用宿主機的各種資源管理以及驅動,但效率上面會打一些折扣。下圖是KVM的在使用IO時候的流程圖。
當然也可以從全虛擬化、半虛擬化、硬體輔助虛擬化的角度去說,現在數據中心基本都是硬體輔助虛擬化了,全虛擬化就是完全靠軟體模擬、半虛擬需要修改操作讓其知道自己運行在虛擬環境中、硬體輔助由硬體為每個Guest OS提供一套寄存器、Guest OS可以直接運行在特權級,這樣提高效率。
雖然當前數據中心商用的虛擬化軟體仍然以VMware的ESXI為主,但在OpenStack的推動下,KVM正在慢慢追趕,並且KVM是開源的,下面簡單介紹一下KVM。KVM是基於內核的,從內核2.6以後就自帶了,可以運行在x86和power等主流架構上。 KVM主要是CPU和內存的虛擬化,其它設備的虛擬化和虛擬機的管理則需要依賴QEMU完成。一個虛擬機本質上就是一個進程,運行在QEMU-KVM進程地址空間,KVM(內核空間)和qemu(用戶空間)相結合一起向用戶提供完整的虛擬化環境。
1.2 網路虛擬化
網路虛擬化是一種重要的網路技術,該技術可在物理網路上虛擬多個相互隔離的虛擬網路,不依賴於底層物理連接,能夠動態變化網路拓撲,提供多租戶隔離,從而使得不同用戶之間使用獨立的網路資源切片變成可能,從而提高網路資源利用率,實現彈性的網路。這裡面目前最為火熱的即軟體定義網路(Software Defined Network, SDN),SDN的出現使得網路虛擬化的實現更加靈活和高效,同時網路虛擬化也成為SDN應用中的重量級應用。其核心技術OpenFlow通過將網路設備控制面與數據面分離開來,從而實現了網路流量的靈活控制,使網路作為管道變得更加智能。
通過SDN實現網路虛擬化包括物理網路管理,網路資源虛擬化和網路隔離三部分。而這三部分內容往往通過專門的中間層軟體完成,我們稱之為網路虛擬化平台。虛擬化平台需要完成物理網路的管理和抽象虛擬化,並分別提供給不同的租戶。此外,虛擬化平台還應該實現不同租戶之間的相互隔離,保證不同租戶互不影響。虛擬化平台的存在使得租戶無法感知到網路虛擬化的存在,也即虛擬化平台可實現用戶透明的網路虛擬化。
虛擬化平台
虛擬化平台是介於數據網路拓撲和租戶控制器之間的中間層。面向數據平面,虛擬化平面就是控制器;而面向租戶控制器,虛擬化平台就是數據平面。所以虛擬化平台本質上具有數據平面和控制層面兩種屬性。在虛擬化的核心層,虛擬化平台需要完成物理網路資源到虛擬資源的虛擬化映射過程。面向租戶控制器,虛擬化平台充當數據平面角色,將模擬出來的虛擬網路呈現給租戶控制器。從租戶控制器上往下看,只能看到屬於自己的虛擬網路,而並不了解真實的物理網路。而在數據層面的角度看,虛擬化平台就是控制器,而交換機並不知道虛擬平面的存在。所以虛擬化平台的存在實現了面向租戶和面向底層網路的透明虛擬化,其管理全部的物理網路拓撲,並向租戶提供隔離的虛擬網路。
網路虛擬化平台示意圖:
虛擬化平台不僅可以實現物理拓撲到虛擬拓撲「一對一」的映射,也應該能實現物理拓撲「多對一」的映射。而由於租戶網路無法獨佔物理平面的交換機,所以本質上虛擬網路實現了「一虛多」和「多虛一」的虛擬化。此處的「一虛多」是指單個物理交換機可以虛擬映射成多個虛擬租戶網中的邏輯交換機,從而被不同的租戶共享;「多虛一」是指多個物理交換機和鏈路資源被虛擬成一個大型的邏輯交換機。即租戶眼中的一個交換機可能在物理上由多個物理交換機連接而成。
單虛擬節點映射到多物理節點:
網路資源虛擬化
為實現網路虛擬化,虛擬化平台需要對物理網路資源進行抽象虛擬化,其中包括拓撲虛擬化,節點資源虛擬化和鏈路資源虛擬化。
拓撲虛擬化
拓撲虛擬化是網路虛擬化平台最基本的功能。虛擬平台需要完成租戶虛網中的虛擬節點和虛擬鏈路到物理節點和鏈路的映射。其中包括「一對一」和「一對多」的映射。「一對一」的映射中,一個虛擬節點將會映射成一個物理節點,同理虛擬鏈路也是。而在「一對多」的映射中,一個虛擬節點可以映射成由多個連接在一起的物理節點;一條邏輯鏈路也可能映射成由鏈接在一起的多條鏈路。而對於物理節點而言,一個物理節點可以被多個邏輯節點映射。
節點資源虛擬化
節點資源的虛擬化包括對節點Flow tables(流表)、CPU等資源的抽象虛擬化。流表資源本身是交換機節點的稀缺資源,如果能對其進行虛擬化,然後由虛擬化平台對其進行分配,分配給不同的租戶,那麼就可以實現不同租戶對節點資源使用的分配和限制。拓撲抽象僅僅完成了虛擬節點到物理節點的映射,而沒有規定不同用戶/租戶對物理節點資源使用的分配情況。若希望進行更細粒度的網路虛擬化,節點資源虛擬化非常有必要。
鏈路資源虛擬化
和節點資源一樣,鏈路資源也是網路中重要的資源,而拓撲抽象並沒有規定某些用戶可使用的鏈路資源的多少。所以在進行更細粒度的虛擬化時,有必要對鏈路資源進行虛擬化,從而實現鏈路資源的合理分配。可被抽象虛擬化的鏈路資源包括租戶可使用的帶寬以及埠的隊列資源等等。
網路隔離
網路資源虛擬化僅僅完成了物理資源到虛擬資源的抽象過程,為實現完全的網路虛擬化,還需要對不同的租戶提供隔離的網路資源。網路隔離需要對SDN的控制平面和數據平面進行隔離,從而保證不同租戶控制器之間互補干擾,不同虛網之間彼此隔離。此外,為了滿足用戶對地址空間自定義的需求,虛擬化平台還需要對網路地址進行虛擬化。
控制面隔離
控制器的性能對SDN整體的性能產生極大的影響,所以虛擬化平台需保證租戶的控制器在運行時不受其他租戶控制器的影響,保證租戶對虛擬化平台資源的使用。虛擬化平台在連接租戶控制器時需保證該進程可以得到一定的資源保障,比如CPU資源。而虛擬化平台本身所處的位置就可以輕易實現租戶的控制器之間的相互隔離。
數據面隔離
數據面的資源包括節點的CPU、Flow Tables等資源以及鏈路的帶寬,埠的隊列資源等。為保證各個租戶的正常使用,需對數據面的資源進行相應的隔離,從而保證租戶的資源不被其他租戶所佔據。若在數據面上不進行資源的隔離,則會產生租戶數據在數據面上的競爭,從而無法保障租戶對網路資源的需求,所以很有必要在數據面對資源進行隔離。
地址隔離
為使租戶能在自己的虛擬租戶網中任意使用地址,虛擬化平台需要完成地址的隔離。實現地址隔離主要通過地址映射來完成。租戶可任意定製地址空間,而這些地址對於虛擬化平台而言是面向租戶的虛擬地址。虛擬化平台在轉發租戶控制器南向協議報文時,需要將虛擬地址轉化成全網唯一的物理地址。租戶的伺服器的地址在發送到接入交換機時就會被修改成物理地址,然後數據包的轉發會基於修改之後的物理地址進行轉發。當數據到達租戶目的地址主機出埠,控制器需將地址轉換成原來租戶設定的地址,從而完成地址的虛擬化映射。地址的虛擬化映射使得租戶可以使用完全的地址空間,可以使用任意的FlowSpace(流空間:流表匹配項所組成的多維空間),而面向物理層面則實現了地址的隔離,使得不同的租戶使用特定的物理地址,數據之間互不干擾。
1.3 存儲虛擬化
存儲虛擬化是一種貫穿於整個IT環境、用於簡化本來可能會相對複雜的底層基礎架構的技術。存儲虛擬化的思想是將資源的邏輯映像與物理存儲分開,從而為系統和管理員提供一幅簡化、無縫的資源虛擬視圖。在沒有雲計算之前存儲虛擬化已經發展了很久,可以說和雲計算沒有特別關係,而雲計算存儲通常指的是亞馬遜的S3存儲或者EBS存儲等,將統一的資源池劃分給多個用戶。
對於用戶來說,虛擬化的存儲資源就像是一個巨大的「存儲池」,用戶不會看到具體的磁碟、磁帶,也不必關心自己的數據經過哪一條路徑通往哪一個具體的存儲設備。
從管理的角度來看,虛擬存儲池是採取集中化的管理,並根據具體的需求把存儲資源動態地分配給各個應用。值得特別指出的是,利用虛擬化技術,可以用磁碟陣列模擬磁帶庫,為應用提供速度像磁碟一樣快、容量卻像磁帶庫一樣大的存儲資源,這就是當今應用越來越廣泛的虛擬磁帶庫(VTL, Virtual Tape Library),在當今企業存儲系統中扮演著越來越重要的角色。
主流的存儲虛擬化有以下三種技術,在雲計算場景中通常會根據實際場景選擇合適的技術。
1.4 SAN
先從高端存儲說起,現在高端存儲應該EMC、IBM和HDS的天下,這些年外置存儲跟隨著廉價磁碟不斷提升容量和性能,推動了SAN網路、主機FC介面不斷成熟,在數據中心變得很普遍,尤其在金融領域。
SAN提供的是塊存儲,譬如磁碟陣列裡面有10塊I T的數據盤,然後可以通過做RAID或者邏輯卷(LVM)的方式劃分出10個的數據盤,但這個10個數據盤已經和之前的物理盤不一樣了,一個邏輯盤可能有第一個物理盤提供100G,第二個物理盤提供300G。對於操作系統來說,完全無法感知是物理盤還是邏輯盤,這是存儲資源池的理念。通過RAID或者LVM不僅可以提供數據保護還能夠重新劃分盤的大小,提高讀寫速率。
但SAN也不是毫無缺點,它價格也是比較昂貴的,光纖口,光纖交換機價格高,所以才有了IPSAN存儲,通過IP協議承載存儲協議;無法提供數據共享,一個盤只能掛給一個主機,所以這就有了NAS存儲。
1.5 NAS
NAS是文件存儲,文件存儲相比塊存儲最大的優勢是能共享數據,它基於標準的網路協議,SAN是有自己一套存儲協議的。常見的NAS包括NFS、FTP和HTTP文件伺服器等,由於這種設備通常都有一個IP,所以一般客戶機充當數據網關伺服器可以直接對其訪問。NAS建立在傳統網路之上,所以可以更遠距離的傳輸,並且NAS具有安裝容易易於維護的特點,但其速度通常要比SAN慢很多。
1.6 分散式存儲
伴隨著x86性能提升,以x86晶元構建的小型存儲系統在中端存儲領域開始嶄露頭角。通過將X86本地的磁碟利用起來構建一個大存儲集群。分散式存儲通常能夠同時提供塊存儲和文件存儲的能力。這裡不得介紹一個和OpenStack結合緊密的分散式存儲ceph,下圖是ceph官網的一個整體模塊圖,它提供了CEPH FS文件存儲系統和POSIX介面、對象存儲以及最常用的快存儲。
它的基石是下面的RADOS,再下面就是系統組件,包括:
CEPH OSDs:CEPH的OSD(Object Storage Device)守護進程。主要功能包括:存儲數據、副本數據處理、數據恢復、數據回補,平衡數據分布。並將數據相關的一些監控信息提供給CEPH Moniter,以便CEPH Moniter來檢查其他OSD的心跳狀態。一個CEPH存儲集群,要求至少兩個CEPH OSDs,才能有效的保存兩份數據。注意,這裡的兩個CEPH OSD是指運行在兩台物理伺服器上的,並不是在一台物理伺服器上開兩個CEPH OSD的守護進程。
Moniters:CEPH的Moniter守護進程,主要功能是維護集群狀態的表組,這個表組中包含了多張表,其中有Moniter map、OSD map 、PG(Placement Group) map、CRUSH map。
MDSs:CEPH的MDS (Metadata Server)守護進程,主要保存的是CEPH Filesystem的元數據。注意,對於CEPH的塊設備和CEPH對象存儲都不需要CEPH MDS守護進程。CEPH MDS 為基於POSIX文件系統的用戶提供了一些基礎命令的執行,比如ls、find等等,這樣可以很大層度上降低CPEH 存儲集群的壓力。
還有一個開源的對象存儲就是openstack的Swift,Swift的初衷就是用廉價的成本來存儲容量特別大的數據,swift使用容器來管理對象,允許用戶存儲、檢索和刪除對象以及對象的元數據,而這些操作都是通過用戶友好的RESTful風格的介面完成。
區塊鏈的底層三要素
2.1 共享帳本
共享賬本準確的說應該是分散式賬本技術,這個技術從實質上說就是一個可以在多個站點、不同地理位置或者多個機構組成的網路里進行分享的資產資料庫。在一個網路里的參與者可以獲得一個唯一、真實賬本的副本。賬本里的任何改動都會在所有的副本中被反映出來,反應時間會在幾分鐘甚至是幾秒內。在這個賬本里存儲的資產可以是金融、法律定義上的、實體的或是電子的資產。在這個賬本里存儲的資產的安全性和準確性是通過公私鑰以及簽名的使用去控制賬本的訪問權,從而實現密碼學基礎上的維護。根據網路中達成共識的規則,賬本中的記錄可以由一個、一些或者是所有參與者共同進行更新。
分散式賬本技術使用密碼哈希演算法和數字簽名來確保交易的完整性,同時確保共享賬本是精確副本,並降低了發生交易欺詐的風險,因為篡改需要同時在許多地方同時執行。密碼哈希演算法(比如 SHA256 計算演算法)能確保對交易輸入的任何改動 — 甚至是最細微的改動 — 都會計算出一個不同的哈希值,表明交易輸入可能被損壞。數字簽名則確保交易源自發送方(已使用私鑰簽名)而不是冒名頂替者。
2.2 共識演算法
這裡主要講述區塊鏈在發展過程中出現的五種典型共識演算法:PoW、PoS、DPoS、PBFT和聯合共識。
早期,比特幣Bitcoin作為區塊鏈技術的第一個成功應用率先引入了工作量證明機制(PoW,Proof of Work),工作量證明機制利用了Hash演算法在隨機性上這個非常重要的特性。PoW機制俗稱挖礦,這裡挖的是比特幣里的每一個區塊。每個區塊用包含的交易、時間、以及一個自定義數值來計算這個區塊的Hash。一個合格的區塊的Hash必須滿足前N位為零,因此需要不斷的調整剛才那三個參數來尋找滿足條件的Hash。由於Hash演算法足夠隨機,零的個數越多,算出這個Hash的概率越低。此時,要得到合理的Block Hash需要經過大量嘗試計算,計算時間取決於機器的哈希運算速度。當某個節點提供出一個合理的Block Hash值,說明該節點確實經過了大量的嘗試計算,這就是工作量證明。當然,並不能得出計算次數的絕對值,因為尋找合格的Hash是一個概率事件。當節點擁有佔全網n%的算力時,該節點即有n%的概率率先發布一個合格的區塊。
隨後,由於PoW這種演算法極其耗費計算資源,截至寫本文時(2017年8月),據測算,比特幣網路消耗的電力就已經高達15TW。因此,隨後的NXT等新興密碼學貨幣提出了一種新的思路即股權證明(PoS,Proof of Stake)。這種模式會根據你持有數字貨幣的量和時間,決定你可以發布下一個區塊的概率。在PoS模式下,有一個名詞叫幣齡,每個幣每天產生1幣齡,比如你持有100個幣,總共持有了30天,那麼,此時你的幣齡就為3000,然後按照所有人的幣齡根據一個隨機演算法決定誰來發布下一個區塊。這個時候,如果你被選中發布了一個POS區塊,你的幣齡就會被清空為0重新再來。
PoS也不是沒有缺點,最大的缺點就是在於效率上。因此,比特股BitShares提出了委託股權證明機制(DPoS,Delegated Proof of Stake)。它的原理是讓每一個持有比特股的人進行投票,由此產生101位代表 , 我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利是完全相等的。從某種角度來看,DPoS有點像是議會制度或人民代表大會制度。如果代表不能履行他們的職責(當輪到他們時,沒能生成區塊),他們會被除名,網路會選出新的超級節點來取代他們。
以上的這些共識機制都依賴密碼學貨幣,因為不管是PoW還是PoS,驅動尋找區塊的源動力都是發布新區塊的貨幣獎勵。對於無代幣的系統如HyperLedger Fabric,如何選擇共識機制?這時,我們可以回過頭看看PBFT。BFT(Byzantine Fault Tolerance,拜占庭容錯演算法)是很早就提出的分散式容錯演算法,可以查找拜占庭問題來進一步了解,這裡不做詳述。PBFT作為BFT的一種實現,是一種狀態機副本複製演算法,即服務作為狀態機進行建模,狀態機在分散式系統的不同節點進行副本複製。每個狀態機的副本都保存了服務的狀態,同時也實現了服務的操作。將所有的副本組成的集合使用大寫字母R表示,使用0到|R|-1的整數表示每一個副本。為了描述方便,假設|R|=3f+1,這裡f是有可能失效的副本的最大個數。儘管可以存在多於3f+1個副本,但是額外的副本除了降低性能之外不能提高可靠性。
除此之外,還有一種基於投票的聯合共識(Voting),以Ripple為代表。這種共識使網路能夠基於特殊節點列表達成共識。初始特殊節點列表就像一個俱樂部,要接納一個新成員,必須由51%的該俱樂部會員投票通過。共識遵循這核心成員的51%權力,外部人員則沒有影響力。這種共識方式同樣極大的提高了效率,但是卻需要確保特殊節點中惡意節點不能超過51%,犧牲的是整個網路的去中心化。
2.3 P2P網路
P2P為大眾所熟知主要要歸功於BitTorrent及BT的流行,而P2P網路的核心概念即彼此連接的多台計算機之間都處於對等的地位,各台計算機有相同的功能,無主從之分,一台計算機既可作為伺服器,設定共享資源供網路中其他計算機所使用,又可以作為工作站,整個網路一般來說不依賴專用的集中伺服器,也沒有專用的工作站。網路中的每一台計算機既能充當網路服務的請求者,又對其它計算機的請求做出響應,提供資源、服務和內容。通常這些資源和服務包括:信息的共享和交換、計算資源(如CPU計算能力共享)、存儲共享(如緩存和磁碟空間的使用)、網路共享、印表機共享等。
區塊鏈為了實現分散式賬本的能力,同樣也採用了P2P網路。分散式賬本會分發給網路中的所有成員節點,同時可以阻止任何單個或一組參與者控制底層基礎架構或破壞整個系統。網路中的參與者是平等的,都遵守相同的協議。
作者:謝文傑、金鈺
Python量化投資實戰營(深圳-香港)
量化交易深入解析
用Python做量化交易
Mongodb資料庫與數據處理
Python量化引擎基礎,執行一個策略
環球FOF投資
股票數據統計與Alpha因子策略
量化策略-CTA策略……
2017年8月21日-25日(第二期)深圳-香港
點擊展開全文


※產品經理需要了解的演算法——熱度演算法和個性化推薦
※十大必須掌握的機器學習演算法,竟然都如此有趣
※90後最想去哪買房?大數據為你揭示真相!
※史上最明了的「編程語言琅琊榜」
TAG:大數據實驗室 |
※量子計算「分分鐘」捏爆區塊鏈?
※分分鐘搞懂區塊鏈
※五分鐘看懂區塊鏈
※雲計算和區塊鏈
※3分鐘走近區塊鏈最核心技術
※3分鐘讓你看懂區塊鏈
※區塊鏈底層技術大起底,普通人輕鬆看懂
※十問薛蠻子:投資比例是七分區塊鏈三分傳統,BAT會被區塊鏈幹掉!
※Python大咖分享兩個區塊鏈技術!演算法、挖礦神技能!
※五分鐘-帶你認識區塊鏈的世界
※微軟計劃打造基於區塊鏈的分散式身份管理平台
※讓你媽都懂區塊鏈:區塊鏈的分類
※IBM押注AI、量子計算、區塊鏈,發布未來5年五大科技預測
※用區塊鏈代替雲計算,分散式冗餘計算能成真嗎?
※EKT通用積分CEO周迅:如何搭建一個可大規模商用的區塊鏈公鏈平台
※第一屆區塊鏈技術及應用峰會「區塊鏈核心技術」分論壇預告大放送
※三分鐘讀懂區塊鏈
※馬化騰談區塊鏈:消耗大量能源計算算背書嗎
※分分鐘叫你用Python創建一個區塊鏈!
※區塊鏈的分類與應用