Hatchet是什么?
Hatchet取代了难以管理的传统队列或发布/订阅系统,让你能够设计可从故障中恢复的持久工作负载,并解决并发、公平性和速率限制等问题。无需管理自己的任务队列或发布/订阅系统,你可以使用Hatchet在一组工作节点之间分配函数,只需最少的配置或基础设施:
Hatchet的优势是什么?
-
⚡️ 超低延迟和高吞吐量调度: Hatchet基于低延迟队列构建,完美平衡了实时交互能力和关键任务所需的可靠性。
-
☮️ 并发、公平性和速率限制: 通过Hatchet内置的策略实现FIFO、LIFO、轮询和优先级队列,旨在以最少的配置规避常见的扩展陷阱。阅读文档 →
-
🔥🧯 设计上的弹性: 通过可自定义的重试策略和集成的错误处理,Hatchet确保你的操作能够从瞬时故障中迅速恢复。你可以将大型作业分解为小任务,以便在不重新运行工作的情况下完成运行。阅读文档 →
增强的可见性和控制:
- 可观察性。 所有运行都可完全搜索,让你能够快速识别问题。我们在运行中跟踪延迟、错误率或自定义指标。
- (实用的)持久执行。 重放事件并手动从工作流程的特定步骤恢复执行。
- Cron。 为函数运行设置周期性调度以执行。
- 一次性调度。 安排函数运行在未来的特定时间和日期执行。
- 峰值保护。 平滑流量峰值,只执行系统能够处理的内容。
- 增量流式处理。 订阅函数在后台工作节点中进行时的更新。
示例用例:
- 生成式AI的公平性: 不要让繁忙的用户压垮你的系统。Hatchet让你可以通过可配置的策略公平地将请求分配给工作节点。
- 文档索引的批处理: Hatchet可以处理大规模的文档、图像和其他数据的批处理,并在失败时从中间恢复作业。
- 多模态系统的工作流编排: Hatchet可以处理多模态输入和输出的编排,支持完整的DAG式执行。
- 基于事件处理的正确性: 响应外部事件或系统内部事件,并自动重放事件。
快速入门
Hatchet提供云版本和自托管版本。请参阅以下文档快速开始使用:
Hatchet通过Python、TypeScript和Go的开源SDK支持你的技术栈。要开始使用,请参阅以下特定语言的指南:
SDK仓库
如果在使用SDK时遇到任何问题,请在相应的仓库中提交问题:
与替代方案(Celery、BullMQ)相比如何?
为什么要构建另一个托管队列?我们想要构建一个具有完全事务性入队优势的产品——特别是对于依赖性的DAG式执行——并且我们坚信PostgreSQL比大多数替代方案(Celery使用Redis或RabbitMQ作为代理,BullMQ使用Redis)更好地解决了99.9%的队列用例。自从引入SKIP LOCKED
和最近PostgreSQL版本的里程碑(如主动-主动复制)以来,在多个区域横向扩展PostgreSQL并垂直扩展到每秒10k事务或更多变得越来越可行。许多队列(如BullMQ)建立在Redis之上,如果不小心的话,在遇到OOM时可能会发生数据丢失,而使用PostgreSQL可以避免整类问题。
我们还希望为应用程序开发人员提供一个更易于使用和调试的工具。很多时候,构建任务可观察性的负担落在了基础设施/平台团队身上(例如,要求基础设施团队根据导出的Prometheus指标为他们的任务构建Grafana视图)。我们正在将这种类型的可观察性直接构建到Hatchet中。
有关我们为什么构建Hatchet的更多信息,你可以查看我们关于Celery的文章这里。
问题
请通过GitHub问题提交你遇到的任何错误。但是,在提交功能请求之前,请先在Discord上联系我们 - 由于项目还处于早期阶段,我们希望在添加更复杂的功能之前先建立一个坚实的基础。
我想贡献
请查看这里的贡献文档,并请在Discord的#contributing频道告诉我们你有兴趣参与的工作。这将帮助我们塑造项目的方向,并使协作变得更加容易!