Как реализовать HTTP передачу больших двоичных файлов от генератора файлов на сервер (Java)? - PullRequest
4 голосов
/ 25 декабря 2011

Проще говоря, наша система состоит из сервера и агента.Агент генерирует огромный двоичный файл, который может потребоваться для передачи на сервер.

При условии:

  1. Система должна справиться с файлами до 1 ГБ, что, вероятно,в течение 2 лет вырастет до 10G
  2. Передача должна осуществляться через HTTP, поскольку другие порты могут быть закрыты.
  3. Это не система общего доступа к файлам - агенту просто нужно отправить файл вСервер.
  4. Агент и Сервер написаны на Java.
  5. Бинарный файл может содержать конфиденциальную информацию, поэтому передача должна быть безопасной.

Я ищу методы и библиотеки, которые помогут мне в передаче огромных файлов.Вот некоторые из известных мне тем:

  • Сжатие Какую из них выбрать?Мы не ограничиваемся gzip или deflate только потому, что они наиболее популярны для HTTP-трафика.Если есть какая-то необычная схема сжатия, которая дает лучшие результаты для нашей задачи - пусть будет так.
  • Разделение Очевидно, что файл необходимо разбить и передать в несколько параллельных сеансов.
  • Фон Передача огромного файла занимает много времени.Влияет ли это на решение, если оно вообще есть?
  • Безопасность Является ли HTTPS подходом?Или мы должны принять другой подход, учитывая объем данных?
  • в наличии Я полностью готов сам написать его (должно быть весело), ​​но я не могу избежать вопросасуществуют ли какие-либо готовые решения, удовлетворяющие моим требованиям.

Кто-нибудь сталкивался с этой проблемой в своих продуктах и ​​как с ней справлялись?

Редактировать 1

Некоторые могут усомниться в выборе HTTP в качестве протокола передачи.Дело в том, что Сервер и Агент могут быть удалены друг от друга, даже если они находятся в одной корпоративной сети.Мы уже сталкивались с многочисленными проблемами, связанными с тем, что клиенты оставляют открытыми только порты HTTP на узлах в своих корпоративных сетях.Это не оставляет нам большого выбора, но использует HTTP.Использование FTP - это хорошо, но его нужно будет туннелировать через HTTP - значит ли это, что у нас все еще есть все преимущества FTP, или это покалечит его до такой степени, что другие альтернативы будут более жизнеспособными?Я не знаю.

Редактировать 2

Исправление - HTTPS всегда открыт и иногда (но не всегда) HTTP также открыт.Но это все.

1 Ответ

3 голосов
/ 25 декабря 2011

Вы можете использовать любой протокол на порту 80. Использование HTTP - хороший выбор, но вам не нужно его использовать.

Сжатие Какой выбрать? Мы не ограничиваемся gzip или deflate только потому, что они наиболее популярны для HTTP-трафика. Если есть какая-то необычная схема сжатия, которая дает лучшие результаты для нашей задачи - пусть будет так.

Лучшее сжатие зависит от содержимого. Я бы использовал Deflator для простоты, однако BZIP2 может дать лучшие результаты (требуется библиотека)

Для вашего типа файла вы можете обнаружить, что сначала выполняется сжатие, специфичное для этого типа, что может уменьшить размер отправляемых данных.

Разделение Очевидно, что файл необходимо разделить и передать в несколько параллельных сеансов.

Это не очевидно для меня. Параллельная загрузка данных повышает производительность за счет увеличения доступной пропускной способности (т. Е. Вытеснения других пользователей с той же пропускной способностью). Это может быть нежелательным или даже бессмысленным (если других пользователей нет)

Фон Передача огромного файла занимает много времени. Влияет ли это на решение, если оно вообще есть?

Вам понадобится возможность перезапустить загрузку в любой момент.

Безопасность Является ли HTTPS подходом? Или мы должны принять другой подход, учитывая объем данных?

Я уверен, что это нормально, независимо от объема данных.

в готовом виде Я полностью готов написать его сам (должно быть весело), ​​но я не могу избежать вопроса, есть ли готовые решения, удовлетворяющие моим требованиям.

Я бы попробовал использовать существующие веб-серверы, чтобы проверить, подходят ли они к работе. Я был бы удивлен, если бы не было бесплатного веб-сервера, который бы делал все вышеперечисленное.

Вот выборка http://www.java -sources.net / open-source / веб-серверы

...