返回首页
最新
我觉得关于如何思考的话题在未来会变得更加重要,尤其是在我们拥有人工智能的情况下,依赖软件的程度也在不断提升。因此,由于我在Hacker News上总能得到很棒的建议,我必须在这里询问一下。
大家好,我是来自 Hatchet 的亚历山大。我们正在构建一个开源平台,用于管理后台任务,底层数据库使用 Postgres。
大约一年前,我们推出了 Hatchet,这是一个基于 Postgres 的分布式任务队列,采用 100% MIT 许可证([链接](https://news.ycombinator.com/item?id=39643136))。我们从 HN 社区获得的反馈和反响非常热烈。在上线的第一个月,我们在平台上处理了大约 2 万个任务——如今,我们每分钟处理超过 2 万个任务(每月超过 10 亿个)。
如此快速的扩展是非常困难的——Hatchet 中的每个任务至少对应 5 个 Postgres 事务,我们在 Hatchet Cloud 实例上看到的任务峰值超过 5000 个/秒,这大约对应 25000 个事务/秒。事实证明,简单的 Postgres 队列利用 FOR UPDATE SKIP LOCKED 在这个规模下无法满足需求。在配置了 CloudSQL 提供的最大实例类型后,我们甚至讨论了可能将部分负载转移出 Postgres,转而使用一些流行的技术,比如 Clickhouse + Kafka。
但我们还是选择了继续使用 Postgres,并花了大约 6 个月的时间学习如何大规模操作 Postgres 数据库,同时在通勤和晚上阅读 Postgres 手册及其他资源[0]。我们坚持使用 Postgres 有两个原因:
1. 我们希望让 Hatchet 尽可能便携和易于管理,觉得在 Hatchet Cloud 上实现我们自己的存储引擎在某种程度上是不诚实的,最糟糕的情况是会使我们偏离开源社区的关注点。
2. 更重要的是,Postgres 是通用的,这使得它在某些类型的工作负载上既出色又难以扩展。这也是我们能够提供通用编排平台的原因——我们大量利用 Postgres 的特性,如事务、SKIP LOCKED、递归查询、触发器、COPY FROM 等等。
这就引出了今天的主题。我们宣布对 Hatchet 引擎进行全面重写——仍然基于 Postgres——同时推出我们的任务编排层,该层建立在我们底层队列之上。更具体地说,我们将推出:
1. 基于 DAG 的工作流,支持更广泛的条件,包括睡眠条件、基于事件的触发和基于父输出数据的条件执行[1]。
2. 持久执行——持久执行指的是函数通过缓存中间结果并在重试时自动重放这些结果的能力。我们称具备这种能力的函数为持久任务。我们还支持持久睡眠和持久事件,您可以在这里了解更多[2]。
3. 队列特性,如基于键的并发队列(用于实现公平排队)、速率限制、粘性分配和工作者亲和性。
4. 在我们测试的每个维度上都提高了性能,这归功于对 Hatchet 架构的六项改进:基于范围的时间序列表分区、基于哈希的任务事件分区(用于更新任务状态)、将监控表与队列分开、缓冲读写、将所有高流量表切换为使用身份列,以及积极使用 Postgres 触发器。
我们还移除了 RabbitMQ 作为自托管的必需依赖。
我们非常欢迎您提供任何反馈,并希望您有机会试用 Hatchet。
[0] [Postgres 文档](https://www.postgresql.org/docs/)
[1] [条件工作流文档](https://docs.hatchet.run/home/conditional-workflows)
[2] [持久执行文档](https://docs.hatchet.run/home/durable-execution)
嘿,朋友们,
我目前正在学习普通话,并且在寻找一种每天都期待练习阅读的方法。分级读物很快就会让我感到无聊,而普通书籍对于我的水平来说又太难了。
漫画和网络漫画是完美的格式:有趣、对话风格,并且包含俚语。但不幸的是,它们与传统的语言学习应用程序(如linq、language reactor、migaku等)不兼容,手动查找文本会严重干扰阅读体验。
所以我制作了一个小的Chrome扩展,它可以对漫画进行OCR识别,翻译内容,并在对话框上方叠加弹出窗口,以便更轻松地阅读。
我还制作了一个可以在Kindle浏览器中运行的版本,通过构建一个非常优化/有限的网页,避免了非常有限的Kindle浏览器崩溃的问题。
也许对这里的一些人会有用 :)
他们已经撤回了除Firefox之外的所有浏览器扩展和集成。这种行为明显是对用户体验的严重恶化和反竞争行为。Mozilla需要为这种行为在欧盟受到追责。