從“雲”到“霧”:雲計算將死亡,取而代之的是分佈式點對點網絡

雲將會走向終結。我知道,這是一個大膽的結論,也許聽起來有點瘋狂。但請容忍我,讓我說下去。
 
一直以來,都有這樣的一個傳統觀點:運行服務器的應用程序,無論是Web應用還是移動應用的後台,未來都會在雲端。亞馬遜、谷歌和微軟在他們的雲服務中添加了多種工具,讓在其中運行的軟件服務變得越來越簡單方便,因此,在AWS、GCP或Azure上託管代碼是你能到的較好的事情——它方便、便宜、容易實現自動化,你可以靈活地控制規模……
 
那麼,為什麼我要預測這一切都會結束呢?有這麼幾個原因:
 
第一,它無法滿足長期的擴展要求。
構建一個可擴展、可靠、高可用性的web應用程序,即使是在雲中,也是相當困難的。如果你做得不錯,讓你的應用獲得了巨大成功,那麼龐大的規模將會耗盡你的金錢和精力。即使你的業務非常成功,你最終也會達到雲計算的極限:計算機的計算速度和存儲容量的增長速度超過了網絡的帶寬。
 
忽略網絡中立的爭論,這對大多數人來說可能不是問題(除了Netflix和亞馬遜),但很快就會出現這個狀況。隨著我們的視頻質量從HD到4K到8K,我們正在所需要的數據量正在大幅增長,而且,很快就會出現VR數據集。
 
這之所以是一個問題,主要是因為我們組織網絡的方式。有許多用戶想要獲得內容和使用程序,而只有相對較少的服務器擁有這些程序和內容。比如,當我在Slack上看到一張搞笑的照片時,想向坐在我身邊的20個人分享,但他們都必須從託管服務的服務器上下載,服務器需要發送20次這個照片。
 
隨著服務器轉移到雲端,比如亞馬遜或谷歌的數據中心的亞馬遜或谷歌的計算機,靠近這些地方的網絡需要有令人難以置信的吞吐量來處理所有這些數據。此外,還必須有大量的硬盤來存儲每個人和CPU數據,然後通過網絡將數據傳輸給每一個想要的人。隨著流媒體服務的興起,情況變得更糟。
 
所有這些活動都需要大量的能量和冷卻,使整個系統效率低下、價格昂貴,對環境也不利。
 
第二,它是集中而脆弱的。
集中存儲我們的數據和程序的另一個問題是可用性和持久性。如果亞馬遜的數據中心被一顆小行星撞了,或者被龍捲風摧毀了怎麼辦?或者,如果它在一段時間內停電了,那又會怎樣呢?存儲在其機器上的數據現在不能暫停訪問,甚至不能永久丟失。
 
我們通常通過將數據存儲在多個位置來緩解這個問題,但這只意味著更多的數據中心。這可能會大大降低意外損失的風險,但你非常非常關心的數據又該怎麼辦呢?你的婚禮視頻,你孩子成長的照片,或者重要的公共信息來源,比如維基百科。所有這些信息現在都存儲在雲端——在Facebook、Google Drive、iCloud或Dropbox等網站上。當這些服務停止運營或失去資金時,數據會發生什麼變化?即使它們不會發展到這一步,但也限制了你訪問自己數據的方式,你必須去使用它們的服務,當你和朋友們分享的時候,他們也必須通過這項服務。
 
第三,它需要信任,但沒法提供保障。
使用雲服務,你要讓朋友相信,他們得到的數據是你發送的,而且這個數據是通過值得信任的中間人傳遞過來的。在大多數情況下,這都能夠良性運轉,也可以接受,但我們使用的網站和網絡必須要註冊才能合法運營,監管部門有權力強迫它們做很多事情。在大多數情況下,這是一件好事,可以用來幫助解決犯罪或從網絡上刪除非法內容,但也有很多情況下,這種權力被濫用。
 
就在幾週前,西班牙政府竭盡所能阻止加泰羅尼亞地區的獨立公投,其中採取的措施就包括封鎖信息網站,告訴人們該去哪裡投票。
 
第四,它讓我們的數據更容易遭受攻擊。
高度集中的互聯網真正可怕的一面是個人數據的集中化。那些為我們提供服務的大公司都有大量的數據——這些數據包含了足夠的信息,可以預測你將要購買什麼,你會投票給誰,你可能會買房子,甚至你可能會有多少孩子。這些信息足以用你的名義去辦理一張信用卡、一筆貸款,甚至是用你的名字買一所房子。
 
