Large file upload/download for web app

Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Large file upload/download for web app

Post by Сабина »

Пытаюсь суммировать best practices. С учетом того что у webapp есть frontend UI server, а именно Play
- UI code поддерживает какой нить drag and drop
- разбить файл на чанки
- посылать отдельно от бизнес транзакции. Например сначала идет POST с бизнес атрибутами, а потом файл качается чанками через вебсокеты
- в сокет посылать pipe delimited структуру, например fileURI| chunkID| Chunk Data
- чанки грузить параллельно, прикрутить логику которая при failure будет перегружать только свалившийся чанк
- после того как чанки закачаны с клиента на Play делается file assembly и потом тот же контроллер передает файл в file system или blob storage (cloud)
- файлы лучше хранить с URI as a unique ID, а не path etc Он же (uri) хранится в ДБ и используется для скачивания

Что то пропустила ?

Да, эта модель подразумевает что клиенты только заканчивают файлы и скачивают ничего не меняя.

Если редактирование файла возможно то тут масса новых вопросов как поддерживать change history etc. В смысле какие для этого есть best practices
https://www.youtube.com/watch?v=wOwblaKmyVw
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: Large file upload/download for web app

Post by Palych »

А что даёт параллельная закачка?
ekriv
Уже с Приветом
Posts: 5424
Joined: 19 Jan 2004 23:12
Location: Florida

Re: Large file upload/download for web app

Post by ekriv »

Сабина wrote:Пытаюсь суммировать best practices. С учетом того что у webapp есть frontend UI server, а именно Play
- UI code поддерживает какой нить drag and drop
- разбить файл на чанки
- посылать отдельно от бизнес транзакции. Например сначала идет POST с бизнес атрибутами, а потом файл качается чанками через вебсокеты
- в сокет посылать pipe delimited структуру, например fileURI| chunkID| Chunk Data
- чанки грузить параллельно, прикрутить логику которая при failure будет перегружать только свалившийся чанк
- после того как чанки закачаны с клиента на Play делается file assembly и потом тот же контроллер передает файл в file system или blob storage (cloud)
- файлы лучше хранить с URI as a unique ID, а не path etc Он же (uri) хранится в ДБ и используется для скачивания

Что то пропустила ?

Да, эта модель подразумевает что клиенты только заканчивают файлы и скачивают ничего не меняя.

Если редактирование файла возможно то тут масса новых вопросов как поддерживать change history etc. В смысле какие для этого есть best practices
А кто и как разбивает файл на чанки на клиенте?
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Large file upload/download for web app

Post by Boriskin »

Насколько я помню, и POST и GET при работе с файлами просто тупо работают с кусками по (offset & length), так что изобретать колесо с разбивкой на чанки явно ни к чему.
Тупизна как Энтропия. Неумолимо растет.
User avatar
SOUND
Уже с Приветом
Posts: 1044
Joined: 27 May 2002 19:01
Location: Boston

Re: Large file upload/download for web app

Post by SOUND »

Все колеса уже изобрели :)

https://github.com/flowjs/flow.js
A JavaScript library providing multiple simultaneous, stable, fault-tolerant and resumable/restartable file uploads via the HTML5 File API.
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Large file upload/download for web app

Post by helg »

Palych wrote:А что даёт параллельная закачка?
Скорость. Если бутылочное горлышко в пересылке - не одна труба, которую пересылаемый поток данных занимает целиком, а разделяемый канал, то параллельные сессии позволяют передать файл быстрее. Примерно как пять человек, занимающие очередь за колбасой, которую дают по полкило в руки, смогут наполнить чемодан быстрее, чем один человек.
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: Large file upload/download for web app

Post by Palych »

helg wrote:
Palych wrote:А что даёт параллельная закачка?
Скорость. Если бутылочное горлышко в пересылке - не одна труба, которую пересылаемый поток данных занимает целиком, а разделяемый канал, то параллельные сессии позволяют передать файл быстрее. Примерно как пять человек, занимающие очередь за колбасой, которую дают по полкило в руки, смогут наполнить чемодан быстрее, чем один человек.
Это реальные наблюдения/замеры или предположения?
Я давно за сетями не слежу - насколько сейчас разделяемые каналы распространены?
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Large file upload/download for web app

