高手问答第 296 期 —— 天空计算到底是不是云计算的未来?

OSC哒哒 发布于 01/31 14:30
阅读 6K+
收藏 5

云计算时代下,云厂商帮我们解决了计算和存储资源的维护与拓展问题,但用户也面临被厂商绑定的问题。

2021年UCBerkeley 提出了Sky Computing(“天空计算”)的概念,其目标是允许应用跨多个云厂商运行,实现多云之间的互操作性。 算力和数据在多云之间的迁移是天空计算需要解决的两个基本问题。随着虚拟化技术的发展,算力迁移正在逐渐得到解决,无状态计算密集型任务可以在各个云厂商无差别运行。但安全快速地进行跨云数据迁移和同步仍存在较大挑战。

云计算背景下的分布式系统大多运行在同一数据中心的多台服务器上,其间网络延迟低,可靠性高。跨云则意味着服务器间物理距离的增加,导致网络延迟增加和可靠性降低,服务器间的一致性维护,共识的建立都更加困难。 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
云原生基金会对其定义如下: 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式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
登录后可查看更多优质内容
返回顶部
顶部