【活动回顾】Rust:构建新时代基础设施的首选语言 @Qcon

news2024/11/24 4:12:26

以「启航 • 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。

  • Databend Website
  • GitHub Discussions
  • Twitter
  • Slack Channel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp实现表格冻结

效果图如下: 思路: 1.由于APP项目需要,起初想去插件市场直接找现成的,结果找了很久没找到合适的(有的不支持vue2有的不能都支持APP和小程序) 2.后来,就只能去改uni-table源码了,因…

Vue3中watch用法

在 Vue3 中的组合式 API 中,watch 的作用和 Vue2 中的 watch 作用是一样的,他们都是用来监听响应式状态发生变化的,当响应式状态发生变化时,都会触发一个回调函数。 当需要在数据变化时执行异步或开销较大的操作时,com…

推三返一模式:电商运营的新趋势

商行业在近年来发展迅速,各种平台和产品层出不穷,竞争也越来越激烈。如何在这样的环境中脱颖而出,吸引和留住用户,提高销售和利润,是每一个电商企业家都面临的挑战。有没有一种运营模式,可以让用户主动购买…

解决报错:npm ERR! code 1

我是 npm install --legacy-peer-deps 成功了 解决方案: 升级swiper库:你可以尝试升级你的项目中的swiper库到5.2.0或更高版本,以满足vue-awesome-swiper的需求。你可以使用以下命令来进行升级: npm install swiperlatest 注意…

MPLS VPN跨域A

拓扑设计 拓扑介绍 如图,上海分公司与山东分公司之间为保证业务可以互通,需要使用MPLS VPN技术进行连接。中间R3与R4之间运行IGP,使用IGP传递路由,因为网络需要经过联通与移动两个AS域,所以使用MPLS VPN OptionA方案来…

SDXL prompt 笔记

模型 模型有两个,分别是 stable-diffusion-xl-base-1.0、stable-diffusion-xl-refiner-1.0。 base 模型是用来做文生图,refiner 模型是用来做图生图的。 SDXL 模型之 base、refiner 和 VAE_云水木石的博客-CSDN博客 分辨率 默认是1024*1024&#xf…

SAP MM学习笔记33 - 请求书照合中修改 带勘定设定Category(科目分配)的发票

请求书照合,对照的是 客户或供应商发过来发票。 带勘定设定Category(科目分配)的发票,一般是消耗品。 不过是否是消耗品,对供应商来说,跟他们没关系,供应商只是卖商品给你,怎么用是…

【建造者模式】

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《20种Java设计模式》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员&#x…

【AIGC】文心一言 - 生成中秋祝福语、诗词、图像、相关代码等

文心一言 - 生成中秋祝福词、诗、画 引言一、中秋祝福语二、中秋诗词三、中秋图像 - 闪亮的月亮四、中秋代码 引言 文心一言是百度推出国产聊天GPT产品,不仅可以与人对话互动,回答问题,协助创作,还能进行数据分析、逻辑判断、绘画…

代码随想录算法训练营day53|1143.最长公共子序列|1035.不相交的线|53. 最大子序和

1143.最长公共子序列 力扣题目链接 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何…

【链表】反转链表 II-力扣 92 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

【Linux】线程池 | 自旋锁 | 读写锁

文章目录 一、线程池1. 线程池模型和应用场景2. 单例模式实现线程池(懒汉模式) 二、其他常见的锁1. STL、智能指针和线程安全2. 其他常见的锁 三、读者写者问题1. 读者写者模型2. 读写锁 一、线程池 1. 线程池模型和应用场景 线程池是一种线程使用模式。线程过多会带来调度开…

Linux安装kafka-manager

相关链接https://github.com/yahoo/kafka-manager/releases kafka-manager-2.0.0.2下载地址 百度云链接:https://pan.baidu.com/s/1XinGcwpXU9YBF46qkrKS_A 提取码:tzvg 一、安装部署 1.把kafka-manager-2.0.0.2.zip拷贝到目录 /opt/app/elk 2.解压…

【Python】让Anaconda不再下载慢下载失败,Anaconda的下载源更换为国内源(保姆级图文)

目录 对于源的添加与修改1. 查看源3. 移除源4. 恢复默认源 检查添加源是否生效清理原来的索引配置总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『Python』 系列,持续更新中 对于源的添加与修改 1. 查看源 conda config --show-sources## 2. 添…

天宇微纳芯片ic测试软件如何测试芯片上下电功能?

芯片的上电与下电功能测试是集成电路生产和研发过程中的关键环节,可以帮助企业确保产品的可靠性、整合性和兼容性,同时提高生产效率和产品质量。 因此在芯片的研发设计中,企业会对芯片的上下电有严格的要求,包括上下电的时序&…

飞腾主板显卡接eDP屏,显示花屏问题

故障现象: 开机过程中,在系统启动前无显示输出的阶段中。会有随机的白色竖条显示,位置不固定,且会抖动。 硬件环境: FT-1500A/16+显卡e8860; eDP屏京东方NV156FHM-N42; eDP屏数据(DP0+/-、DP1+/-、AUX)接口e8860直出; eDP屏背光接口控制BL_EN、BL_PWM由主板CPLD…

主要的经典模拟电路图 你都完懂了吗?

经典模拟电路图是电子学中非常重要的概念之一,在各种电子设备中,我们都可以看到这些电路图的身影。 一、差分放大电路,具有电路对称性的特点,此特点可以起到稳定工作点的作用,被广泛用干直接耦合电路和测量电路的输入级…

SSM02

SSM02 此时我们已经做好了登录模块接下来可以做一下学生管理系统的增删改查操作 首先&#xff0c;我们应当有一个登录成功后的主界面 在webapp下新建 1.main.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…

各种电机驱动原理

步进电机 步进电机参考资料 野火官方文档 步进电机驱动原理 上面参考文档中有的内容就不写了&#xff0c;写一下我自己的总结吧。 说明&#xff1a; 电机驱动器输入信号有电机转动方向信号DIR&#xff0c;电机转速信号PWM&#xff0c;电机使能信号EN&#xff1b;电机驱动器…