Оптимальная передача данных
Добрый день, подскажите, как лучше сделать. Я новичок, и с такой задачей ранее не сталкивался.
Итак, дано 1. Сервер 1, который принимает запросы от некоего удаленного, неконтролируемого клиента. Запросы приходят в виде блока строк. Размер блока (количество строк в блоке) может быть различным. Клиент ожидает от Сервера 1 подтверждение приема блока данных. В случае успешного подтверждения передается новый блок, если есть, в случае ошибки блок передается повторно 2. Задача Сервера 1 передать эти данные дальше через API на Сервер 2. Второй сервер принимает данные построчно. Вопрос как лучше организовать передачу данных? Я рассуждаю следующим образом Вариант 1 Сервер 1 после приема данных разбивает из на строки и поочередно пропихивает через API на Сервер 2. Сервер 1 отвечает клиенту только после окончания передачи данных на Сервер 2. Недостаток: Если передача на сервер 2 будет медленной, то клиент не дождется ответа и будет передавать данные заново... Вариант 2 Сервер 1 записывает принятый блок в файл. Передача на сервер 2 осуществляется другим приложением/процессом, которое будет читать строки из файла и удалять их после успешной отправки. Недостаток: получается, что два процесса будут конкурировать на доступ к файлу. Я не уверен, что смогу правильно это разрулить. Буду благодарен, если подкините ссылочку, где про это можно почитать. Вариант 3 Сервер 1 пишет строки в БД, а потом другое приложение/процесс читает их из БД и помечает, как отправленные после отправки на Сервер 2. Недостаток: нужно поднимать БД для достаточно простого случая... очень хочется обойтись без этого. Возможно, если еще варианты, буду очень признателен, если поделитесь своим опытом и подскажете, как лучше все реализовать. |
а что с ответом клиенту в вар. 2 и 3?
если это делается сразу после записи в файл или БД, типа, "данные взяты в обработку", то ничего не мешает в первом варианте так же ответить, и заняться отправкой на сервер 2. Нодовский Event loop идеально заточен под такие взаимодействия |
Часовой пояс GMT +3, время: 09:47. |