一直以來,只要說到運營服務器應用程序,無論是網頁應用程序還是手機應用終端,我們都會認為,未來是云服務的天下。亞馬遜、谷歌和微軟等公司,紛紛研發新工具,試圖讓服務器應用程序的運營更加簡單和便捷。因此,對于用戶來說,AWS、GCP和Azure似乎就是最好的選擇。畢竟這三大云服務工具,既方便又便宜,能夠輕松實現全自動化以及有彈性的擴展升級。真要說,那還有很多優點。
何故認為云時代即將終結呢?原因有以下四點:
第一,它無法滿足長期的擴展升級需求。研發一款能夠擴展升級和高度普及的優質網頁應用程序,尤其是在云服務領域,有著相當大的難度。就算初期成功研發出了應用程序,那后期的擴展升級也需要大量人力、物力和財力。退一步說,就算你再成功,最后也會到達云技術以及網頁本身的極限。計算機的計算速度和儲存容量,會比網絡帶寬增長得還要快。雖然對大多數公司來說,現在還不用擔心這個問題,但終究都要面對?,F階段,網絡中的數據總量正在大幅增加。畢竟我們對分辨率的要求,已經從高清變為4K再變為8K。很快,虛擬現實數據集就會開始普及。
這之所以會成為一個問題,很大程度上是由于我們組織和安排網絡的方式。需要內容和程序的客戶很多,但能夠提供這些內容和程序的服務器卻很少。舉個例子,如果有人在Slack上分享了一張貓的圖片,而我身邊坐著的20個人都想看,那只能各自下載這張圖。也就是說,同一張圖,服務器得重復發送20次。
如果現在把服務器移到云中,也就是谷歌或亞馬遜數據中心的計算機上,那么這些區域附近的網絡,需要較大的吞吐量,才有能力處理所有數據。同時,還需要大量硬盤驅動器來儲存每個人的數據,以及大量CPU來將數據通過網絡輸送給每個有需要的人。但是,自從流媒體服務興起之后,情況就有點糟糕了。
所有這些活動,都需要大量能源支持,從而使得整個系統效率低下。不僅成本高,還危害環境。
第二,它過于集中,易受攻擊。集中儲存數據和程序的另一大問題,就在于可用性和持久性。如果亞馬遜的數據中心遭到流量攻擊,受到小行星或龍卷風等自然災害的影響,那怎么辦呢?或者,不這么夸張,如果它出現了一段時間的電力中斷,那又怎么辦呢?數據中心機器上儲存的那些數據,不僅短時間內無法使用,甚至很有可能永久丟失。
或許,有人要說,把這些數據分開儲存可以解決問題。但其實,并不會。分開儲存,只會意味著有更多的數據中心。沒錯,分開儲存是能降低意外損失的風險。但是,那些真正重要的數據呢?如何做到安全儲存?目前,這些數據資源,都儲存在Facebook、Google Drive和iCloud這類云端中。可萬一這些公司倒閉了,業務叫停了,該怎么辦呢?就算他們永遠不會倒閉,那儲存之后使用數據也存在限制。因為你必須要借助他們的服務,才能獲得這些數據。即便只是想和朋友分享,也還是要通過他們的服務。
第三,它需要我們賦予信任,但卻不給我們提供任何保證。你的朋友如何相信自己收到的內容,就是你所發送的內容呢?唯一的方法,就是相信中間人。大多數情況下,這是沒問題的。但是,我們使用的網站和網絡,均由在國家部門注冊過的法律實體負責運營。而國家部門,完全可以強迫這些法律實體做任何順從自己意愿、符合自己利益的事情。雖然大部分情況下,都是一些幫助打擊犯罪或移除非法內容的好事,但與此同時也存在濫用權力的壞事。
就在幾個星期之前,西班牙政府竭盡自己所能利用手中的權力,去阻止加泰羅尼亞地區的獨立公投。比如說,屏蔽一切指引民眾投票的信息網站。雖然對于大多數西方人來說,言論自由或許不是最重要的問題,但保證互聯網的免費和開放,還是值得提倡的。畢竟,從本質上來說,互聯網就應該免費開放,就應該對用戶最終看到的內容和作者最初發布的內容進行核實。
第四,它使得我們以及我們的數據成為易被欺騙的對象。互聯網高度集中最大的弊端,就是個人數據信息的積聚。一方面,大型公司的確提供了人們所需要的服務;但另一方面,它們掌握著所有消費者的數據信息。這些數據信息,足以讓它們推測出消費者的未來行為,比如會買些什么、會給誰投票、會不會買房,甚至想要幾個孩子等等。要知道,有了這些數據信息,那些意圖不軌的人用你的名字辦信用卡、辦貸款甚至買房,都是完全有可能的。
當然,或許你認為,提供這些數據信息,不會有什么問題。畢竟,這些公司信譽足夠好。你足夠信任他們,從而愿意給出自己的數據信息。但其實,問題的關鍵并不在它們。沒錯,它們是可以不用擔心??扇f一,有圖謀不軌的人呢?就在今年初,美國知名征信機構Equifax發生了非常嚴重的數據泄漏事件。具體說來,一共丟失了1.4億用戶的數據信息。現在,這些數據全都公之于眾了??赡苡腥艘f,這種事十年一遇。如果我們能再細心、再謹慎一點,其實是可以避免的。可現在,形勢越來越明晰。像這樣的數據泄漏,想要完全避免,是非常困難的事情。但如果直接放任不管,那又非常危險。所以說,唯一可行的解決辦法,就是從一開始就避免集中獲取用戶的數據信息。
那么,接替云時代的會是什么?
一個在較大程度上以客戶服務器協議為支撐、以集中授權為安全保障的網絡,不僅存在各種各樣的缺陷,還會帶來難以解決甚至無法解決的問題。因此,我們現在要尋找更加高效的解決方案。在全新模式下,其他任何人都不能儲存你的個人數據,大型媒體文件分布在整個網絡當中。而且,整個系統是完全點對點的,不再需要服務器。
針對這一塊,我看過不少關于新興技術的文章資料。因此,我深信,點對點,即對等,是未來的必然發展趨勢。點對點網絡技術之所以存在,就是為了利用各種協議和策略,替代現有的那些網絡構成要素,解決上文列出的大多數問題。他們的目標,就是實現高度分布式的數據儲存。每位身處該網絡、切實參與進來的客戶,都將以備份形式儲存其中一些數據。
如果你之前聽說過比特流(即BitTorrent,一種內容分發協議),那下面要說的內容應該不會陌生。在這種協議中,共享大型數據文件的網絡用戶,會分為較為小型的區塊(每一塊都有專屬ID),不需要任何形式的集中授權。下載一份文件,就只需要一個“神奇”的數字。接著,用戶就會找到擁有相同文件的人并且把它們下載下來,直到拿到文件中的所有內容。
其中,最有意思的地方,就是如何找到擁有相同文件的人。比特流,使用的是一種叫做Kademlia的協議。在該協議下,網絡中的每個點都擁有專屬ID號碼,與專屬區塊ID長度相同。這個ID能夠在某一節點上,以最接近區塊ID的特定ID儲存區塊內的數據信息。對于隨機的區塊ID和網絡端點ID,整個網絡中的儲存分布都應該是一致的。這些區塊都是可以進行內容處理的,因此其中的內容驗證起來,也就比較容易。
另外,利用指紋處理內容,還有一個有意思的地方,就是將其中一個區塊的ID嵌入另一個內容區塊,以一種無法篡改的方式將兩大區塊聯系起來。如果其中一塊的內容發生改變,那么它的ID就會相應改變,進而二者之間的聯系也就隨之破裂。一旦內在聯系發生改變,那么另一區塊的ID同樣也會發生改變。
這種ID嵌入機制,有助于生成類似的區塊鏈(就像為比特幣和其他虛擬貨幣提供支持的區塊鏈一樣),甚至還能生成有向無環圖(即Directed Acyclic Graph,以下簡稱DAG)這類更加復雜的結構。這種圖形連接以發明者拉夫爾·默克爾命名,因此稱為默克爾DAG。其中一個最為典型的例子,就是git本地倉庫。它借助巨型默克爾DAG,將歷史數據、所有條目和文件,以區塊形式儲存起來。
而這就又引出了一個有意思的話題,即基于內容處理的分布式數據儲存是不可變的。也就是說,儲存在這些區塊中的內容是不會改變的。相反,修改版本的內容是緊鄰現有版本儲存的。重復使用修改版本中的內容,不會導致區塊發生改變,因為它們的ID仍然相同。這就意味著,在這樣一個儲存系統中,目標文件是無法復制的?;氐轿恼伦铋_始的例子,也就是說每張貓的圖片,都是獨一無二的,只會存在一次。
Kademlia這類協議,加上默克爾區塊鏈和默克爾DAG,能夠給我們提供多種工具,去形成完備的文件等級層次和修改時間軸,在點對點網絡中進行大規模分享?,F階段,已經存在使用這些技術的協議,能夠根據我們的需求構建分布式儲存系統。其中,發展比較好的要數IPFS。
名字和共享事物存在的問題
那么,說到這里,我們已經可以利用這些技術來初步解決上文列出的一些問題。整個過程差不多解決了可用性、容量、持久性和內容驗證問題。但與此同時,它還需要解決帶寬問題。由于各個點之間可以相互發送數據,因此就不存在大型熱點或瓶頸。
未來,我們需要能夠擴展升級的計算資源,當然這并不是很難。當下,每個人的筆記本電腦和手提電話,都有著五花八門的功能,遠超過大多數應用程序所需要的功能。比如說,復雜的機器學習計算。因此,從橫向角度來看,計算確實是能夠擴展升級的。只要我們確保所有設備都滿足用戶的必要需求,那就不應該有大問題。
也就是說,在這種情況下,我想看的那張貓的圖片,是來自坐在身邊的同事,而非Slack服務器。當然,如果現在我想要主動分享一張貓的圖片,那首先要做的就是更新特定渠道。沒錯,這一步聽上去是很簡單。但其實,它是最有難度的一個環節。
最為困難的環節:渠道更新
某一事物會隨時間變化,只是想讓人們有一個秩序和穩定的概念。至于這個事物,我們可以將其看作是一個身份和一個名字,能夠隨著時間推移表現出不同價值。但這些價值,都是靜態且不可變的。這是一種更加自然的方式,去規范計算機中的信息,因而有著更加自然的結果。如果我告訴了你一些事情,那既不能改變已經告訴你的這個事實,也不能強迫你故意忘記我所說的話。Slack這個渠道,就代表著一個身份。它隨著時間推移表現出來的不同價值,就是逐漸增加的信息。
但真正的問題就在于,在這個渠道中,我們并不是孤立的。想要分享信息、改變渠道的人,實在是太多了。再者有時候,這兩種情況會同時發生。所以,必須要有人站出來決定最終結果。
在較為集中系統中,會有單一機構來決定這些更新過程,將這些事件序列化。但在分布式系統中,每個人都是平等的。因此,就需要形成一種機制,確保整個網絡就“世界歷史”問題達成一致。
現如今,我們使用的所有應用程序,均由分布式網絡提供支持。而針對這樣一個真正分布式的網絡,最為困難的問題就是達成一致。這不僅影響著并行更新,同時還影響著其他需要出現的更新。對于數據庫來說,這個問題尤為困難。與此同時,還會對DNS這類其他重要服務產生影響。以分散方式為特定區塊ID或ID序列注冊人名,就意味著參與該過程的每個人都需要針對現有名稱及其意義達成一致。否則,就會出現這樣一種情況,即兩位不同用戶看到命名相同的兩份不同文件?;趦热葸M行處理,能夠為機器解決這個問題,但無法為真人解決這個問題。
解決分布式網絡的共識問題,有以下幾種策略。第一種,就是組建一支規模較小的經理團隊,并且進一步選出“團隊領導者”負責決策。過程中發生的所有變化,都要經過經理。很顯然,這是一種集中體系。
第二種,就是像比特幣區塊鏈那樣基于工作量證明的體系。該體系通過各端點共同解決難題,編寫更新方案,在共識問題上有一定保證。其中的難題雖然解決起來比較困難,但檢查起來卻比較容易。如果出現分歧的話,還可以借助一些額外的規則來解決。不過,也有其他幾種分布式區塊鏈,使用的是基于權益證明的共識體系。這一體系能夠減少解決某一難題所需要的投入。
第三種,與無沖突復制數據類型有關。不過,在這類型的某些案例中,共識問題根本就不會產生什么影響。如果所有的更新都只是“增加一個”,那只要我們保證每次更新都只使用一次,秩序就不重要,因為結果都是一樣的。
總之,到目前為止,這個問題沒有明確答案。經過大家的努力,已經出現了不少有趣搞笑的解決方案。你只需要根據自己的具體情況,選擇一種相對較為平衡的方案就行。
網絡環境中公開文件的隱私問題
很明顯,在上文列出的所有問題中,亟需解決的就是隱私問題。既然我們需要在這樣一種點對點分布式網絡中儲存內容,那怎么可能不公開這些內容呢?如果都能夠隱藏起來的話,那么內容處理儲存固然是一個優質解決方案。畢竟你想要找到某些內容,是需要內容“指紋”的。因此,我們需要注意三個不同層次的隱私問題:公開、隱藏和私人。至于第三個,也就是私人隱私,合適的解決方法應該就是加密。
雖然乍一聽,依靠加密來保證內容的隱私安全,確實有點冒險。但事實上,它并沒有現在這么糟糕。通常,各家公司和各國政府都以不與公眾共享的方式,來儲存一些較為敏感的數據,通過加密等方式來保護這些數據。能夠看到或使用這些數據的人,就只有公司和政府專門雇用的保密人員。而一旦你能接觸到儲存這些數據的系統,那往往意味著你可以看到全部的私密數據。
但如果我們以一種公開的方式儲存私密數據,那就不得不采取保護措施,防止其他任何人看到或使用這些數據。說白了,這與開源一些有關安全的應用程序,是一個道理。
在這個過程中,如果你授予某人獲取數據的權利,那他就能永久擁有修改之后的私密數據信息。因而,你就需要不斷修改加密密鑰。可現如今的糟糕狀況是,只要某人能夠獲取這些加密數據信息,那他就會私下復制一份。
云時代終結,難道霧時代要來臨?
盡管需要解決的難題很多,但云時代的終結還是令人興奮。首先,從技術層面上來看,我們應該能夠優化點對點網絡技術?;趦热萏幚淼臄祿Υ妫軌蜥槍热荼旧硖峁┘用茯炞C,不需要獲得可靠授權。即便是在發展中國家,也能看到較大進步,他們同樣會逐漸摒棄數據中心。
在某種程度上,數據中心甚至會徹底成為過去式?,F階段,電子消費設備的功能越來越強大。計算功能和儲存功能,幾乎是隨處可見。
對于運營網頁應用程序的公司來說,這種變化應該能夠公司幫助降低成本,減少研發優質數字產品遇到的難題,把關注重點從降低停工風險轉移到增加客戶價值上去。我們還是需要云端中的服務器,但它們只是若干相似端點中的一部分。
其次,給公司和客戶帶來的另一大好處,就是客戶數據的處理問題。既然不需要集中儲存大量信息,那也就不會出現大量數據丟失的情況。一直以來,軟件工程專家都認為,客戶向公司程序發送數據這樣一種互聯網設計,是存在較大缺陷的。與之相反,公司應該向客戶發送程序,讓他們利用程序來處理自己的私人數據,避免出現直接分享數據信息的情況。雖然這種模式看上去更加安全,但卻無法阻止公司收集自己需要的客戶數據。
評論
查看更多