我們在研究區塊鏈的過程中發現,區塊鏈的發展和云計算有非常多的相似之處,因此便有了此文,帶領大家從宏觀的角度認識區塊鏈和云計算。
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(用戶空間)相結合一起向用戶提供完整的虛擬化環境。
網絡虛擬化是一種重要的網絡技術,該技術可在物理網絡上虛擬多個相互隔離的虛擬網絡,不依賴于底層物理連接,能夠動態變化網絡拓撲,提供多租戶隔離,從而使得不同用戶之間使用獨立的網絡資源切片變成可能,從而提高網絡資源利用率,實現彈性的網絡。這里面目前為火熱的即軟件定義網絡(Software Defined Network, SDN),SDN的出現使得網絡虛擬化的實現更加靈活和高效,同時網絡虛擬化也成為SDN應用中的重量級應用。其核心技術OpenFlow通過將網絡設備控制面與數據面分離開來,從而實現了網絡流量的靈活控制,使網絡作為管道變得更加智能。
通過SDN實現網絡虛擬化包括物理網絡管理,網絡資源虛擬化和網絡隔離三部分。而這三部分內容往往通過專門的中間層軟件完成,我們稱之為網絡虛擬化平臺。虛擬化平臺需要完成物理網絡的管理和抽象虛擬化,并分別提供給不同的租戶。此外,虛擬化平臺還應該實現不同租戶之間的相互隔離,保證不同租戶互不影響。虛擬化平臺的存在使得租戶無法感知到網絡虛擬化的存在,也即虛擬化平臺可實現用戶透明的網絡虛擬化。
虛擬化平臺
虛擬化平臺是介于數據網絡拓撲和租戶控制器之間的中間層。面向數據平面,虛擬化平面就是控制器;而面向租戶控制器,虛擬化平臺就是數據平面。所以虛擬化平臺本質上具有數據平面和控制層面兩種屬性。在虛擬化的核心層,虛擬化平臺需要完成物理網絡資源到虛擬資源的虛擬化映射過程。面向租戶控制器,虛擬化平臺充當數據平面角色,將模擬出來的虛擬網絡呈現給租戶控制器。從租戶控制器上往下看,只能看到屬于自己的虛擬網絡,而并不了解真實的物理網絡。而在數據層面的角度看,虛擬化平臺就是控制器,而交換機并不知道虛擬平面的存在。所以虛擬化平臺的存在實現了面向租戶和面向底層網絡的透明虛擬化,其管理全部的物理網絡拓撲,并向租戶提供隔離的虛擬網絡。
網絡虛擬化平臺示意圖:
虛擬化平臺不僅可以實現物理拓撲到虛擬拓撲“一對一”的映射,也應該能實現物理拓撲“多對一”的映射。而由于租戶網絡無法獨占物理平面的交換機,所以本質上虛擬網絡實現了“一虛多”和“多虛一”的虛擬化。此處的“一虛多”是指單個物理交換機可以虛擬映射成多個虛擬租戶網中的邏輯交換機,從而被不同的租戶共享;“多虛一”是指多個物理交換機和鏈路資源被虛擬成一個大型的邏輯交換機。即租戶眼中的一個交換機可能在物理上由多個物理交換機連接而成。
單虛擬節點映射到多物理節點:
網絡資源虛擬化
為實現網絡虛擬化,虛擬化平臺需要對物理網絡資源進行抽象虛擬化,其中包括拓撲虛擬化,節點資源虛擬化和鏈路資源虛擬化。
拓撲虛擬化
拓撲虛擬化是網絡虛擬化平臺基本的功能。虛擬平臺需要完成租戶虛網中的虛擬節點和虛擬鏈路到物理節點和鏈路的映射。其中包括“一對一”和“一對多”的映射。“一對一”的映射中,一個虛擬節點將會映射成一個物理節點,同理虛擬鏈路也是。而在“一對多”的映射中,一個虛擬節點可以映射成由多個連接在一起的物理節點;一條邏輯鏈路也可能映射成由鏈接在一起的多條鏈路。而對于物理節點而言,一個物理節點可以被多個邏輯節點映射。
節點資源虛擬化
節點資源的虛擬化包括對節點Flow tables(流表)、CPU等資源的抽象虛擬化。流表資源本身是交換機節點的稀缺資源,如果能對其進行虛擬化,然后由虛擬化平臺對其進行分配,分配給不同的租戶,那么就可以實現不同租戶對節點資源使用的分配和限制。拓撲抽象僅僅完成了虛擬節點到物理節點的映射,而沒有規定不同用戶/租戶對物理節點資源使用的分配情況。若希望進行更細粒度的網絡虛擬化,節點資源虛擬化非常有必要。
鏈路資源虛擬化
和節點資源一樣,鏈路資源也是網絡中重要的資源,而拓撲抽象并沒有規定某些用戶可使用的鏈路資源的多少。所以在進行更細粒度的虛擬化時,有必要對鏈路資源進行虛擬化,從而實現鏈路資源的合理分配。可被抽象虛擬化的鏈路資源包括租戶可使用的帶寬以及端口的隊列資源等等。
網絡隔離
網絡資源虛擬化僅僅完成了物理資源到虛擬資源的抽象過程,為實現完全的網絡虛擬化,還需要對不同的租戶提供隔離的網絡資源。網絡隔離需要對SDN的控制平面和數據平面進行隔離,從而保證不同租戶控制器之間互補干擾,不同虛網之間彼此隔離。此外,為了滿足用戶對地址空間自定義的需求,虛擬化平臺還需要對網絡地址進行虛擬化。
控制面隔離
控制器的性能對SDN整體的性能產生極大的影響,所以虛擬化平臺需保證租戶的控制器在運行時不受其他租戶控制器的影響,保證租戶對虛擬化平臺資源的使用。虛擬化平臺在連接租戶控制器時需保證該進程可以得到一定的資源保障,比如CPU資源。而虛擬化平臺本身所處的位置就可以輕易實現租戶的控制器之間的相互隔離。
數據面隔離
數據面的資源包括節點的CPU、Flow Tables等資源以及鏈路的帶寬,端口的隊列資源等。為保證各個租戶的正常使用,需對數據面的資源進行相應的隔離,從而保證租戶的資源不被其他租戶所占據。若在數據面上不進行資源的隔離,則會產生租戶數據在數據面上的競爭,從而無法保障租戶對網絡資源的需求,所以很有必要在數據面對資源進行隔離。
地址隔離
為使租戶能在自己的虛擬租戶網中任意使用地址,虛擬化平臺需要完成地址的隔離。實現地址隔離主要通過地址映射來完成。租戶可任意定制地址空間,而這些地址對于虛擬化平臺而言是面向租戶的虛擬地址。虛擬化平臺在轉發租戶控制器南向協議報文時,需要將虛擬地址轉化成全網的物理地址。租戶的服務器的地址在發送到接入交換機時就會被修改成物理地址,然后數據包的轉發會基于修改之后的物理地址進行轉發。當數據到達租戶目的地址主機出端口,控制器需將地址轉換成原來租戶設定的地址,從而完成地址的虛擬化映射。地址的虛擬化映射使得租戶可以使用完全的地址空間,可以使用任意的FlowSpace(流空間:流表匹配項所組成的多維空間),而面向物理層面則實現了地址的隔離,使得不同的租戶使用特定的物理地址,數據之間互不干擾。
存儲虛擬化是一種貫穿于整個IT環境、用于簡化本來可能會相對復雜的底層基礎架構的技術。存儲虛擬化的思想是將資源的邏輯映像與物理存儲分開,從而為系統和管理員提供一幅簡化、無縫的資源虛擬視圖。在沒有云計算之前存儲虛擬化已經發展了很久,可以說和云計算沒有特別關系,而云計算存儲通常指的是亞馬遜的S3存儲或者EBS存儲等,將統一的資源池劃分給多個用戶。
對于用戶來說,虛擬化的存儲資源就像是一個巨大的“存儲池”,用戶不會看到具體的磁盤、磁帶,也不必關心自己的數據經過哪一條路徑通往哪一個具體的存儲設備。
從管理的角度來看,虛擬存儲池是采取集中化的管理,并根據具體的需求把存儲資源動態地分配給各個應用。值得特別指出的是,利用虛擬化技術,可以用磁盤陣列模擬磁帶庫,為應用提供速度像磁盤一樣快、容量卻像磁帶庫一樣大的存儲資源,這就是當今應用越來越廣泛的虛擬磁帶庫(VTL, Virtual Tape Library),在當今企業存儲系統中扮演著越來越重要的角色。
主流的存儲虛擬化有以下三種技術,在云計算場景中通常會根據實際場景選擇合適的技術。
先從高端存儲說起,現在高端存儲應該EMC、IBM和HDS的天下,這些年外置存儲跟隨著廉價磁盤不斷提升容量和性能,推動了SAN網絡、主機FC接口不斷成熟,在數據中心變得很普遍,尤其在金融領域。
SAN提供的是塊存儲,譬如磁盤陣列里面有10塊I T的數據盤,然后可以通過做RAID或者邏輯卷(LVM)的方式劃分出10個的數據盤,但這個10個數據盤已經和之前的物理盤不一樣了,一個邏輯盤可能有個物理盤提供100G,第二個物理盤提供300G。對于操作系統來說,完全無法感知是物理盤還是邏輯盤,這是存儲資源池的理念。通過RAID或者LVM不僅可以提供數據保護還能夠重新劃分盤的大小,提高讀寫速率。
但SAN也不是毫無缺點,它價格也是比較昂貴的,光纖口,光纖交換機價格高,所以才有了IPSAN存儲,通過IP協議承載存儲協議;無法提供數據共享,一個盤只能掛給一個主機,所以這就有了NAS存儲。
NAS是文件存儲,文件存儲相比塊存儲大的優勢是能共享數據,它基于標準的網絡協議,SAN是有自己一套存儲協議的。常見的NAS包括NFS、FTP和HTTP文件服務器等,由于這種設備通常都有一個IP,所以一般客戶機充當數據網關服務器可以直接對其訪問。NAS建立在傳統網絡之上,所以可以更遠距離的傳輸,并且NAS具有安裝容易易于維護的特點,但其速度通常要比SAN慢很多。
伴隨著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
共享賬本準確的說應該是分布式賬本技術,這個技術從實質上說就是一個可以在多個站點、不同地理位置或者多個機構組成的網絡里進行分享的資產數據庫。在一個網絡里的參與者可以獲得一個、真實賬本的副本。賬本里的任何改動都會在所有的副本中被反映出來,反應時間會在幾分鐘甚至是幾秒內。在這個賬本里存儲的資產可以是金融、法律定義上的、實體的或是電子的資產。在這個賬本里存儲的資產的安全性和準確性是通過公私鑰以及簽名的使用去控制賬本的訪問權,從而實現密碼學基礎上的維護。根據網絡中達成共識的規則,賬本中的記錄可以由一個、一些或者是所有參與者共同進行更新。
分布式賬本技術使用密碼哈希算法和數字簽名來確保交易的完整性,同時確保共享賬本是精確副本,并降低了發生交易欺詐的風險,因為篡改需要同時在許多地方同時執行。密碼哈希算法(比如 SHA256 計算算法)能確保對交易輸入的任何改動 — 甚至是細微的改動 — 都會計算出一個不同的哈希值,表明交易輸入可能被損壞。數字簽名則確保交易源自發送方(已使用私鑰簽名)而不是冒名頂替者。
這里主要講述區塊鏈在發展過程中出現的五種典型共識算法: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%,犧牲的是整個網絡的去中心化。
P2P為大眾所熟知主要要歸功于BitTorrent及BT的流行,而P2P網絡的核心概念即彼此連接的多臺計算機之間都處于對等的地位,各臺計算機有相同的功能,無主從之分,一臺計算機既可作為服務器,設定共享資源供網絡中其他計算機所使用,又可以作為工作站,整個網絡一般來說不依賴專用的集中服務器,也沒有專用的工作站。網絡中的每一臺計算機既能充當網絡服務的請求者,又對其它計算機的請求做出響應,提供資源、服務和內容。通常這些資源和服務包括:信息的共享和交換、計算資源(如CPU計算能力共享)、存儲共享(如緩存和磁盤空間的使用)、網絡共享、打印機共享等。
區塊鏈為了實現分布式賬本的能力,同樣也采用了P2P網絡。分布式賬本會分發給網絡中的所有成員節點,同時可以阻止任何單個或一組參與者控制底層基礎架構或破壞整個系統。網絡中的參與者是平等的,都遵守相同的協議。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。