1 个不稳定版本

0.1.0 2024年3月20日

#393并发

MIT 许可证

11KB
124

摘要

job_orch 库为可以异步、事件驱动方式编排的作业提供了抽象。

核心概念

摘要

  • 作业:实现 Run 特质的计算单元。
  • 处理器:接收作业请求、执行作业并发布作业响应的异步进程或线程。
  • 请求发送者:通道的发送端,其他线程或进程使用该通道向处理器发送作业请求。
  • 响应接收者:通道的接收端,其他线程或进程使用该通道从处理器等待作业响应。

作业

作业是一个实现 Run 特质的计算单元。当作业运行时,它可以访问一个输入 Request 和一些可变的 Resources,例如数据库或外部服务。当作业完成运行时,它会产生一个 Response

作业的定义应该是独立的,不应依赖于作业在哪里以及如何执行。

处理器

尽管使用 Run 特质定义作业的目的是独立的,不应依赖于作业在哪里以及如何执行,但本库的目的是提供围绕异步和事件驱动方式运行作业的有用抽象。

通常,我们期望本库的用户将希望以单独的线程或进程运行作业,这些线程或进程监听请求,并在完成时异步发出响应。然后,可以将这些单独作业的输入和输出以事件驱动的方式连接起来。

我们将这些作业处理线程或进程之一称为处理器。处理器实现 Processor 特质,每个 Processor 都关联着一个特定的 Run 特质实现,一个发送请求到处理器的通道,以及一个从处理器发送响应的通道。每个 Processor 实现一个 run 方法,在该方法中,处理器应在请求通道上等待请求,然后将响应广播到响应通道。处理器还可以返回请求通道发送端和响应通道接收端的实例,以便多个客户端可以向作业处理器发送请求并等待响应。

请求发送者

《MpSend`》特质是对“发送者”,即多生产者通道的发送端的抽象。这个特质有一个`send`方法,当调用该方法时,应该在通道中将请求发送到工作处理器。以下是一些这个特质的示例实现:

  • 内存通道的发送端
  • 一个客户端,将请求转发到AWS SQS队列
  • 一个模拟,用于在单元测试中记录请求以供检查

响应接收者

《McReceive`》特质是对“接收者”,即多消费者(即广播)通道的接收端的抽象。这个特质有一个`receive`方法,当调用该方法时,应该等待从工作处理器沿通道发出响应。以下是一些这个特质的示例实现:

  • 用于广播响应的内存通道的接收端
  • 一个客户端,轮询AWS SQS队列以获取响应
  • 一个模拟,记录接收响应的调用以供单元测试检查

缓存

一个工作可以实现《GetCache`》特质。这个特质提供了一个`get_cache`方法,它接受一个请求并可选地返回一个缓存的响应。通过在工作上实现这个特质,我们可以表示可能可以检索缓存的响应,从而避免执行工作`run`方法的昂贵操作。

依赖

~2.7–10MB
~77K SLoC