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