高手問答第 296 期 —— 天空計算到底是不是云計算的未來?

OSC噠噠 發布于 01/31 14:30
閱讀 6K+
收藏 5

從數據到大模型應用,11 月 25 日,杭州源創會,共享開發小技巧

云計算時代下,云廠商幫我們解決了計算和存儲資源的維護與拓展問題,但用戶也面臨被廠商綁定的問題。

2021年UCBerkeley 提出了Sky Computing(“天空計算”)的概念,其目標是允許應用跨多個云廠商運行,實現多云之間的互操作性。 算力和數據在多云之間的遷移是天空計算需要解決的兩個基本問題。隨著虛擬化技術的發展,算力遷移正在逐漸得到解決,無狀態計算密集型任務可以在各個云廠商無差別運行。但安全快速地進行跨云數據遷移和同步仍存在較大挑戰。

云計算背景下的分布式系統大多運行在同一數據中心的多臺服務器上,其間網絡延遲低,可靠性高??缭苿t意味著服務器間物理距離的增加,導致網絡延遲增加和可靠性降低,服務器間的一致性維護,共識的建立都更加困難。 Xline是使用Rust開發的跨云KV數據庫,兼容Etcd的metadata存儲接口。Xline基于CURP協議實現,在跨云部署情況下相較基于Raft的Etcd有更好的性能,實驗表明理想情況下延遲低一倍。使用Xline可實現數據跨數據中心共享訪問,并且保證數據的一致性,方便業務系統實現多地多活部署。

OSCHINA 本期高手問答 (2 月 1 日 - 2 月 7 日) 我們請來了施繼成老師和大家一起探討關于“天空計算”相關的問題。

可討論的問題包括但不限于:

  • 天空計算相較于云計算的優勢
  • 跨云存儲面臨的技術挑戰
  • Xline如何做到低時延跨云數據交互
  • 分布式一致性協議原理與選型
  • 如何打造低耦合可復用的協議框架
  • Rust開發的優勢與劣勢

有其他相關問題,也歡迎大家積極提問!

嘉賓介紹

施繼成,DatenLord 聯合創始人兼 CTO,曾就職于谷歌、微軟、阿里巴巴等互聯網公司,多年操作系統和分布式系統研究和開發經驗。

為了鼓勵踴躍提問,我們會在問答結束后從提問者中抽取幸運會員贈予《Rust 實戰》書籍一本。

 

OSChina 高手問答一貫的風格,不歡迎任何與主題無關的討論和噴子。

下面歡迎大家就編程語言設計與開發相關的問題向施繼成老師提問,直接回帖提問既可。

加載中
0
OSC噠噠
OSC噠噠

高手問答第 296 期 —— 天空計算到底是不是云計算的未來?

@某人gmgn3  @osc_32324621 @pyboy58  @屮殖  @zerolemon

恭喜以上5位網友分別獲得《Rust 實戰》書籍一本。

請于02月16日12:00前登陸賬號, 私信@OSC噠噠    告知快遞信息(格式:姓名+電話+地址),逾期視為自動放棄哦~

南方Go
南方Go
書已經收到了,會盡快閱讀學習云計算
南方Go
南方Go
感謝
屮殖
屮殖
感謝!快遞地址已私信發送,麻煩查收。
某人gmgn3
某人gmgn3
感謝
0
屮殖
屮殖

@達坦科技DatenLord Rust 和 天空計算 都是我關注的內容。沒想到今天可以放到一起。不過我有點可能杞人憂天的擔心:就是國內“分聯網”,國外“給你斷網”的這種操作下,是否會帶來跨運營商實際操作的難度?各個廠商對天空計算的支持態度如何?以及,我層設想的,將發布后臺數據量少但是要求算力大的計算放在自建的廉價本地機房以避免干線機房的大額費用的思路,是否還有多少必要性?或者有沒有其它更好的解決方案?

