Показать сообщение отдельно
  #1 (permalink)  
Старый 30.04.2020, 08:11
Новичок на форуме
Отправить личное сообщение для Aido Посмотреть профиль Найти все сообщения от Aido
 
Регистрация: 30.04.2020
Сообщений: 1

Оптимальная передача данных
Добрый день, подскажите, как лучше сделать. Я новичок, и с такой задачей ранее не сталкивался.

Итак, дано
1. Сервер 1, который принимает запросы от некоего удаленного, неконтролируемого клиента. Запросы приходят в виде блока строк. Размер блока (количество строк в блоке) может быть различным. Клиент ожидает от Сервера 1 подтверждение приема блока данных. В случае успешного подтверждения передается новый блок, если есть, в случае ошибки блок передается повторно
2. Задача Сервера 1 передать эти данные дальше через API на Сервер 2.
Второй сервер принимает данные построчно.

Вопрос как лучше организовать передачу данных? Я рассуждаю следующим образом
Вариант 1
Сервер 1 после приема данных разбивает из на строки и поочередно пропихивает через API на Сервер 2. Сервер 1 отвечает клиенту только после окончания передачи данных на Сервер 2.
Недостаток: Если передача на сервер 2 будет медленной, то клиент не дождется ответа и будет передавать данные заново...

Вариант 2
Сервер 1 записывает принятый блок в файл. Передача на сервер 2 осуществляется другим приложением/процессом, которое будет читать строки из файла и удалять их после успешной отправки.
Недостаток: получается, что два процесса будут конкурировать на доступ к файлу. Я не уверен, что смогу правильно это разрулить. Буду благодарен, если подкините ссылочку, где про это можно почитать.

Вариант 3
Сервер 1 пишет строки в БД, а потом другое приложение/процесс читает их из БД и помечает, как отправленные после отправки на Сервер 2.
Недостаток: нужно поднимать БД для достаточно простого случая... очень хочется обойтись без этого.

Возможно, если еще варианты, буду очень признателен, если поделитесь своим опытом и подскажете, как лучше все реализовать.
Ответить с цитированием