分享好友 站长动态首页 网站导航

|创业公司为什么要选做库

网友发布 2022-08-05 06:09 · 头闻号创业经验

嘉宾:石

编辑:李慧雯

RDMA是近年来越来越流行的高速网络传输协议,广泛应用于超级计算中心和高端存储领域,以缩短网络延迟,提高网络带宽。但是RDMA的API接口非常难用,错误的使用很容易导致程序错误甚至数据丢失。

跨云存储厂商大探科技联合创始人石,曾在谷歌、微软、阿里巴巴等一线厂商从事操作系统和分布式系统的研发工作。他选择创业,是为了更好地专注于自己喜欢的领域。同时他也是QCon+案例研究学会的讲师,会在极客时间分享他们在RDMA使用Rust的经验。InfoQ有幸采访了他,请他分享在云原生高性能存储平台创业的故事和经历。

InfoQ:你为什么选择云原生高性能存储平台这个赛道来创业?

石:之所以选择云原生高性能存储,是因为这个领域还有很多问题需要解决,用户使用起来并不方便快捷。比如我们现在重点关注的跨云存储领域,现有的相关技术还不够成熟和完善。同时这些相关技术很深很难,以至于一些有挑战性,对用户有帮助的东西很吸引我。

从市场角度来看,跨云存储的需求将在近几年出现巨大增长:首先,越来越多的客户采用云或混合云架构,同时,云厂商巨头出于商业利益的考虑,缺乏跨云场景的技术创新动力,这激发了一个可观且值得投资的跨云市场。现在有一些创业公司在做离线冷数据的跨云迁移和备份,但是热数据的跨云访问还没有成熟的解决方案,这是我们正在努力突破的赛道。

InfoQ:RDMA高速网络协议被广泛应用于现代数据中心。它的技术痛点是什么?

史:目前已经得到了大家的广泛认可,但是大规模使用时还存在一些技术痛点,比如大规模网络的流量控制,RDMA应用的自动内存管理,如何让适应WAN场景等等。除了这些技术痛点,新手在接触RDMA相关技术时还面临着入门困难,比如晦涩难懂的错误信息导致纠错困难等等。

InfoQ:为什么你的团队选择Rust作为RDMA图书馆?Rust吸引你的团队的核心特点是什么?能否介绍一下当时你们团队在语言选择上的思路?比如对比Rust、C、横向走等流行语言,给读者提供一些语言选择的参考?

石:我们团队选择Rust language是看好它在高性能基础软件方面的发展势头。当然,我们也考虑过其他编程语言,比如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库主要解决了以下几个问题:

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

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

3.将高层抽象层封装在底层RDMAib动词接口上,实现多台机器内存资源的统一管理。

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

InfoQ:你在使用Rust进行开发时遇到的最大问题是什么?是如何解决的?可以举个例子分享一下吗?

石:使用铁锈语言最大的困难是如何改变思维方式。用传统的方式设计程序,往往会让Rust语言写起来特别痛苦,要花很多时间和编译器斗争。解决方法也很直接,就是不断借鉴其他开源项目的经验,在实践中不断总结经验,按照Rust的“安全”思路设计程序,逐渐能够更加流畅地使用Rust语言。

比如我们第一次使用Rust的时候,在C/C++中无法摆脱指针传递的习惯,因为这是最廉价最高效的共享内存的方式。然而,不受控制的内存共享会导致内存访问的安全问题。所以Rust语言禁止了这些行为,这也导致了早期我们和编译器之间的大量“斗争”。最后,通过了解Rust背后的设计理念,可以优化我们的产品设计,提高开发效率。

InfoQ:你认为在当前的Rust中还有哪些困难需要克服?

石:Rust语言还是比较难用的,对初学者的要求比较高,学习曲线比较陡,会阻碍一些爱好者进一步了解的兴趣。Rust language本身及其周边设施也有一些问题需要解决。我们遇到的一个问题就是异步执行器不统一,导致选型时需要“排队”。但是同时支持多个异步执行器的库并不多,所以一旦选择了一个执行器,很可能一些非常有用的库就无法使用了。这也是铁锈生态进化带来的问题。相信随着铁锈生态的成熟和完善,这些框架的不统一会逐渐消除。

目前这些问题是整个Rust社区面临的共同问题,大部分都没有得到解决,只能寻找一些折中的解决方案。例如,我们在选择执行机构时会选择应用最广泛的异步执行机构。当然,我们也在尝试为社区提供一些解决方案,比如异步执行的统一库,目前还在规划中。它允许用户在编译时动态选择想要使用的异步执行器,而不是在编码级别直接绑定。这些任务仍在进行中。当然,因为工作量不小,所以要提前很多时间。

InfoQ:作为一家初创公司,在受众很少的情况下使用Rust这样的新语言有风险吗?是否也会增加客户的学习成本?

石:这个问题提得很好。确实有风险。这个风险主要在开发过程中,对用户没有影响。Rust现阶段很流行,但还是小众语言。学的人多,知道的人少。找到我们需要的人才会相对困难。但是,也有一些“意想不到”的好处。在我们有限的接触范围内,发现能够深入学习和使用Rust语言的工程师,往往在工程技术方面有很好的积累,会更符合大探科技对技术人员的要求。这可能是铁锈语本身的高门槛带来的一些“好处”。

InfoQ:除了收纳,你觉得还有哪些场景特别适合Rust展示他的魔力?

史:如前所述,Linux系统已经在尝试使用Rust语言,由此可见,Rust语言很有可能在操作系统领域大显身手。

除了操作系统,Rust应该还有机会在高性能计算、可信计算等对安全性和高性能要求较高的领域发挥作用。其中,高性能计算领域由于对性能的要求较高,原本主要由低级语言主导。比如C/C++,Rust语言的出现给了另一种可能。

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

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

石:大探科技的招聘策略是少而精。我希望新员工具备以下特点:

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

2.基础扎实:创业团队每天都在做非常有挑战性的事情,技术方向有时会发生变化。只有有了坚实的基础,他们才能在这些攻坚克难、改变方向的时刻表现出色。

3.主动出击:在当前疫情的影响下,达坦科技响应政府号召,实行远程办公,要求员工有很强的自驾车能力。

另外,我们倾向于选择使用Rust的工程师。我感觉能够深入了解和掌握铁锈语本身就是一张很好的名片,体现了考生优秀的学习能力。对于DatenLord来说,了解Rust语言也可以大大缩短“预热”时间,尽早投入项目对我们来说更受欢迎。

转载自InfoQ

file/tupian/20220805/W0Ew8ViJisy78MoZYQuK UTM _ source = wx share

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

评论

0

收藏

点赞