Page 1 of 1

使用 Rust 开发 Workers 应用程序

Posted: Tue Apr 22, 2025 8:49 am
by sakib40
我们通过在前端工作器 (Frontend Worker) 和序列器 (Sequencer) 之间添加一层额外的数据处理 (DO)(我们称之为“批处理器 (Batcher)”)来解决这些问题。前端工作器 (Frontend Worker) 对缓存键使用一致性哈希来确定将条目提交给哪个批处理器 (Batcher),而批处理器 (Batcher) 通过缓冲请求并将其分批发送,从而减少序列器的请求数量。批处理完成后,批处理器 (Batcher) 会将响应分发回提交请求的前端工作器 (Frontend Worker)。批处理器 (Batcher) 还会负责将更新写入重复数据删除缓存,从而进一步释放序列器的资源。

通过限制需要在单个 DO 中同步运行的关键代码块的范围,并充分利用 DO 的优势,在工作负载允许的情况下进行水平扩展,我们得以大幅提升应用程序性能。借助这一全新架构,CT 日志应用程序每秒可以处理高达 500 个提交 API 请求,以添加新的日志条目,同时保持一致的排序节奏,从而将每个请求的延迟保持在较低水平(通常为 1-2 秒)。

我很高兴参与这个项目的原因之一是,它让我有机会用 Rust 实现一个 Workers 应用程序,这是我以 奥地利电报号码数据 前从未从零开始做过的。虽然过程并非一帆风顺,但总的来说,我推荐这次体验。

Rust与 Cloudflare Workers 的绑定是一个开源项目,旨在将您所了解和喜爱的所有JavaScript API功能支持到 Rust 语言中。但是,在功能奇偶校验方面存在一些滞后。在处理这个项目时,我经常在开发人员文档中阅读有关某个 Workers 功能的信息,但却发现尚未 添加支持,或者仅部分支持Rust 绑定。​​我遇到了一些令人惊讶的陷阱(并非全是坏事,例如,尽管有此警告,tokio::sync::watch通道仍能无缝工作)。有关调试和分析Rust Workers 的文档也不清楚(例如,如何保留调试符号),但它确实有效!

需要明确的是,这些瑕疵是意料之中的!Workers 平台正在不断添加新功能,Rust 绑定落后也是理所当然的。随着越来越多的开发者依赖(并为其做出贡献,提示一下)Rust 绑定,开发者体验将会持续提升。