#tower-service #tower-middleware #actor #messages #create #async #task

塔-actor

通过向actor发送消息创建一个 Servicetower 中间件

1个不稳定版本

0.1.0 2023年3月27日

异步 中排名第 974

Download history 442/week @ 2024-03-14 788/week @ 2024-03-21 893/week @ 2024-03-28 1700/week @ 2024-04-04 1714/week @ 2024-04-11 517/week @ 2024-04-18 767/week @ 2024-04-25 370/week @ 2024-05-02 434/week @ 2024-05-09 231/week @ 2024-05-16 455/week @ 2024-05-23 464/week @ 2024-05-30 460/week @ 2024-06-06 460/week @ 2024-06-13 322/week @ 2024-06-20 266/week @ 2024-06-27

每月下载量 1,579

MIT/Apache

13KB
238

由异步actor支持的 tower::Service

tower::Service trait 非常灵活,允许编写各种可组合的中间件。然而,现有中间件中存在一个缺口,即在以请求/响应为导向的 Service 接口和类似actor的状态actor处理接收消息队列的模型之间进行桥接。

Tower使用actor模型,通过将 Service 放入一个从 mpsc 拉取请求消息的工作任务中,并以 Buffer 处理程序的形式来调解对共享 Service 的访问。这几乎是我们想要的,除了 Buffer 只能包装一个 Service 实现,而 Service trait 并非我们想要的:虽然 Service trait 的 call 方法允许通过 &mut self)进行 同步 状态修改,但它与 异步 状态修改不太兼容(因为所有异步工作都必须在响应future中进行,而响应future无法访问 Service 状态,除非进行额外的共享和同步设置)。

因此,在Penumbra的 pd 中,我们最终将 Buffer 中间件进行了供应商和分叉,并使用分叉代码来包装我们为 tower-abci 提供的共识和mempool服务的硬编码工作线程。为了使其更通用,我们将它提取到这个crate中。

依赖关系

~4–11MB
~109K SLoC