Как една система трябва да получава данни от отдалечен източник на данни на трета страна?

Отдалечената система на доставчик има данни, от които една от нашите вътрешни системи се нуждае ежедневно. Понастоящем нашата система получава данните ежедневно чрез системата на доставчика, изпращайки CSV файл през SFTP. Данните са с размер ‹ 1KB.

Обмисляме да използваме изтегляне чрез SFTP вместо това. Файлът "трябва" винаги да е готов не по-късно от определено време (5 ET). Така че, един проблем с този подход може да бъде, че нашата система може да трябва да направи някои анкети, за да получи в крайна сметка файла.

Как една система трябва да получава данни от отдалечен източник на данни на трета страна? Доставчикът също така предоставя уеб услуга и услуга за абонаментни канали. Те също така ще разгледат други идеи, за да получим данните.


person James    schedule 18.12.2013    source източник
comment
Не можете да затворите въпрос с отворена награда? Защо никога не? Изглежда, че този въпрос е твърде широк и също така изисква предимно отговори, основани на мнение.   -  person Andrew Clear    schedule 21.12.2013
comment
Както каза Андрю в коментара по-горе, това е въпрос, основан на мнение, но ако изтеглите данни от CSV, бих ви предложил да разгледате ETL инструментите. SSIS (Integration Services) – Предлага се с 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 сървър, бих добавил публичния ключ на потребителя, под който работи вашето приложение, към файла authorized_keys в отдалечената страна. След това вашето приложение ще може да попита за съществуването на актуализиран файл чрез стартиране

ssh username_at_remote_end@ip_address_of_remote stat -C %Z path_to_file

Което ще изведе секундите след unix епохата на последната промяна на файла (ако е намерена) или грешка (ненулев изходен код), ако файлът не е намерен.

За действително извличане на файла (след като проверих дали клеймото за време е в рамките на последните 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