NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

创业公司为什么要选 Rust 做 RDMA 库?

  • 2022-04-14
  • 本文字数:3733 字

    阅读完需:约 12 分钟

创业公司为什么要选 Rust 做RDMA库?

嘉宾:施继成

编辑:李慧文

 

RDMA(Remote Direct Memory Access)是近年越来越热门的高速网络传输协议,被广泛应用于超算中心和高端存储领域,用于缩短网络延迟、提高网络带宽。但是 RDMA 的 API 接口非常难以使用,且错误地使用很容易造成程序错误甚至数据丢失。

 

跨云存储厂商达坦科技(DatenLord)的联合创始人施继成曾在 Google、微软和阿里巴巴等一线大厂从事操作系统和分布式系统的研究和开发工作,为了更好地专注于自己喜欢的领域选择了创业。同时他也是QCon+案例研习社的讲师,将在极客时间分享他们在 RDMA 中使用 Rust 的经验。我们有幸采访了他,请他来分享在云原生高性能存储平台方面创业的故事和经验。

 

InfoQ:您为什么选择了云原生高性能存储平台这个赛道进行创业呢?

 

施继成:选择云原生高性能存储的原因是这个领域还有比较多问题亟待解决,用户的使用还不太方便和快捷,比如我们正在专注的跨云存储领域现有的相关技术还不够成熟和完善。同时这些相关技术又很有深度和难度,这样有挑战性且能给用户提供帮助的事情就非常吸引我。

 

从市场角度而言,跨云存储的需求量在最近几年将迎来巨大的增长:首先越来越多的客户采用多云或混合云架构,同时云厂商巨头由于商业利益的原因,在跨云场景缺乏技术革新的动机,这就激发出一片可观又值得进入的跨云市场。现在有一些创业公司在做离线冷数据的跨云迁移和备份,但是对于热数据的跨云访问问题还没有成熟的解决方案,这也正是我们在尝试取得突破的赛道。

 

InfoQ:RDMA 高速网络协议被广泛使用于现代数据中心,它有什么技术痛点呢?

 

施继成:RDMA 现阶段已经得到大家的广泛认可,但是 RDMA 大规模使用的时候还存在一些技术痛点,例如大规模 RDMA 网络的流量控制、RDMA 应用的内存自动管理、如何让 RDMA 适配广域网场景等等。除了这些技术痛点,新手在接触 RDMA 相关技术时还面临着技术门槛高而导致的上手困难问题,比如出错信息晦涩,进而导致纠错难之类的问题等等。

 

InfoQ:为什么您的团队选择了 Rust 做 RDMA 库呢?Rust 有什么核心特性,吸引了您的团队呢?能介绍下您的团队当时选型语言的思考吗?比如横向对比一下 Rust、C、Go 等热门语言,给读者提供一些语言选型参考呢?

 

施继成:我们团队选择 Rust 语言是看好其在高性能基础软件中的发展势头。当然,我们也考虑过其他编程语言,例如 Go 语言和 C/C++ 语言。

 

Go 语言在云原生领域具有统治地位,绝大多数的框架和库都是用 Go 语言完成的,但是 Go 语言的性能并不优异,和 C/C++ 这类语言比还有不小差距,而我们需要提供的是极致性能的存储产品,所以 Go 语言没有成为我们的主要编程语言。

 

C/C++ 性能非常好,也是基础系统最常使用的语言,但是这两门语言在使用上的规约性较少,程序员很容易写出不自知的 Bug,找出这些问题非常费时费力,因此也会影响系统的稳定性。

 

相比之下,Rust 语言在内存安全和多线程安全性方面有语言级别的支持,能够大大减少相关错误发生的概率;而且其零代价高层抽象的特性能够同时满足高性能需求和软件高级别抽象的需求。

 

Rust 语言在我看来就是新时代的 C 语言。连 Linux 内核都开始尝试接收 Rust 语言作为第二门官方编程语言,可见其在基础底层软件开发上的受欢迎程度。

 

在实际项目中语言仅仅是工具,选择更多的是看需求,例如在容器领域 K8s 占据了主导地位,那么 Go 语言就非常适合在这个场景下开发,原因是周围的其他的库也都是这个语言,成熟的成功案例也比较好找,容易学习和开发。所以对开发语言的选型更多是根据使用场景,偏底层的基础软件系统开发适合用 Rust 或 C,偏上层的应用层适合用 Go 或 Java。

 

InfoQ:您的团队通过 Rust 实现了 RDMA API 管理库,能否介绍一下该库的设计思路和实施方案呢?

 

施继成:我们实现的 Rust RDMA 库主要解决了以下几个问题:

  1. 让 Rust 语言直接调用 RDMA 的 API

  2. 安全且高效地管理 RDMA 的内存资源

  3. 在底层的 RDMA ibverbs 接口上封装高级的抽象层,实现多台机器的内存资源能统一管理。

 

