«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Надежный Python: создание надежных и длительных рабочих процессов стало проще

Надежный Python: создание надежных и длительных рабочих процессов стало проще

Опубликовано 5 ноября 2024 г.
Просматривать:768

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

В современной разработке программного обеспечения создание надежных рабочих процессов, которые соединяют API из различных сервисов и обрабатывают как синхронные, так и асинхронные события, является распространенной проблемой. Традиционный подход предполагает использование сочетания очередей, микросервисов и систем управления состоянием для создания масштабируемых приложений. Несмотря на свою эффективность, эта архитектура сопряжена со значительными накладными расходами: настройка и обслуживание инфраструктуры, такой как очереди сообщений, запуск серверов или лямбда-функций, управление состоянием баз данных и реализация сложных механизмов обработки ошибок.

Что, если бы существовал более простой и надежный способ управлять длительными рабочими процессами без хлопот по управлению всей этой инфраструктурой? В этом цель Durable Python: чтобы попробовать его, зарегистрируйтесь в бета-версии.

Проблема с наивными решениями для длительных процессов

Представьте, что вы хотите отслеживать запросы на включение (PR) в GitHub. Каждый раз, когда открывается новый PR, вы хотели бы создать специальный канал Slack для обсуждения и отправлять ежедневные напоминания до тех пор, пока PR не будет закрыт или объединен. Это звучит просто, поэтому вы можете подумать, что можете решить эту проблему с помощью базовой функции Python (вот базовая функция Python, созданная ChatGPT):

@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 мог гарантировать, что даже в случае сбоя процесса или перезапуска сервера он продолжится с того места, на котором остановился?

AutoKitcheh решает именно эту проблему с помощью Durable Python. Используя Durable Python, пользователь пишет код Python, в то время как система гарантирует, что в случае перезапуска процесса он продолжит работу с той же точки. Хотя существуют ограничения (например, длительное время простоя может быть не идеальным), в большинстве случаев это решение работает отлично.

Что предлагает Durable-Python

Durable-Python избавляет вас от необходимости управлять состоянием вручную, позволяя писать рабочий процесс как непрерывный поток, а не как управляемый событиями конечный автомат, сборка и отладка которого может оказаться сложной задачей. AutoKitteh, как инфраструктура, имеет встроенные очереди и интеграцию с внешними приложениями и API, что позволяет легко и быстро разрабатывать надежные рабочие процессы на Python.

Как это работает

Никакой магии — только надежная инженерия. AutoKitteh работает на базе Temporal, платформы для построения устойчивых рабочих процессов. Временное требует особого способа кодирования, включая понимание детерминизма, идемпотентности и других концепций для обеспечения надежности. AutoKitteh абстрагирует эти сложности, позволяя разработчикам писать стандартный код Python. Под капотом любая функция с побочными эффектами преобразуется во временную активность. Вам как разработчику не нужно беспокоиться об этих деталях — просто сосредоточьтесь на написании бизнес-логики.

Более подробную техническую информацию можно найти в документации AutoKitteh.

Есть ли цена?

Конечно, у каждой абстракции есть цена. Под капотом Durable Python записывает ход рабочего процесса, чтобы обеспечить восстановление после сбоя, что влечет за собой некоторые затраты на хранение и производительность.

Durable Python предназначен для оркестровки API, а не для создания приложений для обработки данных. Если вам нужны высокопроизводительные приложения, вам следует рассмотреть возможность создания собственного решения. Однако, если вы хотите быстро разработать надежные рабочие процессы с минимальными инвестициями в разработку и инфраструктуру, Durable Python может стать хорошим вариантом.

Реальные приложения

Durable Python можно применять в широком спектре рабочих процессов, особенно в областях, где надежность имеет решающее значение, например:

  • Инструментация API – создание внутренних надежных рабочих процессов.
  • Автоматизация DevOps: автоматизируйте конвейеры развертывания или автоматизацию проверки кода с гарантированным восстановлением после сбоев.
  • ChatOps: интеграция с чат-платформами для автоматизации уведомлений команды и управления рабочими процессами.
  • MLOps: обеспечьте бесперебойную работу длительных рабочих процессов машинного обучения, несмотря на перерывы.

Примеры рабочих процессов можно найти здесь.

Вывод: меньше кода, меньше хлопот

Концепция Durable Python, реализованная на базе AutoKitteh, позволяет разработчикам создавать, развертывать и управлять надежной автоматизацией рабочих процессов с минимальным количеством кода. Надежное выполнение и плавное восстановление выполняются «за кулисами», поэтому вы можете сосредоточиться на том, что действительно важно — на вашей бизнес-логике.

Хотя существует множество отличных инструментов для достижения долговечности (например, Temporal и Restate), Durable-Python обеспечивает быстрый, простой и экономичный способ достижения тех же результатов.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/haimzlato/durable-python-building-bullet-proof-long-running-workflows-made-simple-49h4?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3