使用 Rust 开发 Workers 应用程序
Posted: Tue Apr 22, 2025 8:49 am
我们通过在前端工作器 (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 绑定,开发者体验将会持续提升。
通过限制需要在单个 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 绑定,开发者体验将会持续提升。