Post by Сабина »

Palych wrote:А что даёт параллельная закачка?
performance
https://www.youtube.com/watch?v=wOwblaKmyVw
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Large file upload/download for web app

Post by helg »

Palych wrote:Это реальные наблюдения/замеры или предположения?
Я давно за сетями не слежу - насколько сейчас разделяемые каналы распространены?
Весь Интернет - сплошь разделяемые каналы.

Сравните сами:
$ axel -n 1 http://....iso
$ axel -n 8 http://....iso

Второе быстрее.
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: Large file upload/download for web app

Post by Palych »

helg wrote:
Palych wrote:Это реальные наблюдения/замеры или предположения?
Я давно за сетями не слежу - насколько сейчас разделяемые каналы распространены?
Весь Интернет - сплошь разделяемые каналы.

Сравните сами:
$ axel -n 1 http://....iso
$ axel -n 8 http://....iso

Второе быстрее.
Не знал :oops:
Я думал что bottleneck в последней миле, а она обычно одноканальная...
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: Large file upload/download for web app

Post by Palych »

helg wrote: Сравните сами:
$ axel -n 1 http://....iso
$ axel -n 8 http://....iso

Второе быстрее.
Кстати, а как определять оптимальное значение -n ?
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Large file upload/download for web app

Post by helg »

Palych wrote:Кстати, а как определять оптимальное значение -n ?
Мы покупаем или продаём?
На сервере - не больше двух килограммов в одни руки соединений с одного адреса. А на клиенте - сколько жадность позволяет пока сервер не сдохнет и скорость закачки не сравняется со скоростью "последней мили".
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Large file upload/download for web app

Post by Сабина »

ekriv wrote:А кто и как разбивает файл на чанки на клиенте?
jQuery например. Я не совсем пойму вопросы :) . Это к тому что можно сделать лучше ?
https://www.youtube.com/watch?v=wOwblaKmyVw
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: Large file upload/download for web app

Post by Palych »

helg wrote:
Palych wrote:Кстати, а как определять оптимальное значение -n ?
Мы покупаем или продаём?
На сервере - не больше двух килограммов в одни руки соединений с одного адреса. А на клиенте - сколько жадность позволяет пока сервер не сдохнет и скорость закачки не сравняется со скоростью "последней мили".
А что на сервере отвечать жадинам?
Заставлять ждать или сразу отлуп давать?
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Large file upload/download for web app

Post by helg »

Palych wrote:А что на сервере отвечать жадинам?
Заставлять ждать или сразу отлуп давать?
Во-первых, не давать прямую ссылку, а грузить яваскриптом. Это фильтрует чайников, коих большинство. А трёхствольников лишать доступа на несколько минут.

Но это, конечно, для общедоступных серверов. Если клиент платит - любой каприз за его деньги.
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Large file upload/download for web app

Post by Сабина »

helg wrote:
Palych wrote:А что на сервере отвечать жадинам?
Заставлять ждать или сразу отлуп давать?
Во-первых, не давать прямую ссылку, а грузить яваскриптом. Это фильтрует чайников, коих большинство. А трёхствольников лишать доступа на несколько минут.

Но это, конечно, для общедоступных серверов. Если клиент платит - любой каприз за его деньги.
а еще есть wss :D
Ответ Палычу и по делу - надо ограничить max simultaneous connections per client
https://www.youtube.com/watch?v=wOwblaKmyVw
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: Large file upload/download for web app

Post by Palych »

Я всё-таки не верю что параллельный upload в условиях когда клиент и сервер в одних руках даст заметное ускорение в реальной жизни (в production) и оправдает накладные расходы.
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Large file upload/download for web app

Post by helg »

Palych wrote:Я всё-таки не верю что параллельный upload в условиях когда клиент и сервер в одних руках даст заметное ускорение в реальной жизни (в production) и оправдает накладные расходы.
Если они соединены не локалкой, а через Интернет-канал, то даст. К примеру, приложений для многоствольной заливки видео на тытруб есть в количестве.

Return to “Вопросы и новости IT”