我们主要利用了 Rust 语言的所有权机制和引用计数机制,保证了单机内存资源的安全访问和及时释放;同时我们利用了 Tokio 异步执行库的优势封装了异步接口,使得 RDMA 接口可以在 Rust 异步方法中被调用,提高了数据并发传输的效率;最后我们提供了一套上层接口,方便多台机器管理 RDMA 内存块,减少因为机器间协同出错造成性能下降的可能性。

 

InfoQ:在使用 Rust 进行开发时,你们遇到的最大的难题是什么?是如何解决的呢?能否举个例子分享下呢?

 

施继成:使用 Rust 语言我们遇到的最大困难点在于如何改变思维方式,按照传统的方式去设计程序往往会让 Rust 语言写起来特别痛苦,需要花大量时间和编译器作斗争。解决的方法也很直接,就是不断学习其他开源项目的经验,并在实践中不断总结经验,按照 Rust 那套“安全”的思路来设计程序,慢慢地就能够比较顺滑得使用 Rust 语言了。

 

举个例子,我们最开始使用 Rust 的时候往往摆脱不了 C/C++ 中指针传递的习惯,因为这是最廉价和高效的内存共享方式,然而不加节制的内存共享会导致内存访问的安全问题。因此 Rust 语言禁止这些行为的发生,也导致我们早期和编译器进行了不少的“搏斗”,最后通过对 Rust 背后设计理念的理解,优化我们产品设计的同时也提高了开发的效率。

 

InfoQ:您觉得目前的 Rust,还有哪些亟需攻克的难点呢?

 

施继成:Rust 语言的上手难度还是比较大,对于初学者的要求比较高,学习曲线过于陡峭等问题会阻碍一部分爱好者深入了解的兴趣。Rust 语言本身和周边设施也存在一些问题需要解决,其中我们遇到的一个问题是异步执行器不统一,导致选择的时候需要“站队”,而同时支持多种异步执行器的库并不多,所以一旦选择了某个执行器很可能就无法使用某些很好用的库。这也是 Rust 生态在演化过程中带来的问题,相信随着 Rust 生态越来越成熟完善,这些框架不统一的问题会逐步消除。

 

现阶段这些问题是整个 Rust 社区共同需要面对的问题,大多也都还没有解决,因此我们也只能寻找一些折中的解决方案,比如在选择执行器方面我们会选择使用最广泛的异步执行器。当然我们也在尝试为社区提供一些解决方案,比如目前还在规划中的异步执行统一库,可以让用户在编译时动态选择想要使用的异步执行器,而不是在编码层面直接绑定。这些工作还在推进中,当然因为工作量着实不小,还需要不少时间来推进。

 

InfoQ:作为一家创业公司,使用 Rust 这样较新、受众少的语言,会不会比较冒险呢?是否也会增加客户的学习成本呢?

 

施继成:这个问题非常好,这的确是有一定的冒险性,这个冒险性主要在开发过程中,对于用户没有什么影响。Rust 现阶段虽然热度很高,但还算是小众语言,学的人很多,会的人很少,想要找到我们需要的人才就会相对困难一些。不过也有一些“意外”的好处,在我们的有限接触范围内发现,凡是对 Rust 语言能够深入学习了解和使用的工程师,往往在工程和技术层面都有不错的积累,会比较符合达坦科技对技术人员的要求,这可能是 Rust 语言本身高门槛带来的一些“好处”。

 

InfoQ:在存储外,您觉得还有哪些场景特别适合 Rust 大展神通呢?

 

施继成:上面有提到,Linux 系统已经在尝试使用 Rust 语言,可见 Rust 语言在操作系统领域是很有可能大展神通的。

 

除了操作系统,凡是对安全对高性能有高要求的领域 Rust 也应该有一展拳脚的机会,例如高性能计算和可信计算领域。其中高性能计算领域因为对性能的高要求,原先都是底层语言的天下,例如 C/C++,Rust 语言的出现给出了另外一种可能性。

 

此外,据我所知,Rust 语言在区块链领域也被广泛使用。

 

InfoQ:作为一家创业公司的 CTO,您对新员工有什么期许吗?最看重应聘者的哪些特点呢?

 

施继成:达坦科技(DatenLord)的招聘策略是少而精,我希望新员工有以下特质:

  1. 拥抱开源:因为我们是国内首家同时开源 RDMA 软硬件解决方案的公司,开源写入了公司的基因。而且那些能够给开源社区积极做贡献的程序员往往也更加有主观能动性和创造力,公司也需要这样的人才。

  2. 基础扎实:创业团队每天都在做非常具有挑战的事情,技术方向上有时也会发生变化,只有基础扎实才能在这些攻坚和方向转变的时候表现良好。

  3. 积极主动:在当前疫情的影响下,达坦科技(DatenLord)响应政府的号召实行远程办公,这更需要员工有很强的自驱能力。

 