而且,你也可能會同意。畢竟,你選擇了它們的服務,你就只能信任它們。但這不是你需要擔心的。你需要擔心的是其他人。今年早些時候,信用報告機構Equifax丟失了1.4億名客戶的數據,這是歷史上較大的數據洩露事件之一。這些數據現在已經公開。我們可以把這看作是一個十年一次的事件,如果我們更加小心的話,這種情況本可以避免,但越來越明顯的是,像這樣的數據洩露很難完全避免。而且一旦出現就過於危險,無法容忍。真正阻止這類事件再發生的辦法是,一開始就不收集這麼大規模的數據。
 
那麼,什麼將取代云呢?
主要由客戶端-服務器協議(如HTTP)支持的互聯網和基於對中央機構(如TLS)的信任的安全性是有缺陷的,並且會導致一些基本上難以解決或無法解決的問題。現在是時候去尋找更好的東西了——一個沒有其他人能完全存儲你的個人數據、大媒體文件遍布整個網絡的模型框架、整個系統完全是點對點和無服務器的(我不是指那種雲託管意義上的“無服務器”,我的意思是真正的沒有服務器)。
 
在這個領域,我已經閱讀了大量的文獻,並且已經非常確信點對點是我們未來不可避免的發展方向。點對點網絡技術是用協議和策略來取代我們所知道的網絡的構建模塊,解決我上面提到的大部分問題。目標是完全分佈式的,永久冗餘的數據存儲,每個參與網絡的用戶都在存儲其中一些可用數據的副本。
 

 
如果你聽說過BitTorrent(比特流),那麼下面這些內容聽起來應該會很熟悉。在BitTorrent上,網絡用戶不需要任何中央機構授權就可以將大數據文件分成更小的塊或片段(每個塊都有一個的ID)。要下載一個文件,你只需要一個“神奇”數字,也就是一個哈希(hash),即內容的指紋就行了。然後,你的BitTorrent客戶端將會按照“內容指紋”找到那些擁有文件片段的用戶,並從他們那裡把一個個文件片段下載下來,直到你擁有所有的片段。
 
一個有趣的點是如何去匹配用戶。BitTorrent使用了一種名為Kademlia的協議。在Kademlia,網絡上的每個對等點都有一個的ID號,其長度與的塊ID相同。它會將一個帶有特定ID的塊存儲在一個節點上,該節點的ID與該塊的ID“最接近”。塊和網絡對等點的隨機ID,在整個網絡中存儲的分佈應該是相當一致的。不過,塊ID並不需要隨機選擇,而是使用一種加密散列——這是塊本身內容的指紋,這是有好處的。保證這些塊是可尋址的。這也使得驗證塊的內容更加容易(通過重新計算和比較指紋),並能夠保證用戶不可能下載原始的數據之外的其他數據。
 
另一個有趣的特性是,通過將一個塊的ID嵌入到另一個塊的內容中,你可以將二者以一種不會被篡改的方式連接在一起。如果鏈接塊的內容髮生變化,它的ID將會改變,鏈接也會被破壞。如果修改了嵌入式鏈接,那麼包含塊的ID也會隨之改變。
 
這種將一個區塊的ID嵌入到另一個區塊的機制,使得創建這樣的區塊鏈成為可能(比如為比特幣和其他加密貨幣驅動的區塊鏈),甚至是更複雜的結構,通常被稱為有向無環圖(Directed Acyclic Graphs),簡稱DAG。(在Ralph Merkle發明了這種鏈接之後,通常被稱為“Merkle鏈接”。所以,如果你聽到有人在談論Merkel DAGs時,你大概能知道他們在說什麼。)Merkle DAG的一個常見例子就是Git存儲庫。Git將提交歷史和所有目錄和文件都保存在一個巨大的Merkle DAG中。
 
這就導致了基於內容尋址的分佈式存儲的另一個有趣特性:它是不可變的。內容無法改變。取而代之的是,新的修訂被存儲在現有的修訂版本旁邊。在兩次修訂之間沒有變更的塊會被重用,因為根據定義,它們具有相同的ID。這也意味著相同的文件不能在這樣的存儲系統中復制,轉化為高效的存儲。所以在這個新網絡上,每一張獨一無二的搞笑圖片都只存在一次(儘管在整個群體中有多個副本)。
 
像Kademlia,Merkle鍊和Merkle DAG這樣的協議,給我們提供了建模文件層次和修訂時間線的工具,並在一個大型的P2P網絡中分享它們。已經有一些協議使用這些技術來構建符合我們需求的分佈式存儲。看起來很有希望的是IPFS。
 
名稱和共享問題
好了,通過以上這些技術,我們可以解決我在開始時提出的一些問題:我們在連接到網絡的設備上得到分佈式的、高度冗餘的存儲,這些設備可以記錄文件的歷史,並在需要的時候保留所有版本。這(幾乎)解決了可用性、容量、持久性和內容驗證問題。它還解決了帶寬問題——因為都是使用點對點傳輸數據,因此不會出現服務器承受不了的情況。
 
