Это плохая идея использовать веб-API вместо сокета TCP для связи главного / подчиненного?
TL:DR; Существуют ли какие-либо недостатки / ловушки для использования RESTful API вместо соединения TCP/Socket для шаблона "главный-подчиненный"?
Я пишу веб-приложение, которое извлекает данные из стороннего API, вычисляет статистику (и многое другое) и представляет ее. Извлеченные данные хранятся в базе данных.
Я пишу это веб-приложение с NodeJS и AngularJS.
Таким образом, приложение будет выполнять 2 основных действия:
- Ответьте на HTTP-запросы от внешнего интерфейса
- Обновите базу данных. Это включает в себя: выборку данных, сохранение данных в базу данных и кэширование результатов некоторых сложных запросов каждые 5 минут в базе данных в памяти, такой как redis.
Я хочу разделить эти операции в двух приложениях. HTTP-сервер должен быть главным. Второе приложение - просто раб, из которого может быть создано как можно больше экземпляров.
Мастер будет реализовывать своего рода процессор задач, который просто распределяет задачи между простыми рабами. Раб очень тупой. Он может сообщить о своем состоянии (в режиме ожидания / занято и некоторых деталях, таких как текущая загрузка и т. Д.). Вы можете начать задачи на рабе. Мастер позаботится о задачах в очереди и так далее.
Я предполагаю, что это общий шаблон сервера / агента.
Итак, я начал внедрять TCP-сервер и клиент, но мне кажется, что это требует много времени. Немного похоже на изобретение колеса. Поэтому я подумал, что я мог бы использовать HTTP-сервер на моем клиенте, который имеет две конечные точки, такие как
[GET] /status
[POST] /execute/:task
Я на правильном пути здесь?
1 ответ
TL;DR; Есть недостатки в развертывании собственного REST API для архитектуры "ведущий-ведомый".
Шаблон вашего сервера / агента обычно называют микросервисами.
Использование собственного REST API может работать, но, вероятно, не оптимально. Работа с семантикой доставки (например, максимум один раз против хотя бы один раз), временные сбои, опрос и т. Д., Скорее всего, вызовет много боли, прежде чем вы все сделаете правильно.
Существуют библиотеки / службы для обеспечения различных уровней удобства: