【活动回顾】Rust:构建新时代基础设施的首选语言 @Qcon
以「启航 • AIGC 软件工程变革」为主题的 QCon 全球软件开发大会北京站于 9 月 5 日在北京富力万丽酒店圆满落幕!此次大会包含向量数据库、云原生、异构计算、面向 AI 的存储、微服务架构治理、FinOps 等近 30 个精彩专题。Databend Labs 作为深耕云原生数据库领域的科技公司受邀参与。
9 月 3 日下午,Databend 研发工程师 - 邰翀作为「构建未来软件的编程语言」专题的演讲嘉宾参与本次分享。
主题: 「Rust:构建新时代基础设施的首选语言」
演讲嘉宾: 邰翀
嘉宾介绍: Databend 研发工程师
本次分享聚焦于数据库和 AI 领域,从跨云数据访问和向量数据库的现实需求谈起,阐述为什么 Rust 是适合于新时代基础设施的编程语言,并分析 Rust 在新时代基础设施下的新机遇。本次分享主要分为三个部分:
Rust 新时代基础设施的最佳选择
All in Rust 为 Databend 带来了什么
Rust 如何成为构建 Vector Embeddings 的关键语言
Rust 的机遇与挑战
Rust 新时代基础设施的最佳选择
在此前,当我们谈论基础设施时,首先可能会想到服务器、Oracle 等。而近些年来,我们谈论基础设施已经离不开云和构建在云上的各种服务。
新时代基础设施是指:可以在云上自由部署、与云完美融合的基础设施。在这个新时代中,Databend 和一些数据库同行都选择了 Rust 作为首选语言。我们可以观察到 amazom、 微软、Firefox、飞书、TiKV、云数仓 Databend、OpenDAL 等公司或者项目在使用 Rust 。
Rust 的发展时间线
2006 年, Graydon Hoare 着手设计和实现 Rust 语言,此时,还只是他的个人项目。
2009 年,Mozilla 开始赞助这个项目,并成立团队支持 Rust 的开发。
2010 年,Rust 首次公开,并在一年后实现了编译器自举,到 2015 年发布了第一个稳定版本。
2021 年,Rust 基金会成立,为 Rust 语言带来更广阔的发展前景。
Rust 与内存安全
Rust 的创始人 Graydon Hoare 曾经说过:“Rust 是一种采用过去的知识解决将来的问题的技术。”
在我的理解中,Rust 的主要目标之一就是解决内存安全问题。
下面列出一些常见的内存安全问题:
Out-Of-Bound : 假设有两个线程,其中一个线程在访问链表,另一个线程在进行删除,这个时候可能会产生越界问题。
Use After Free : 指针指向了堆上一块内存,但是这块内存因为扩容或者其他原因导致重分配,给了恶意代码修改并且执行被释放内存的机会。
通用手法
针对内存安全问题,不同的编程语言都会提出自己的一套解决方案,目前通用的方式包括:
垃圾回收(Garbage Collection,GC) :设立专门的垃圾回收机制来检测内存。由于回收机制的时间不固定,这种方式可能会导致内存不可控。对于数据库软件而言,如果在做大量数据的聚合相加,可能会导致内存飙升,并且很长时间无法释放,容易诱发 OOM 。
自动引用计数(Automatic Reference Counting,ARC) :可以自动地跟踪和管理对象的引用计数,从而避免了手动管理内存的繁琐和容易出错的问题,算是一种比较好的方式。
手动管理内存(Manualy Handle Memory) :开发者自行管理分配和释放,对程序开发功底要求比较高。
Rust 怎么做
上面的三种通用手法是通过管理引用来处理内存安全问题的,而 Rust 则选择通过限制引用行为来解决内存安全问题。 更具体地,Rust 引入了所有权、借用检查和生命周期这三个重要的概念。
所有权(Ownership) :每个值只能有一个所有者。
借用检查(Borrow Check) :帮助管理所有权的一套规则,能够处理内存分配和释放,防止数据竞争。
生命周期(Lifetimes) :程序中每个变量都有一个固定的作用域,当超出变量的作用域以后,变量就会被销毁。变量在作用域中从初始化到销毁的整个过程称之为生命周期。
Rust :最受程序员推崇的语音
正因为 Rust 语言表现力、卓越的性能以及自己独有一套的内存管理方式,蝉联八届 Stack Overflow Developer Survey 最受程序员推崇的语言。
All in Rust 为 Databend 带来了什么
Databend Labs 成立于 2021 年 3 月,是一家开源 Data Cloud 服务商,致力于为大数据生态提供坚实可靠的基础设施。我们的核心团队成员来自 ClickHouse 社区、谷歌 Anthos、阿里云等国内外知名互联网和云计算公司,团队在云原生数据库领域有着丰富的工程经验,同时也是数据库开源社区活跃贡献者。
我们在用 Rust 做什么?
Databend 是一款使用 Rust 研发、开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓,具有即时扩缩容能力,能在数分钟内增加数百倍的算力,为企业提供了一个用于存储、管理和分析大量数据的集中式平台,从而助力企业更准确地洞察业务、制定战略。
除了 Databend 之外,我们也使用 Rust 开发和维护了大量项目:
OpenRaft 是在 tokio 之上实现的异步 Raft 框架,在 leadership 上做了大量优化,性能非常强劲。
BendSQL 是基于 Databend HTTP API 和 Arrow Flight API 设计和实现的原生客户端。
AskBend 是一款知识库智能问答系统,基于 OpenAI 的 API 并且利用 Databend 内置的一系列 SQL 函数(AI Functions)打造。访问链接:https://ask.databend.rs 即可体验。
OpenDAL 提供一个统一、简单、高效、可靠、可观察的数据访问层,让开发者可以无缝地使用不同的存储服务,并享受到最佳的用户体验。今年 3 月份的时候已经移交到 Apache 软件基金会孵化器中进行孵化。
Rust 给我们带来了什么?
数据库本身就是计算机科学皇冠上的一颗明珠,是一个庞大而又复杂的系统。而在 Databend 的设计和实现中,我们还从目前市场上最优秀的数仓中借鉴了一些经验。例如,我们参考了 Clickhouse 的向量化设计,以提高单机的性能。同时,我们也借鉴了 Snowflake 的集群优点,以增强分布式计算能力。
选择 Rust 作为这样一个复杂系统开发的首选语言,我们收获了这些:
高效 的研发 : 虽然 Databend 从第一版发布至今只有 2 年多,但从开源到文章撰写时为止,已经累计有 8000 多个 PR 。
优越 的 性能: Databend 在 Clickbench 基准测试中,数据导入性能排名第一,并且在 c6a.4xlarge 机型性能登顶,除了优秀的设计和实现之外,Rust 功不可没。
活跃的 社区: 得益于 Rust 语言的流行和社区的持续关注,到文章撰写时为止已有超过 200 位贡献者,收获 6.5 k star ,是 Rust 社区中的明星项目之一。
Rust 如何成为构建 Vector Embeddings 的关键语言
同样是数据库领域,现在让我们将目光转向今年在 AI 上大放异彩的向量数据库。
向量嵌入(Vector Embeddings)可以将数据转化为一个包含其实际含义的向量空间。而向量数据库则致力于挖掘存储和处理向量数据的能力,并提供高效的向量检索功能。
为什么需要向量数据库
对于 GPT 这样的大模型而言,Tokens 大小限制了应用的进一步开发,而引入向量数据库之后,就可以利用向量检索和向量索引能力,相似度更近的数据紧凑存放。这样可以带来两个方面的好处:
降低 GPT 的使用成本。
维护长期记忆,帮助 AI 理解和执行复杂任务。
Rust 如何进入向量数据库
让我们一起来看一下 Rust 是怎么进入到向量数据库领域的:
研发新的向量数据库: 获得知名投资机构 YC 的青睐的 LanceDB 使用 Rust 设计了针对向量数据库的存储格式。
重写现有向量数据库: Pinecone 将 C++ 和 Python 代码库使用 Rust 完全重写。在今年 5 月份获得 a16z 一亿美元 B 轮投资。
拓展旧有向量数据库: Milvus 则计划引入 OpenDAL(Rust 开发的存储访问层)的 C++ binding,以支持跨多云数据存储能力。
拓展现有其他数据库: Databend 支持向量类型的存取与基本相似度查询功能,并且提供 AI Functions ,能够与 OpenAI API 进行交互。
拓展旧有其他数据库: AI 初创公司 tensorchord 使用 Rust 开发 PostgreSQL 的向量处理拓展 pgvecto.rs 。
Rust 的机遇与挑战
回顾 Databend Labs 使用 Rust 的研发历程,并且结合业界其他公司的经验,我们认为,Rust 能够成为构建新时代基础设施的首选语言的主要因素有以下几点:
内存安全
性能保障
敏捷开发
机遇
Rust 在新时代中的机遇,其实可以和前面 Rust 如何进入向量数据库结合起来看,这里同样举几个典型的项目作为例子。
新项目服务旧场景:
Polars 是 Pandas 的有力竞争者,团队宣布种子轮收获 400 万美元融资,用于打造 OLAP 计算平台。
HuggingFace 开源新的深度学习框架 Candle ,使用 Rust 编写。
新项目服务新场景
llmchain-rs 针对大模型工具链提供一站式解决方案。
mosec 针对大模型部署和服务开发提供高性能解决方案。
挑战
程序的可靠性仍然需要开发者自己去管理,并不能因为使用 Rust 就掉以轻心。一个有意思的段子是 “声称内存安全的项目中,往往充斥着大量的 unsafe 代码”。
尽管生态已经日趋完善,但在实际开发过程中,仍然少不了造轮子。而对于非系统编程,或者原型快速开发阶段,使用 Rust 在开发工具和生态对接上相比 Java 、Python 等语言还存在一些问题。
由于 Rust 本身的复杂性,新手仍然需要迈过门槛,而且 Rust 语言进入到项目以后在编译时间、CI 流水线等方面都需要进行不同程度的调试与改造。
Connect With Us
Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。
版权声明: 本文为 InfoQ 作者【Databend】的原创文章。
原文链接:【http://xie.infoq.cn/article/c9c4f75dc0de2865e8d0b0356】。文章转载请联系作者。
评论