我們還需要一個可擴展的計算資源,但這並不難:現在每個人的筆記本電腦和手機都比大多數應用程序所需要的功能更強大(包括相當複雜的機器學習計算),而且計算通常都是可伸縮的。因此,只要我們能讓每一台設備都為用戶做必要的工作,就不會出現大問題。
 
所以現在我在Slack上看到的搞笑圖片可以來自坐在我旁邊的同事,而不是來自Slack的服務器(在這個過程中沒有跨越任何“海洋”)。不過,為了發布一張搞笑照片,我需要更新一個通道(channel)(也就是說,通道將不再是我發消息之前的樣子了,它將會發生改變)。這個聽起來相當簡單的事情卻是整個體系中最難的部分。
 
最困難的部分:實時更新
一個實體的概念會隨著時間的推移而改變,這實際上只是人類專屬的想法,讓世界在我們的頭腦中擁有秩序感和穩定。我們還可以把這樣的實體看作是一個身份或名稱,隨著時間的推移,它會呈現出一系列不同的價值(這是靜態的,不可改變的)。(Rich Hickey在他的演講中解釋得很好,戳此觀看)。在電腦中模擬信息是一種更自然的方式,會產生更自然的結果。如果我告訴你一件事,我就再也不能改變我對你說的話了,也沒辦法讓你忘卻。例如,美國總統是誰,不會隨時間而改變;只是會被同樣性質(身份和名字)的其他事實(人)所取代。在Git的示例中,一個ref(分支或標記)可以在不同的時間點指向(持有一個ID和一個值)不同的提交,並提交一個提交來替換當前所持有的值。Slack通道也代表了一種身份,隨著時間的推移,它的價值也在不斷增長。
 
真正的問題是,我們並不是一個擁有通道的人。很多人試圖發布消息和改變通道,有時是同時進行,需要有人來決定結果應該是什麼。
 
在中心化的系統中,當前幾乎所有的web應用程序,都有一個中央實體來決定這個結果,並對事件進行序列化。然而,在一個分佈式系統中,每個人都是平等的,因此需要有一種機制來確保網絡上能夠達成共識。
 
對於一個真正的分佈式網絡來說,要想解決這個問題,最困難的問題就是我們今天正在使用的所有應用。它不僅會影響並發更新,還會影響其他需要“實時”更新的更新——隨著時間的推移,“真相的單一來源”正在發生變化。這個問題對於數據庫來說尤其困難,它也會影響到其他關鍵服務,比如DNS。以分散的方式為特定的塊ID或一系列ID註冊一個人的名字意味著每個參與者都需要同意一個現有的名稱有一個特定的含義,否則兩個不同的用戶就可以看到兩個不同的文件在同一個名稱下。基於內容的尋址解決了機器的問題(記住一個名字只能指向一個特定的匹配內容),而不是人類的問題。
 
在處理分佈式的共識方面,有一些主要的策略。其中一個問題是,選擇一個相對較小的“群體”經理,他們的機制是選出一個決定真相的“領導者”(如果你感興趣的話,看看Paxos和Raft協議)。所有的變化都要經過這些經理。這實質上是一個集中式的系統,可以彌補網絡中的中央決策實體或中斷(“分區”)的丟失。
 
另一種方法是像比特幣區塊鏈這樣的基於驗證的系統,在這種系統中,通過讓用戶解決一個“難題”來編寫一個更新(例如,在Merkle鏈中添加一個有效的區塊)來達成共識。這個“難題”很難解決,但很容易就能查到,如果衝突仍然存在,還需要一些額外的規則來解決。其他幾個分佈式的區塊鏈使用了基於驗證的共識,同時減少了解題所需的能源需求。如果你感興趣的話,你可以在BitFury這份白皮書中讀到的相關的證據。
 
針對具體問題的另一種方法是圍繞著CRDT——無衝突的複制數據類型,這在特定情況下根本不會遭受共識問題的困擾。最簡單的例子是一個遞增的計數器。如果所有更新只是“添加一條”,只要我們確保每次更新只應用一次,順序就不重要,結果將是相同的。
 
這個問題似乎沒有一個明確的答案,可能永遠也不會只有一個答案,但有很多聰明的人正在努力解決這個問題,而且已經有很多有趣的解決方案可供選擇。你只可以對其進行權衡。這種取捨通常體現在你“瞄準”的群體的規模上,並從你願意讓渡的共識中挑選出的一種特性——可用性或一致性(或者,從技術上講,是網絡劃分,但在一個高度分佈的系統中,這似乎很難避免,就像我們正在討論的系統一樣)。大多數應用程序似乎都支持可用性而不是即時的一致性——只要狀態在合理的時間內是一致的即可。
 
