Как система должна получать данные из удаленного стороннего источника данных?

В удаленной системе поставщика есть данные, которые ежедневно требуются одной из наших внутренних систем. В настоящее время наша система ежедневно получает данные от системы поставщика, отправляющей CSV-файл через SFTP. Данные имеют размер ‹ 1 КБ.

Вместо этого мы рассматриваем возможность использования запроса через SFTP. Файл «должен» всегда быть готов не позднее определенного времени (5 ET). Таким образом, одна проблема с этим подходом может заключаться в том, что нашей системе, возможно, придется выполнить некоторый опрос, чтобы в конечном итоге получить файл.

Как система должна получать данные из удаленного стороннего источника данных? Поставщик также предоставляет веб-службу и службу подписки. Они также рассмотрят другие идеи для нас, чтобы получить данные.


person James    schedule 18.12.2013    source источник
comment
Вы не можете закрыть вопрос с открытым вознаграждением? Почему никогда? Этот вопрос может показаться слишком широким, а также требует ответов, основанных в первую очередь на мнениях.   -  person Andrew Clear    schedule 21.12.2013
comment
Как сказал Эндрю в комментарии выше, это вопрос, основанный на мнении, но если вы собираетесь извлекать данные из CSV, я бы посоветовал вам взглянуть на инструменты ETL. SSIS (службы интеграции) — поставляется с SQL Server Kettle — с открытым исходным кодом (etl-tools .info/en/pentaho/kettle-etl.htm) Зачем использовать инструмент ETL вместо его ручного кодирования: informationweek.com/software/information-management/? У вас может быть счетчик повторных попыток для вашей FTP-задачи (повторная попытка подключения) или у вас также может быть цикл, чтобы попытаться сделать x раз, прежде чем произойдет сбой.   -  person Adarsh Shah    schedule 21.12.2013
comment
Вы попросили альтернативы, не указав, какую именно проблему вы решаете. У вас уже есть какой-то рабочий метод, так что с ним не так? Вы также не объяснили, зачем вам нужен опрос, если файл должен быть готов через некоторое время: тогда что плохого в том, чтобы просто прийти после этого времени и вытащить его? Основной ответ на ваш вопрос: система должна получать данные из удаленного источника в соответствии с ее точными требованиями к идеальному процессу сбора данных или, по крайней мере, максимально приближенными к нему. Определение требований является индивидуальной задачей для каждого конкретного случая.   -  person Van Jone    schedule 26.12.2013
comment
Я бы сказал, что в таком сценарии есть непосредственное и явное преимущество в получении по сравнению с получением из-за того простого факта, что другая сторона должна будет вкладывать ресурсы в гарантию безотказной работы. Говоря с точки зрения операций, только это мотивирует вопрос в такой формулировке, независимо от других аспектов.   -  person ErikE    schedule 28.12.2013


Ответы (2)


Предполагая, что ваша система похожа на unix, а на другой стороне есть открытый SSH-сервер, я бы добавил открытый ключ пользователя, под которым работает ваше приложение, в файл author_keys на удаленной стороне. После этого ваше приложение сможет опросить наличие обновленного файла, запустив

ssh username_at_remote_end@ip_address_of_remote stat -C %Z path_to_file

Который будет выводить секунды после Unix Epoch последнего изменения файла (если он найден) или ошибку (ненулевой код выхода), если файл не найден.

Чтобы фактически получить файл (после проверки того, что отметка времени находится в течение последних 24 часов), я бы использовал

t=$(mktemp -d) && scp username_at_remote_end@ip_address_of_remote:path_to_file $t && echo $t

Который скопирует его во временный каталог под /tmp, доступный для чтения только пользователю, под которым работает ваше приложение, и вернет имя этой папки.

Все языки программирования поддерживают выполнение команд локально (в C — с помощью system(); в Java — с помощью Process; ...). Для простоты каждая команда будет добавлена ​​в файл сценария (скажем, poll.sh и retrieve.sh). Если удаленный конец изменится, вам нужно только обновить и протестировать сценарии. Существуют прямые интерфейсы к openssh, но, вероятно, проще передать всю эту работу bash через сценарии, как показано выше.

person tucuxi    schedule 27.12.2013
comment
+1 за простоту. В опросе csv через sftp нет сложной логики, я обычно делаю это через задание cron каждые x минут или в зависимости от того, какой интервал подходит для варианта использования. Можно добавить простую проверку, чтобы убедиться, что файл уже загружен. Очень низкое обслуживание по сравнению с SSIS и т. д., поскольку необходимые инструменты и логика просты в использовании и доступны непосредственно через оболочку. - person ErikE; 28.12.2013

ЕСЛИ у вас есть аналогичные требования для более чем одного случая, вы можете рассмотреть возможность использования сервера интеграции (промежуточного программного обеспечения) для реализации этого. Там вы можете создать триггер, который вызовет конкретное нажатие после 5 ET. Если это требуется только в одном случае, обратитесь к своему провайдеру за опцией веб-сервиса. Где вы можете вызвать его веб-сервис после 5ET один раз в день, отправив запрос мыла для данных, и он вернет ответ мыла, а не csv. Вы можете очень легко реализовать это в своей системе. Это будет более надежно и эффективно. У вас будет больше контроля над данными, транспортом и безопасностью.

person kingAm    schedule 27.12.2013