Giter Site home page Giter Site logo

Comments (1)

ongrid avatar ongrid commented on June 12, 2024

Здравствуйте. У нас есть опыт реализации асинхронной обработки фоновых задач. Готовы помочь с проектированием и реализацией. Предварительно набросал несколько идей.

Принцип следующий:

  1. Методы, обработка которых занимает длительное время, потребляет много ресурсов, блокирует IO или GIL, выносится в отдельные от сервера (web-сервера, а точнее *SGI сервера a-la flask или aiohttp) процессы "воркеры".
  2. Процессы могут быть размещены в т.ч. на другой инфраструктуре чем сам вебсервис (другие VM на одном хосте или даже других аппаратных хостах). Последнее похоже на ваш случай, т.к., как я понял, используется оффлоад на CUDA GPU.

На чем мы делали такое:

  1. Request/Reply via REST. Вебсервис (flask) отправляет задачу в воркеры (aiohttp) по REST, воркер присваивает ей номер и синхронно возвращает id. Flask записывает id в локальную модель. Микросервис по готовности задачи возвращает результат в виде встречного запроса во flask по REST (webhook). Преимущества: простота, простой инструментарий. Похожие подходы разработки бэкенда и микросервисов.
  2. Celery. Процесс, который обрабатывает фоновые задачи. Применяется, как правило, в комбинациии с Django. В качестве транспорта используется RabbitMQ. Был бы у вас Django, имело бы смысл начать с него. В других стэках преимуществ не вижу, можно применять п. 3.
  3. Pika, Rabbitmq, Asyncio - микросервис-воркер реализуется на pure python, транспорт -AMQP (RabbitMQ). Инициатор (условный flask) отправляет задачу в очередь. Микросервисы берут сообщения из этой очереди work queues pattern. Обрабатывают и складывают результат в другую очередь, которую вычитывает инициатор. Преимущества: предельно высокая масштабируемость во всех измерениях (заложена легкая масштабируемость, миграция на другую очередь, например облачный сервис AWS, GCP тоже делается несложным рефакторингом). Недостатки: специфические процессы разработки и тестирования. Удобно применять в очень больших проектах, где за каждый из микроосервисов отвечает отдельная команда. В вашем случае - это overkill.

Я бы предварительно мог рекомендовать начать с варианта 1.

PS:
Frontend (UI) - частный случай вопроса достижениия асинхронности. Развязка делается путем осуществления асинхронных вызовов к вэб бэкенду (принцип называется SPA. Ну и частный случай, вы упоминали - PWA). Протокол общения фронтенда и бэкенда можно использовать тот же самый, что и описан в п.1 выше - REST. В т.ч. можно в некотором масштабе использовать его же и для уведомлений, инициированных сервером (через REST long polling).

from angelinareader.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.