公共文件網絡中的隱私問題
需要解決的一個明顯問題是隱私問題。即如何在不公開的情況下將內容存儲在分佈式的集群中呢?如果它能夠隱藏東西,那麼內容地址存儲是一個不錯的選擇,因為為了找到某樣東西,你需要知道它的內容的散列。所以本質上我們有三個層次的隱私:公共的、隱藏的和私密的。對於第三個問題的答案似乎是在密碼學中- 對存儲的內容進行強加密並且要有“外在”的共享密鑰(比如用紙分享、NFC設備傳輸或者掃描二維碼等)。
 
依賴於加密技術一開始可能聽起來很冒險(畢竟,黑客總是會發現漏洞),但實際上並沒有比我們今天做的更糟糕。事實上,這在實踐中有可能會更好。企業和政府通常以無法與公眾分享的方式存儲敏感數據(包括數據所涉及的個人)。相反,只有擁有這些數據的組織所僱用的數量不多的員工才能夠訪問,而且至少在密碼方面受到保護。通常情況下,如果你能訪問存儲這些數據的系統,你就可以擁有所有這些數據。
 
但是,如果我們轉而以一種本質上是公開的方式來存儲私人數據,那麼我們就不得不保護它(使用強大的加密技術),這樣對任何獲得訪問權限的人來說都是不好的。這個想法與安全相關軟件的開發者開源代碼的初衷是一樣的,這樣任何人都可以查看並發現問題。知道安全系統是如何工作的,不應該幫助你打破它。
 
這種對訪問的控制一個有趣特性是,一旦你授予某人訪問某些數據的權限,他們就會永遠對數據進行修改。當然,你可以隨時更改加密密鑰。這也並不比我們今天的情況更糟,儘管它可能並不明顯:只要獲得一些數據的訪問權限,任何人都可以復制它。
 
這一領域的有趣挑戰是,在一群需要隨時間推移而改變的人群中建立一個能夠驗證身份並共享私有數據的良好系統。例如,在一個私有的Git存儲庫中有一組協作者。這可以通過一些私鑰密碼和旋轉密鑰的組合實現,但讓用戶獲得流暢的體驗可能是一項挑戰。
 
從雲到霧
儘管要解決一些難題,我們從雲計算中遷移出去,將會是一個非常令人興奮的未來。首先,在技術方面,我們應該從點對點網絡中獲得相當多的改進。內容可尋址存儲可以在不受信任的授權情況下,提供對內容本身的加密驗證,並進行永久的託管(只要有人對它感興趣),我們應該能看到其速度的顯著提升,即使是在遠離數據中心的發展中世界的邊緣(甚至是在另一個星球上)。
 
在某個時候,甚至連數據中心都可能成為歷史。消費設備變得如此強大,無處不在,計算能力和存儲空間幾乎隨處可見。
 
對於運行web應用程序的企業來說,這一變化將會節省巨大的成本。企業也將能夠減少對宕機風險的關注,更多地關注增加客戶價值,讓所有人受益。我們仍然需要雲託管服務器,但它們只是眾多同類服務器中的一種。我們還可以看到更多樣化的應用程序,在這些應用程序中,並非所有的應用程序都是一樣的——在同一個應用程序中,有面向消費者的和後台的,而差別只是訪問權限不同而已。
 
對企業和客戶來說,另一個巨大的好處是對客戶數據的處理。當不再需要集中存儲大量的客戶信息時,丟失這些數據的風險就會降低。軟件工程界的領導者們(如Erlang的創始人Joe Armstrong,他的談話很值得關注)長期以來一直認為,在互聯網上,客戶向企業的程序發送數據的設計是一種退化,企業應該向客戶發送程序,以讓他們能夠執行私人的數據,而這些數據不會被直接共享。這樣的模式似乎更安全,並且也不會以任何方式阻止企業收集他們所需的有用的用戶指標。
 
而且,當前沒有什麼方式能阻止混合的服務模式,這些服務不透明,並保留了私人數據。
 
這種類型的應用程序架構似乎是一種更自然的方式,來提供大規模計算和軟件服務,而且也更接近於開放信息交換的想法,任何人都可以方便地向他人轉發內容,並控制可以發布和訪問的內容,而不是由擁有服務器的私有實體來控制。
 
對我來說,這是非常令人興奮的。這就是為什麼我想要組建一個小團隊,在幾週內,用上面提到的一些技術來構建一個簡單的移動應用,來證明概念,並展示可以通過點對點網絡來做些什麼。目前我所擁有的一個足夠小的想法,能夠相對快速、足夠有趣,足以證明這種方法的特性是一個點對點的、真正無服務器的克隆版Twitter,但這並不特別令人興奮。
 
原文鏈接:https://venturebeat.com/2017/11/07/amazons-audible-launches-audiobooks-for-chinese-speakers-living-abroad/

 

轉貼自: 煉數成金


留下你的回應

以訪客張貼回應

0

在此對話中的人們

每月文章