達坦科技DatenLord
達坦科技DatenLord
確實有難度,但只要用戶有跨云的需求就值得克服困難去做。這是前期的技術積累,各個廠商也在跟進,從他們發布的技術就可以看出。以國內的阿里云為例,其主導的Serverless Devs(https://www.serverless-devs.com/)就是在做避免廠商鎖定的多云工具鏈。Xline(https://github.com/datenlord/Xline)主要解決的是跨云元數據管理問題。
達坦科技DatenLord
達坦科技DatenLord
各廠商云原生產品都在提供相互兼容的應用打包格式和API,以對象存儲為例,無論是阿里云的OSS還是騰訊云COS都兼容AWS S3接口,可以無縫切換。 所以廠商態度是比較明確的。至于解決方案的問題,需要結合具體需求做調研和計算。云上計算資源的付費方式有包月、按需、競價等多種方式,機房地點,時段和付費方式不同可能導致價格有幾倍的差別。如需要持續大量的計算而對可用性等指標無特別要求,混合部署可能有價格優勢
0
開源中國首席路人王
開源中國首席路人王

@達坦科技DatenLord 請問云原生是什么意思嗎?

達坦科技DatenLord
達坦科技DatenLord
云原生基金會對其定義如下: 云原生技術有利于各組織在公有云、私有云和混合云等新型動態環境中,構建和運行可彈性擴展的應用。云原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和聲明式API。 這些技術能夠構建容錯性好、易于管理和便于觀察的松耦合系統。結合可靠的自動化手段,云原生技術使工程師能夠輕松地對系統作出頻繁和可預測的重大變更。
達坦科技DatenLord
達坦科技DatenLord
通俗來講就是借助容器等技術,面向云開發的,充分利用云上資源以提高應用的開發和維護效率的行為都可以被稱為云原生的。Xline就是一個云原生案例,可以容器化部署,彈性拓展等。也可以對照本地單機應用開發和維護流程的反面進行理解。
0
南方Go
南方Go

@達坦科技DatenLord  1.Rust語言如何入門開發?

2.天空計算相較于云計算的優勢, 這種混合云的開發, 例如華為云,騰訊云,或者私有云的類的自己不是也可以開發嗎?

3.Xline 如何做到低時延跨云數據交互? Rust的Xline 相當于JAVA的什么??

達坦科技DatenLord
達坦科技DatenLord
Rust 語言和其他語言的一個顯著不同在于,在沒有建立起對 Rust 的 “心智模型” 之前(特別是所有權,生命周期,類型系統等),就去編寫一些從其他語言角度看起來正確的程序,則很可能難以逃脫要和編譯器搏斗的命運。因此,對于入門階段,有以下三點建議:
達坦科技DatenLord
達坦科技DatenLord
1. 要擺正心態,不要因為編譯器反復挑刺就覺得太難學,從而放棄這門語言 2. 建立 Rust 的“心智模型”: 1. 理論方面,入門階段可以看看官方的 Rust book,涵蓋了語言的方方面面,能夠建立起對語言的一個主線脈絡的認知 2. 實踐方面,對于理論上無法理解,需要進行實踐來加深認知的,則可以看看 in Action 系列的書,比如 Rust in action 系列。
達坦科技DatenLord
達坦科技DatenLord
3. 做自己的實踐,多讀優秀的代碼,在這方面可以好好利用 Rust 優秀的文檔系統,閱讀標準庫(文檔 + 代碼);多寫 Rust 代碼,并讓有經驗的 Rust 開發者來幫助你 review 你的代碼,可以為一些 Rust 實現的開源項目做貢獻,比如 Xline 上現在就有一些 good-first-issue 。
達坦科技DatenLord
達坦科技DatenLord
混合云可以自己開發。天空計算的最大優勢是屏蔽不同云之間的差異,讓應用可以像使用一朵云那樣,不必再考慮不同云之間的差異。而且,也并非所有用戶都有開發能力,需要通用的解決方案。
達坦科技DatenLord
達坦科技DatenLord
Xline 主要通過 Curp 共識協議來實現低時延的跨數據中心一致性保證。在無沖突情況下(fast path),Curp 協議能比 Raft 協議或者 Paxos 協議節省 1 個 RTT。在廣域網上節省一個 RTT 就能省下不少 latency 了。在有沖突的情況下(slow path),Xline 中的 Curp 能夠退化為 Raft 協議,恢復到 2 個 RTT。
下一頁
0
赤腳小子
赤腳小子

@達坦科技DatenLord 你好,請問你們在選擇分布式協議的時候,比如我們知道有Paxos算法,Raft算法以及其他實現像zookeeper的zab這么多實現,你們最后選用的是哪個,還是自研的,又是怎樣的考慮呢?

如果你們選用了raft,又是怎么克服它自身的缺點的呢?比如性能問題

 

謝謝

達坦科技DatenLord
達坦科技DatenLord
對于分布式協議,在選型的時候會考慮算法本身的復雜度,使用場景,工程實現等因素。Paxos 算法比較晦澀難懂,同時 Paper 當中也缺少必要的工程實現細節,在業界的使用程度不太高。
達坦科技DatenLord
達坦科技DatenLord
而對于 Raft 而言,本身 Paper 在發布之初就把易于理解做為了目標之一,同時業界也有成熟的工業實現,如 etcd,積累了大量的優化和實踐經驗。但不管是 Paxos 還是 Raft 抑或是 ZAB 協議,在跨云場景下都是不適合的,其原因在于不同數據中心之間的網絡延遲非常高,可達幾十甚至上百毫秒,而這些協議都要求 2 個 RTT 已達到強一致性的要求。
達坦科技DatenLord
達坦科技DatenLord
基于這些因素,Xline 選擇使用 Curp 協議作為共識協議。在 fast path 的條件下可以相比 Raft 等算法可以節省 1 個 RTT,在 slow path 條件下則退化為 Raft 算法,需要 2 個 RTT 來達成共識。關于 Curp 算法具體可以參看 Paper:Exploiting Commutativity For Practical Fast Replication
0
zerolemon
zerolemon

@達坦科技DatenLord  我們一直有做云平臺的設備數據存儲和計算功能,但是面對海量設備數據狀態信息時,經??紤]的是使用數據庫優化的方案,以及簡化接口傳輸內容,進行優化。