此外,我们倾向于选择使用 Rust 的工程师。我觉得能够深入了解和掌握 Rust 语言本身就是一张很好的名片,体现了应聘者优秀的学习能力。对达坦科技(DatenLord)而言,会用 Rust 语言也会大大缩短“热身”时间,能尽快投入项目中,也就更受我们青睐。

 

嘉宾介绍

施继成,跨云存储厂商 DatenLord 的联合创始人和 CTO、Apache 社区 Committer。毕业于复旦大学,曾任职于 Google、微软和阿里巴巴等公司,具有多年的操作系统和分布式系统的研究和开发经验。曾发表过多篇具有国际影响力的系统方面的学术论文。

 

活动推荐

创业公司除了要做好技术选型,还要做好团队管理。ArchSummit 全球架构师峰会(上海站)将延期到 6 月 19 日-20 日举行。我们在会议中策划了移动端开发技术实践中间件开发实战架构系统性能优化高并发架构实现数字化转型的管理流程技术人修炼等专题,从技术选型到团队管理,一站式为你解决创业中的各种问题,欢迎扫描下图中的二维码了解更多详情。



2022-04-14 15:263400

评论

发布
暂无评论
发现更多内容

JSP中Vue.js的使用受限

空城机

vue.js 大前端 jsp

智能化软件开发微访谈·第十六期:低代码/无代码开发

吴盛

低代码 快速开发 sql 无代码开发

聊聊LiteOS中生成的Bin、HEX、ELF三种文件格式

华为云开发者联盟

编译器 LiteOS Bin HEX ELF

Python OpenCV 图像平移,取经之旅第 10 天

梦想橡皮擦

3月日更

聊一聊 Vue 3 双向绑定是如何工作的

阿宝哥

Vue Vue 3

为什么很多工程师不了解Serverless

云原生

Serverless 云原生 Knative

大“食”代来临,后厨重地可以更“聪明”点儿

IoT云工坊

人工智能 物联网 PaaS 智慧厨房 智慧餐饮

6大创新技术及2亿美元投入计划,这个活动有点料

华为云开发者联盟

人工智能 数据库 华为 云原生 HDC.Cloud

Python OpenCV 图像缩放 cv2.resize 方法

梦想橡皮擦

3月日更

区块链电子合同签署平台,助力企业数字化转型

13828808769

区块链+ #区块链#

降维打击:数据可视化降本增效,传统制造业价值即将扭转!

一只数据鲸鱼

物联网 数据可视化 工业物联网 数字化运维 3D

未来几年,低代码开发平台会如何发展?

优秀

低代码

MindSpore实践:对篮球运动员目标的检测

华为云开发者联盟

深度学习 mindspore 图像检测 yolo 篮球运动

云端数智新引擎,腾讯云原生数据湖计算重磅发布

腾讯云大数据

大数据 数据湖

要求输出事故报告,线上日志文件却不见了!!

陈皮的JavaLib

Java 运维 日志框架

数字化进入深水区

鲸品堂

方法论 数字化 企业数字化转型

基于深度学习的端到端通信系统模型

华为云开发者联盟

深度学习 端到端 编码器 通信系统 信道模型

关于热力图数据上报清洗,我们做了一个有意思的尝试

阿里巴巴中间件

风暴眼中的“以太坊”堪比堵车的北京东三环,NA公链(Nirvana)NAC公链对垒胜算几何?

区块链第一资讯

区块链

区块链产品宗谱链,一款记录族谱的APP

13828808769

区块链+ #区块链#

关于企业容器安全问题的思考

阿里巴巴中间件

智能安防监控系统的发展与应用

anyRTC开发者

android 监控 音视频 WebRTC RTC

17张图带你搞懂ZooKeeper一致性原理!

Java小咖秀

程序员 TCP udp 传输协议

35岁了,还不知道,TCP为什么会粘包?【硬核图解】

小白debug

TCP 网络 协议栈 TCP/IP 网络层

Python基础之:Python中的IO

程序那些事

Python 人工智能 数据分析 程序那些事

初识Golang之函数及方法的多返回值

Kylin

3月日更

设计与思考,关于资源和生命周期(二)

程序员架构进阶

设计实践 生命周期 28天写作 3月日更 池化技术

智慧公安一键扫描二维码报警定位系统

13828808769

智慧交通

这个 29.7 K 的剪贴板 JS 库有点东西!

阿宝哥

JavaScript 开源 源码解析

金三银四了!必知必会,HTTP面试题!漫画图解超硬核!

小白debug

面试 网络编程 网络 HTTP 网络层

另类数据:投资中的怪咖

博文视点Broadview

创业公司为什么要选 Rust 做RDMA库?_语言 & 开发_李慧文_InfoQ精选文章