写点什么

创业公司为什么要选 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:263334

评论

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

教你如何搭建K8S集群。

百度搜索:蓝易云

云计算 Kubernetes 运维 k8s 集群

制造执行系统(MES)在新能源领域的应用

万界星空科技

新能源 新能源行业

小灯塔系列-中小企业数字化转型系列研究——项目管理测评报告

向量智库

如何快速完成PostgreSQL数据迁移?|NineData

NineData

postgresql 数据迁移 不停机发布 NineData 结构迁移

解决 App 自动化测试的常见痛点

霍格沃兹测试开发学社

uiautomator2 自动化测试工具使用

霍格沃兹测试开发学社

如何基于 ACK Serverless 快速部署 AI 推理服务

阿里巴巴云原生

阿里云 Serverless 容器 云原生 Serverless Kubernetes

安徽阜阳是几线城市?有正规等级保护测评机构吗?

行云管家

等保 等级保护 等保测评机构 阜阳

小灯塔系列-中小企业数字化转型系列研究——任务管理测评报告

向量智库

10个微服务设计模式

越长大越悲伤

微服务 微服务设计

Linux系统安装和使用Kafka教程。

百度搜索:蓝易云

云计算 kafka Linux 运维 云服务器

精准化测试原理简介

霍格沃兹测试开发学社

Chrome 浏览器+Postman做接口测试 ?

霍格沃兹测试开发学社

万字干货分享 | 阿里云CIPU技术解析

阿里云弹性计算

Linux 中的 su 和 sudo 命令有什么区别?

百度搜索:蓝易云

云计算 Linux 运维 sudo su

微博评论高性能高可用计算架构

艾瑾行

架构训练营

Docker容器安装Nginx教程。

百度搜索:蓝易云

nginx 云计算 Linux 容器 运维

“一日之际在于晨”,欢迎莅临WAVE SUMMIT上午场:Arm 虚拟硬件早餐交流会

飞桨PaddlePaddle

人工智能 paddle 百度飞桨 硬件生态

大模型时代,如何重塑AI人才的培养?知名高校专家为您解答

飞桨PaddlePaddle

人工智能 paddle 百度飞桨

全链路Trace全量存储-重造索引

乘云 DataBuff

Docker搭建测试用例平台 TestLink

霍格沃兹测试开发学社

Syncovery for mac(文件备份和同步工具) 10.6.12激活版

mac

苹果mac Windows软件 Syncovery 文件同步和备份软件

融云荣获「2023 中国数字生态通信领军企业」奖

融云 RongCloud

互联网 通信 数字 融云 AIGC

TiDB Bot:用 Generative AI 构建企业专属的用户助手机器人

PingCAP

人工智能 数据库 AI TiDB

DTCC 2023,8月16日北京见!

KaiwuDB

KaiwuDB DTCC 2023

LED电子显示屏幕如何计算它的面积

Dylan

广告 交通 LED显示屏 全彩LED显示屏 体育

TiDB v7.1.0 跨业务系统多租户解决方案

PingCAP

MySQL 数据库 多租户 TiDB

HyperDock for Mac(mac窗口调整工具)v1.8.0.10中文激活版

mac

苹果mac Windows软件下载 HyperDock 窗口调整工具

开源软件下游分发合规性讨论 ——“心寄源”法律沙龙(2023第四期 | 总第九期)成功召开

开放原子开源基金会

开源

it资产管理软件哪个好?既好用又安全?

行云管家

运维 IT运维 IT资产 IT资产管理

小灯塔系列-中小企业数字化转型系列研究——企业网盘测评报告

向量智库

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