Large file upload/download for web app
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Large file upload/download for web app
Пытаюсь суммировать 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
- 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
-
- Уже с Приветом
- Posts: 13684
- Joined: 16 Jan 2001 10:01
Re: Large file upload/download for web app
А что даёт параллельная закачка?
-
- Уже с Приветом
- Posts: 5424
- Joined: 19 Jan 2004 23:12
- Location: Florida
Re: Large file upload/download for web app
А кто и как разбивает файл на чанки на клиенте?Сабина 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
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Large file upload/download for web app
Насколько я помню, и POST и GET при работе с файлами просто тупо работают с кусками по (offset & length), так что изобретать колесо с разбивкой на чанки явно ни к чему.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 1044
- Joined: 27 May 2002 19:01
- Location: Boston
Re: Large file upload/download for web app
Все колеса уже изобрели
https://github.com/flowjs/flow.js
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.
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Large file upload/download for web app
Скорость. Если бутылочное горлышко в пересылке - не одна труба, которую пересылаемый поток данных занимает целиком, а разделяемый канал, то параллельные сессии позволяют передать файл быстрее. Примерно как пять человек, занимающие очередь за колбасой, которую дают по полкило в руки, смогут наполнить чемодан быстрее, чем один человек.Palych wrote:А что даёт параллельная закачка?
-
- Уже с Приветом
- Posts: 13684
- Joined: 16 Jan 2001 10:01
Re: Large file upload/download for web app
Это реальные наблюдения/замеры или предположения?helg wrote:Скорость. Если бутылочное горлышко в пересылке - не одна труба, которую пересылаемый поток данных занимает целиком, а разделяемый канал, то параллельные сессии позволяют передать файл быстрее. Примерно как пять человек, занимающие очередь за колбасой, которую дают по полкило в руки, смогут наполнить чемодан быстрее, чем один человек.Palych wrote:А что даёт параллельная закачка?
Я давно за сетями не слежу - насколько сейчас разделяемые каналы распространены?
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Large file upload/download for web app
performancePalych wrote:А что даёт параллельная закачка?
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Large file upload/download for web app
Весь Интернет - сплошь разделяемые каналы.Palych wrote:Это реальные наблюдения/замеры или предположения?
Я давно за сетями не слежу - насколько сейчас разделяемые каналы распространены?
Сравните сами:
$ axel -n 1 http://....iso
$ axel -n 8 http://....iso
Второе быстрее.
-
- Уже с Приветом
- Posts: 13684
- Joined: 16 Jan 2001 10:01
Re: Large file upload/download for web app
Не зналhelg wrote:Весь Интернет - сплошь разделяемые каналы.Palych wrote:Это реальные наблюдения/замеры или предположения?
Я давно за сетями не слежу - насколько сейчас разделяемые каналы распространены?
Сравните сами:
$ axel -n 1 http://....iso
$ axel -n 8 http://....iso
Второе быстрее.
Я думал что bottleneck в последней миле, а она обычно одноканальная...
-
- Уже с Приветом
- Posts: 13684
- Joined: 16 Jan 2001 10:01
Re: Large file upload/download for web app
Кстати, а как определять оптимальное значение -n ?helg wrote: Сравните сами:
$ axel -n 1 http://....iso
$ axel -n 8 http://....iso
Второе быстрее.
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Large file upload/download for web app
Мы покупаем или продаём?Palych wrote:Кстати, а как определять оптимальное значение -n ?
На сервере - не больше двух килограммов в одни руки соединений с одного адреса. А на клиенте - сколько жадность позволяет пока сервер не сдохнет и скорость закачки не сравняется со скоростью "последней мили".
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Large file upload/download for web app
jQuery например. Я не совсем пойму вопросы . Это к тому что можно сделать лучше ?ekriv wrote:А кто и как разбивает файл на чанки на клиенте?
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 13684
- Joined: 16 Jan 2001 10:01
Re: Large file upload/download for web app
А что на сервере отвечать жадинам?helg wrote:Мы покупаем или продаём?Palych wrote:Кстати, а как определять оптимальное значение -n ?
На сервере - не больше двух килограммов в одни руки соединений с одного адреса. А на клиенте - сколько жадность позволяет пока сервер не сдохнет и скорость закачки не сравняется со скоростью "последней мили".
Заставлять ждать или сразу отлуп давать?
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Large file upload/download for web app
Во-первых, не давать прямую ссылку, а грузить яваскриптом. Это фильтрует чайников, коих большинство. А трёхствольников лишать доступа на несколько минут.Palych wrote:А что на сервере отвечать жадинам?
Заставлять ждать или сразу отлуп давать?
Но это, конечно, для общедоступных серверов. Если клиент платит - любой каприз за его деньги.
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Large file upload/download for web app
а еще есть wsshelg wrote:Во-первых, не давать прямую ссылку, а грузить яваскриптом. Это фильтрует чайников, коих большинство. А трёхствольников лишать доступа на несколько минут.Palych wrote:А что на сервере отвечать жадинам?
Заставлять ждать или сразу отлуп давать?
Но это, конечно, для общедоступных серверов. Если клиент платит - любой каприз за его деньги.
Ответ Палычу и по делу - надо ограничить max simultaneous connections per client
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 13684
- Joined: 16 Jan 2001 10:01
Re: Large file upload/download for web app
Я всё-таки не верю что параллельный upload в условиях когда клиент и сервер в одних руках даст заметное ускорение в реальной жизни (в production) и оправдает накладные расходы.
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Large file upload/download for web app
Если они соединены не локалкой, а через Интернет-канал, то даст. К примеру, приложений для многоствольной заливки видео на тытруб есть в количестве.Palych wrote:Я всё-таки не верю что параллельный upload в условиях когда клиент и сервер в одних руках даст заметное ускорение в реальной жизни (в production) и оправдает накладные расходы.