随着Rust成为构建底层基础设施事实上的语言,把不太知名的项目放在聚光灯下是很重要的,这些项目将为我们的数字世界提供快速、安全和可靠的构建块。
Neon
Neon通过让PostgreSQL数据平台(是的,PostgreSQL不仅仅是一个数据库)使用兼容s3的存储作为后端,重新定义了数据库世界。
虽然它使Postgres的单片架构变得复杂,但它也解决了许多问题:read-replicas现在使用单一的数据源而不是容易出错的复制,我们不再需要使用缓慢而昂贵的网络存储(如AWS的EBS)来获得高可用性的数据库,数据库的升级/降级现在只是生成一个新的容器/microVM的问题,不需要做任何复制。
Datafusion
在过去的数据系统中,我们看到了不同层的分离:查询引擎、内存表示和存储。Datafusion是一个新的高性能和可扩展的查询引擎,它允许数据工程师使用Rust/Python的高级接口直接查询数据源,或者使用它作为查询层来构建数据系统,以构建和优化查询任务。它已经支持了许多令人印象深刻的项目,如InfluxDB、GreptimeDB和paradeDB。
图片
例如,你可以从任何对象存储/ HTTP服务器中查询CSV或parquet文件,只需几行代码:
use datafusion::prelude::*;
use object_store::http::HttpBuilder;
use std::sync::Arc;
use url::Url;
#[tokio::main]
async fn main() -> Result<()> {
let ctx = SessionContext::new();
let base_url = Url::parse("https://github.com").unwrap();
let http_store = HttpBuilder::new()
.with_url(base_url.clone())
.build()
.unwrap();
ctx.register_object_store(&base_url, Arc::new(http_store));
ctx.register_csv(
"aggregate_test_100",
"https://github.com/apache/arrow-testing/raw/master/data/csv/aggregate_test_100.csv",
CsvReadOptions::new(),
)
.await?;
let df = ctx
.sql("SELECT c1,c2,c3 FROM aggregate_test_100 LIMIT 5")
.await?;
df.show().await?;
Ok(())
}
PGRX
正如我们在Neon中看到的,PostgresSQL不再是一个简单的数据库了。它已经成为一个“数据内核”,管理如何存储和查询数据,就像Linux是一个“计算内核”,管理进程和资源一样。因此,开发人员不满足于用c语言构建扩展是很自然的。有了pgrx,问题就解决了,我们现在可以用Rust构建快速、安全、可靠的Postgres扩展。
AWS-LC-RS
根据一项加密库漏洞的实证研究,加密库中37.2%的漏洞是内存安全问题,而只有27.2%是加密问题。现在是时候不再把C作为实现加密库的实际语言了。
由于Rust的高级特性与底层控制,没有垃圾收集器,可移植性和易于嵌入,Rust是我们取代当今最常用的加密库的最佳选择:OpenSSL, BoringSSL和libsodium,它们都是用C编写的。
AWS-LC-RS是AWS的libcrypto的包装器,libcrypto是由AWS密码学团队为AWS及其客户维护的通用加密库。它支持大多数平台(Linux、Windows、macOS、Android)和最常见的体系结构(x86-64、aarch64)。
AWS-LC-RS非常快,拥有你需要的所有原语,有一个很好的API,并为最苛刻的行业提供fips验证模式。
Rustls
TLS协议无处不在!无论你是在网页浏览器、电子邮件客户端还是移动应用程序中阅读,至少有六个TLS连接为你提供这些内容。最常用的库(OpenSSL和BoringSSL)是用C编写的,这导致了许多与内存相关的问题。不幸的是,它也是一个相当复杂的协议,因此构建一个新的库需要大量的努力。
Rustls是可用于生产的TLS在Rust中的实现,比它的C对应物更快更安全。它的强大之处在于它不局限于Rust,它也可以在任何带有rustls-ffi的语言中使用,所以可以期待其他语言(如C、C++、Python和Ruby)的项目都能采用它。