Я работаю над возможной архитектурой проблемы. В максимально возможном числе проблема заключается в следующем: мне нужно создать систему, которая позволяет клиентам подключаться с помощью HTTP/REST для запуска длительных процессов. Каждый процесс создает постоянное соединение с сторонним сервером и записывает полученные данные в очередь. Каждый процесс будет завершен только в том случае, если сторонний сервер закрывает соединение или будет получен другой запрос HTTP/REST, указывающий, что он должен быть завершен.Архитектура многопоточного приложения с интерфейсом REST
Ограничения и фон:
- Клиенты должны иметь возможность подключиться с помощью HTTP/REST
- Система должна быть написана на Python
Я на C парень ниже уровня (с достаточным опытом Python, чтобы чувствовать себя компетентным), но пытаюсь обернуть голову вокруг фреймворков Python, доступных для упрощения. Моя кишка - прыгать в сорняки, и я знаю, реализую ли это это, как я думаю, я мог бы написать это на C. Не хочу этого. Я хочу использовать как можно больше фреймворков и библиотек для Python. Производительность не является главным приоритетом.
Подходы Я рассмотрел:
При этом исследование, я наткнулся на Twisted, которые могут быть целесообразными, и, кажется, имеет смысл для меня (думать об этом как демон). Я предполагаю, что конечным продуктом будет приложение Twisted, которое предоставляет интерфейс REST, отправляет новые потоки, подключающиеся к сторонней службе для каждого полученного запроса клиента, и будет управлять собственным пулом потоков. Я знаком с потоками, хотя, по общему признанию, с ними еще ничего не сделал в Python. Вкратце, Twistedlooks very cool, хотя, в конце концов, мне стало интересно, не слишком ли я это преувеличиваю.
Второй подход я считал использует сельдерей и колба и просто позволить сельдерея обрабатывать все диспетчеризацию, управление потоками и т.д. Я нашел эту статью, показывающую Celery and Flask играть хорошо вместе. Это похоже на гораздо более простой подход.
После написания этого, я склоняюсь к второму варианты использования сельдерея и колбы, хотя я не знаю много о сельдерее, поэтому ищу любые советы вы могли бы иметь, а также другие возможные архитектуры что я не рассматриваю. Я действительно ценю это и благодарю вас заранее.
Для модераторов: Что?Хотя я понимаю, что такие основанные на мнениях вопросы, как «Какой язык лучше C# или Java?» или «Где я должен положить фигурные скобки?» не имеют места в переполнении стека, я очень категорически не согласен с идеей этого вопроса, который задает разумный вопрос о архитектуре программного обеспечения, вписывается в категорию вопросов, основанных на мнениях. –