在程序運行方面,rust或者云計算,能否提供對應的類似微服務的功能業務

達坦科技DatenLord
達坦科技DatenLord
針對海量設備數據的存算,Rust的優勢是從語言層面保障并發安全和與C語言相當的效率,同時沒有Java和Go的垃圾回收導致的卡頓問題,可以穩定高效地存取和處理數據。云計算可以提供類似微服務的功能,提供計算資源和存儲容量的彈性擴容等特性,相關的業務邏輯可以用Rust語言編寫。
達坦科技DatenLord
達坦科技DatenLord
多云部署可以分地區分時段或根據數據機密程度存儲在多個云上以提高性能、降低成本以及保障數據安全。若使用云廠商提供的云數據庫,能否按需調優需要看廠商支持,但簡化接口等處理邏輯上的優化一般是可以自己控制的。
0
osc_32324621
osc_32324621

@達坦科技DatenLord

1. 請問前面的回答中提到了“在無沖突情況下(fast path),Curp 協議能比 Raft 協議或者 Paxos 協議節省 1 個 RTT。在有沖突的情況下(slow path),Xline 中的 Curp 能夠退化為 Raft 協議,恢復到 2 個 RTT”。怎么理解這里提到的沖突?

2. 軟件行業沒有銀彈。fast path 能夠比 slow path 節省 1 個 RTT,那它是怎么做取舍的?

0
osc_32324621
osc_32324621

@達坦科技DatenLord

1. 請問前面的回答中提到了

在無沖突情況下(fast path),Curp 協議能比 Raft 協議或者 Paxos 協議節省 1 個 RTT。在有沖突的情況下(slow path),Xline 中的 Curp 能夠退化為 Raft 協議,恢復到 2 個 RTT。

