在现代软件开发中,创建强大的工作流程来连接来自各种服务的 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 能够保证即使进程崩溃或服务器重新启动,它也会从上次中断的地方继续执行怎么办?
AutoKitteh 通过 Durable Python 准确地解决了这一挑战。使用 Durable Python,用户编写 Python 代码,而系统确保如果进程重新启动,它会从同一点继续运行。虽然存在限制(例如,长时间停机可能并不理想),但对于大多数用例来说,此解决方案可以完美运行。
Durable-Python 使您无需手动管理状态,从而使您能够将工作流程编写为连续流,而不是事件驱动的状态机,而事件驱动的状态机在构建和调试方面可能具有挑战性。 AutoKitteh 作为基础设施,具有内置队列以及与外部应用程序和 API 的集成,可以轻松地在 Python 中快速开发强大的工作流程。
这并不涉及魔法——只是坚实的工程。 AutoKitteh 由 Temporal 提供支持,Temporal 是一个用于构建持久工作流程的框架。时间需要特定的编码方式,包括对确定性、幂等性和其他概念的理解,以确保可靠性。 AutoKitteh 抽象了这些复杂性,允许开发人员编写标准的 Python 代码。在幕后,任何具有副作用的函数都会转换为时间活动。作为开发人员,您不必担心这些细节 - 只需专注于编写业务逻辑。
有关更多技术细节,请参阅 AutoKitteh 文档。
当然,每一个抽象都有一个价格。在底层,Durable Python 会记录工作流程,以便在发生故障后进行恢复,这会产生一些存储和性能成本。
Durable Python 专为编排 API 而设计,而不是构建数据应用程序。如果您需要高性能应用程序,您应该考虑构建自定义解决方案。但是,如果您想以最少的开发和基础设施投资快速开发可靠的工作流程,Durable Python 可能是一个不错的选择。
耐用的Python可以应用于广泛的工作流程,特别是在可靠性至关重要的领域,例如:
可以在此处找到工作流程示例。
由 AutoKitteh 提供支持的耐用 Python 概念使开发人员能够使用最少的代码构建、部署和管理可靠的工作流程自动化。持久执行和无缝恢复在幕后处理,因此您可以专注于真正重要的事情 - 您的业务逻辑。
虽然有许多优秀的工具可以实现持久性(如 Temporal 和 Restate),但 Durable-Python 提供了一种快速、简单且经济高效的方法来实现相同的结果。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3