耐用的 Python:构建防弹的长期运行工作流程,变得简单

WBOY
发布: 2024-09-06 06:01:31
原创
1005 人浏览过

Durable Python: Building Bullet-Proof Long-Running Workflows, Made Simple

在现代软件开发中,创建强大的工作流程来连接来自各种服务的 API 并处理同步和异步事件是一个常见的挑战。传统方法涉及使用队列、微服务和状态管理系统的组合来构建可扩展的应用程序。虽然有效,但这种架构带来了巨大的开销:设置和维护消息队列等基础设施、运行服务器或 lambda 函数、管理数据库中的状态以及实现复杂的错误处理机制。

如果有一种更简单、更可靠的方法来处理长时间运行的工作流程,而无需管理所有这些基础设施的麻烦,该怎么办?这就是 Durable Python 的目标,要尝试它,请注册 Beta。

长期运行流程的朴素解决方案的问题

假设您想要监控 GitHub 中的拉取请求 (PR)。每次打开新的 PR 时,您都希望创建一个专用的 Slack 频道进行讨论并发送每日提醒,直到 PR 关闭或合并。这听起来很简单,所以您可能认为可以使用基本的 Python 函数来解决它(这是 ChatGPT 生成的基本 Python 函数):

@app.route('/webhook', methods=['POST'])
def github_webhook():
    data = request.json
    if 'pull_request' in data and data['action'] == 'opened':
        pr_number = data['pull_request']['number']
        pr_url = data['pull_request']['html_url']
        # Create a new Slack channel for the PR
        channel_id = create_slack_channel(pr_number)
        send_slack_notification(channel_id, pr_number, pr_url)
        # Periodically check the PR status and send reminders until it's closed or merged
        while True:
            time.sleep(3600)  # Wait for 1 hour before checking the status again
            pr_status = check_pr_status(pr_number)
            if pr_status == 'open':
                send_slack_notification(channel_id, pr_number, pr_url)
            else:
                break
    return jsonify({'status': 'ok'})
登录后复制

这段代码似乎可以处理任务,但它只适合“快乐流程”场景。在实际应用中,这种简单的方法是不够的。 while 循环依赖于连续的服务器正常运行时间,但这是无法保证的。进程可能会崩溃,服务器可能会重新启动,突然间,您的工作流程就会中断。

实际解决方案:事件驱动的应用程序

更可靠的方法涉及构建事件驱动的应用程序。在这里,您将使用队列来侦听 GitHub 事件,使用 cron 作业来发送提醒,使用数据库来存储 PR 和通道状态,以及使用函数来处理这些事件。通常,此设置在云基础设施上运行,利用 AWS Lambda 等服务进行部署和执行。

虽然这种方法可行且稳健,但它也需要大量的设置、维护和专业知识。管理基础设施、确保正常运行时间和处理错误状态需要大量资源和熟练的团队。

输入耐用的 Python:简单性与可靠性的结合

如果您可以将简单的 Python 代码与异步设计的可靠性结合起来会怎么样?如果 Python 能够保证即使进程崩溃或服务器重新启动,它也会从上次中断的地方继续执行,会怎么样?

AutoKitteh 通过 Durable Python 恰恰解决了这一挑战。使用 Durable Python,用户编写 Python 代码,而系统确保如果进程重新启动,它会从同一点继续运行。虽然存在限制(例如,长时间停机可能并不理想),但对于大多数用例,此解决方案都可以完美运行。

Durable-Python 提供什么

Durable-Python 使您无需手动管理状态,从而使您能够将工作流程编写为连续流,而不是事件驱动的状态机,而事件驱动的状态机在构建和调试方面可能具有挑战性。 AutoKitteh 作为基础设施,具有内置队列以及与外部应用程序和 API 的集成,可以轻松地在 Python 中快速开发强大的工作流程。

它是如何运作的

这并不涉及任何魔法——只是坚实的工程。 AutoKitteh 由 Temporal 提供支持,Temporal 是一个用于构建持久工作流程的框架。时态需要特定的编码方式,包括对确定性、幂等性和其他概念的理解,以确保可靠性。 AutoKitteh 抽象了这些复杂性,允许开发人员编写标准的 Python 代码。在幕后,任何具有副作用的函数都会转换为时间活动。作为开发者,您不必担心这些细节——只需专注于编写业务逻辑即可。

更多技术细节,请参阅 AutoKitteh 文档。

有费用吗?

当然,每一个抽象都有一个价格。在底层,Durable Python 会记录工作流程,以便在发生故障后进行恢复,这会产生一些存储和性能成本。

Durable Python 专为编排 API 而设计,而不是构建数据应用程序。如果您需要高性能应用程序,您应该考虑构建自定义解决方案。但是,如果您想以最少的开发和基础设施投资快速开发可靠的工作流程,Durable Python 可能是一个不错的选择。

实际应用

耐用的Python可以应用于广泛的工作流程,特别是在可靠性至关重要的领域,例如:

  • API 编排 - 构建内部可靠的工作流程。
  • DevOps 自动化:自动化部署管道或代码审查自动化,并保证从故障中恢复。
  • ChatOps:与聊天平台集成以自动化团队通知并管理工作流程。
  • MLOps:确保长时间运行的机器学习工作流程在中断的情况下仍能无缝继续。

可以在此处找到工作流程示例。

结论:更少的代码,更少的麻烦

由 AutoKitteh 提供支持的持久 Python 概念,使开发人员能够使用最少的代码构建、部署和管理可靠的工作流程自动化。持久执行和无缝恢复在幕后处理,因此您可以专注于真正重要的事情 - 您的业务逻辑。

虽然有许多优秀的工具可以实现持久性(例如 Temporal 和 Restate),但 Durable-Python 提供了一种快速、简单且经济高效的方法来实现相同的结果。

以上是耐用的 Python:构建防弹的长期运行工作流程,变得简单的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!