怎么理解這里提到的沖突?

2. 軟件行業沒有銀彈。fast path 能夠比 slow path 節省 1 個 RTT,那它是怎么做取舍的?

0
某人gmgn3
某人gmgn3

@達坦科技DatenLord 我想問一下使用 Rust 開發的跨云 KV 數據庫的優勢是什么?

0
達坦科技DatenLord
達坦科技DatenLord

引用來自“osc_32324621”的評論

@達坦科技DatenLord

1. 請問前面的回答中提到了

在無沖突情況下(fast path),Curp 協議能比 Raft 協議或者 Paxos 協議節省 1 個 RTT。在有沖突的情況下(slow path),Xline 中的 Curp 能夠退化為 Raft 協議,恢復到 2 個 RTT。

怎么理解這里提到的沖突?

2. 軟件行業沒有銀彈。fast path 能夠比 slow path 節省 1 個 RTT,那它是怎么做取舍的?

1. 以 Xline 的 KV 操作為例,如果 client 并發地讀寫不同的 key,那么這兩個操作是可以相互交換的,例如 client A 發起了 PUT X = 1 的請求,而 Client B 發起了 PUT Y = 2 的請求,那么這兩個請求在 CURP 看來誰先執行誰后執行都不影響狀態機的最終狀態,我們稱這兩個操作為 commutative(可交換的)。如果兩個 client 操作同一個 key,那么則需要看情況,如果兩個請求都是只讀請求,則依然滿足 commutative 原則。而這兩個請求如果其中包含了至少一個寫請求,則不滿足 commutative,因為對于讀寫操作,先讀后寫會讀到舊值,而先寫后讀會讀到新值,而對于寫寫操作,后寫會覆蓋先寫的結果。如果在 fast path 中,接收到的所有操作都滿足 commutative 原則,則成為無沖突;反之,在 fast path 中,接收到的若干個請求中,包含了至少一個不滿足 commutative 原則的操作,則認為有沖突,fast path 會 fallback 到 slow path,需要 2 個 RTT 來達成共識。

2. Raft 算法之所以需要 2 個 RTT,主要是因為它必須同時滿足持久化存儲(過半數的副本)和有序這兩個前提。client 只能和 master 通信,master 接收到請求后要執行 AppendEntries 操作,此時滿足有序前提,請求會以 log index 的形式確定好唯一的順序,再由 master 將這個順序和命令一同復制到集群中的過半數節點,這就導致 2 個 RTT。CURP 弱化了假設,將有序和持久化存儲分開到兩個角色中,即 master 和 witness 中,其中 master 來確定命令的唯一執行順序,而 witness 負責持久化(witness 中持久化的請求的執行順序是無保證的)。它帶來了一些取舍(架構設計上的復雜度,包括集群角色的增加,client 的請求發送方式,master retire 的復雜度等):

  1. Client 需要將請求發送給集群中的所有節點,包括了 master 和 witness,并且必須收到 f + 1 + ( f/ 2) 個成功請求,才能認為該命令成功被執行。client 需要發送的請求雖然增加了,但達成共識的 RTT 數縮小了
  2. Recovery 帶來了一些額外的復雜性。對于已經完成同步的 master,crash 后的 recovery 和 raft 沒有什么不同,只需要從副本處同步日志即可,但對于還沒有完成同步的 master,crash 后的 recovery 除了同步日志外,必須要 replay 所有 witness 節點中持久化下來的非沖突請求
  3. Master demote 成為 follower 時,需要解決已執行但尚未持久化的請求的影響,因為這些影響可能會導致新 follower 上的日志副本與其他 follower 節點上的副本不一致。
OSCHINA
登錄后可查看更多優質內容
返回頂部
頂部
一本久久综合亚洲鲁鲁五月天,无翼乌口工全彩无遮挡H全彩,英语老师解开裙子坐我腿中间