嘉宾:施继成
编辑:李慧文
RDMA(Remote Direct Memory Access)是近年越来越热门的高速网络传输协定,被广泛应用于超算核心和高端存储畛域,用于缩短网络提早、进步网络带宽。然而 RDMA 的 API 接口十分难以使用,且谬误地应用很容易造成程序谬误甚至数据失落。
跨云存储厂商达坦科技(DatenLord)的联结创始人施继成曾在 Google、微软和阿里巴巴等一线大厂从事操作系统和分布式系统的钻研和开发工作,为了更好地专一于本人喜爱的畛域抉择了守业。同时他也是 QCon+ 案例研习社的讲师,将在极客工夫分享他们在 RDMA 中应用 Rust 的教训。InfoQ 有幸采访了他,请他来分享在云原生高性能存储平台方面守业的故事和教训。
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 语言也会大大缩短“热身”工夫,能尽快投入我的项目中,也就更受咱们青眼。