Сайт | Скачать | Видео | Wiki

Автор Тема: Экономия трафика : zsync, rsync, xdelta,  (Прочитано 731 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 2862
  • Репутация: +33/-0
  • Автор темы
    • MagOS linux
Использование zsync для минимизации трафика при синхронизации больших файлов, например, ежедневных сборок Ubuntu

zsync man
zsyncmake man

$ pacman -Ss zsync2
chaotic-aur/zsync2-git 2.0.0r174.86cfd3a-1 [установлен: 2.0.0r177.f0bc205-1]
    A file transfer program that's able to connect to rsync servers


В чем преимущество zsync2 от zsync, без понятия. В Conty именно он используется, ну и я тоже.

zsync2-git-2.0.0r177.f0bc205-2008-kr01.pfs
Одно время использовали для обновления xdelta патчи, оказалось не слишком удобно. Сейчас магос обновляется с rsync, соответственно качаются только изменения. Не для сборки, а для каждого модуля отдельно. Но ввиду того что модули сжаты и каждый раз пересобираются, даже при небольших изменениях в репозиториях перед сборкой свежего магоса, rsync качает около половины размера сборки. С zsync также?
« Последнее редактирование: 17 Май 2021, 09:27:08 от sfs »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #1 : 15 Май 2021, 14:23:11 »
Смотреть логи здесь и здесь.

В первом примере, замена в iso только одного файла весом 332Kb:
-rw-rw-rw- 1 live live 332K апр 19 11:47 089-upd-2008-sf57.pfs
Обратить внимание на строки used 608800768 local, fetched 421888 в конце лога.

Во втором, склеена папка /base с заменой того же 089-upd-2008-sf57.pfs, с тем же весом (332Kb).
used 144510976 local, fetched 794624


Видно, что по сети скачалось чуть больше 332Kb, но не вышло за пределы 1mb. )
Исходные размеры *.iso и base.pfs из тестов дать не могу, уже удалил. Но они в пределах used * local.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #2 : 15 Май 2021, 14:33:15 »
Возможно, во втором примере были бы другие результаты, в большую сторону, если использовать не склеивание, а установку обновленных пакетов в папку, с последующим сжатием в монолит. Этот тест был бы близок, как в MagOS.

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 2862
  • Репутация: +33/-0
  • Автор темы
    • MagOS linux
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #3 : 16 Май 2021, 06:14:49 »
Замена файла в исо это не показательно. С rsync будет аналогично. Попробуйте заменить файл внутри модуля в исо. И  тогда уже смотреть какой процент от размера этого модуля качается при обновлении.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #4 : 16 Май 2021, 08:57:12 »
Хехе, подмодуль в составе большого модуля он всяко отследит и заменит, скачав по сети байтов примерно 1 к 1. Тем более, что у этого подмодуля измененная версия.
А склеивать в монолит имеет смысл для снижения потребления RAM.

Во втором, склеена папка /base с заменой того же 089-upd-2008-sf57.pfs, с тем же весом (332Kb).
Провел опыт. Склеил папку /base, заменив только 089-upd*.pfs. Нормально отработало.


А ситуация, предложенная в комменте выше, это чистый MagOs.
Возможно, во втором примере были бы другие результаты, в большую сторону, если использовать не склеивание, а установку обновленных пакетов в папку, с последующим сжатием в монолит. Этот тест был бы близок, как в MagOS.
« Последнее редактирование: 16 Май 2021, 09:15:46 от krasnyh »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #5 : 16 Май 2021, 09:45:57 »
Сейчас магос обновляется с rsync, соответственно качаются только изменения. Не для сборки, а для каждого модуля отдельно.
...
Но ввиду того что модули сжаты и каждый раз пересобираются, даже при небольших изменениях в репозиториях перед сборкой свежего магоса, rsync качает около половины размера сборки.



Цитата
очень важное отличие zsync от rsync, о котором мы до сих пор не упоминали. Дело в том, что изменение даже одного байта исходного файла может привести к изменениям во всем файле его архива, так уж работают алгоритмы сжатия. По этой причине rsync не очень эффективен в синхронизации архивов.
Цитата
К счастью, zsync умеет при необходимости делить на блоки и считать суммы не сам архив, а его распакованное содержимое, но при этом определять недостающие блоки не у распакованного содержимого, а у архива. Вот такая хитрость, подробнее читайте тут в разделе Compressed Content.
Хабр


Давно бы уже сами проверили на своей сборке эффективность zsync в сравнении с rsync. )

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 2862
  • Репутация: +33/-0
  • Автор темы
    • MagOS linux
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #6 : 16 Май 2021, 13:55:09 »
Давно бы уже сами проверили на своей сборке эффективность zsync в сравнении с rsync. )
Пожалуй надо)

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 2862
  • Репутация: +33/-0
  • Автор темы
    • MagOS linux
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #7 : 17 Май 2021, 13:54:32 »
Цитата

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

Цитата

    К счастью, zsync умеет при необходимости делить на блоки и считать суммы не сам архив, а его распакованное содержимое, но при этом определять недостающие блоки не у распакованного содержимого, а у архива. Вот такая хитрость, подробнее читайте тут в разделе Compressed Content.

Хабр
Похоже только gzip ((

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #8 : 17 Май 2021, 22:21:58 »
даже при небольших изменениях в репозиториях перед сборкой свежего магоса, rsync качает около половины размера сборки.
Лежит у меня давно MagOS_2016.64_20210124.iso. Хотел проверить, скачав новый MagOS_2016.64_20210424.iso, но там какая-то хитрая сборка в iso, что zsyncmake2 не осилил.


В итоге, закинул файлы *.xzm нового iso на наш сервер, синхронизировал. По сети скачалось 103,35M из 1.9G. Заняло все это дело около 5 мин. Хеш модулей совпал.
Код
% grep fetched zsync2-magos.log
used 8261632 local, fetched 62615552 
used 327067648 local, fetched 5404672
used 125763584 local, fetched 3928064
used 326043648 local, fetched 3131392
used 176615424 local, fetched 2093056
used 173774848 local, fetched 15054848
used 167759872 local, fetched 765952 
used 225302528 local, fetched 4179968
used 208048128 local, fetched 1351680
used 40714240 local, fetched 4108288 
used 96763904 local, fetched 4534272 
used 8181760 local, fetched 1275904

live@lfa2008 /mnt/sda3/zsync2 % ll *.xzm
-r--r--r-- 1 live live  70877184 мая 17 21:59 00-kernel.xzm
-r--r--r-- 1 live live 332472320 мая 17 22:00 01-drivers.xzm
-r--r--r-- 1 live live 129691648 апр 24 06:44 10-core.xzm
-r--r--r-- 1 live live 329175040 апр 24 06:45 20-x-base.xzm
-r--r--r-- 1 live live 178708480 мая 17 22:01 35-x-plasma.xzm
-r--r--r-- 1 live live 188829696 мая 17 22:02 41-x-utilities.xzm
-r--r--r-- 1 live live 168525824 мая 17 22:02 42-x-network.xzm
-r--r--r-- 1 live live 229482496 апр 24 06:47 43-x-multimedia.xzm
-r--r--r-- 1 live live 209399808 мая 17 22:03 44-x-office.xzm
-r--r--r-- 1 live live  44822528 мая 17 22:03 45-x-java.xzm
-r--r--r-- 1 live live 101298176 апр 24 06:48 70-documentation.xzm
-r--r--r-- 1 live live   9457664 апр 24 06:52 88-magos.xzm


live@lfa2008 /mnt/sda3/zsync2 % md5sum *.xzm
7ef7aca90b10171c1b4456d57cb2cdf4  00-kernel.xzm
647cb5c8cc5e9aa077571563938066c0  01-drivers.xzm
9a8c5974c0828c3309e99db05d10f137  10-core.xzm
d85bb0d7eb5a8e3e7084aa22b2e25179  20-x-base.xzm
de1a60283536afc819723e45c74e6673  35-x-plasma.xzm
f5f116048ff24c5201a56644b9c829e2  41-x-utilities.xzm
ff05b2bb2141b44443e1eb71ffe83e99  42-x-network.xzm
f4ac871d63154ed71d45eb81b0317d77  43-x-multimedia.xzm
ba8bf3ed5e18f164a0e5b93392ab9464  44-x-office.xzm
f5c0560a11c5e0d07f81a3e11d2606e6  45-x-java.xzm
cbb33fabd452700860f89dcbe0575cf7  70-documentation.xzm
903c58ebce66fc66f4770d89d46b5ee9  88-magos.xzm
« Последнее редактирование: 19 Май 2021, 14:17:31 от krasnyh »

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 2862
  • Репутация: +33/-0
  • Автор темы
    • MagOS linux
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #9 : 18 Май 2021, 15:59:25 »
Сделал несколько тестов. Не вполне корректно, но в целом более ли менее понятно. Итак. Один модуль 640 метров, второй модуль аналогичного размера, но в нем удалено пару файлов и добавлено пару других чтоб общий размер не сильно изменился.
rsync - отправил 181кб, скачал 22 метра.
zsync - сказал, что 99.2% уже есть. То есть скачать по идее должен 5.1 + 1.2 (размер самого sync файла) - 6.3 метра, но это чистый размер, сколько будет реально скачано не знаю, с моим http сервером качать отказался.
zsync2 - 99.5% остальное аналогично zsync, только размер zsync файла  - больше.
xdelta3 - абсолютный чемпион по размеру того что надо качать. Патч получился 1.9 метров.
Все это достаточно странно, так как везде утверждается, что алгоритм один и тот же.
По остальным аспектам применения все еще менее однозначно. Rsync - минимум телодвижений, закинул файл и уже работает, стандарт де факто.
Zsync - не развивается с 17 года, zsync2 - альфа. Протокол только http(s), вроде качает с libcurl, но с ftp не завелось. Httpd тоже не всякий подойдет, нужно чтоб чанками умел отдавать. Нужно создавать файл с метадатой для каждого выкладываемого файла.
Xdelta - по размеру патча чемпион, по всему остальному нет. Патч создается для конкретных файлов, то есть если у тебя более древний файл, чем тот для которого сделан патч уже не обновить. Можно патчи мержить, но это дополнительный геморрой. Сам качать не умеет. Можно по идее сделать скиптовую обвязку и получится zsync ))

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #10 : 18 Май 2021, 16:06:12 »
с моим http сервером качать отказался.
Ну да, тоже хотел проверять локально, запустив python2 -m SimpleHTTPServer. Но в итоге пришлось закачивать на сервер форума.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #11 : 19 Май 2021, 19:50:49 »
Zsync - не развивается с 17 года
Код
$ zsync -V
zsync v0.6.2 (compiled Jul  7 2020 13:09:43)
By Colin Phipps <cph@moria.org.uk>
Published under the Artistic License v2, see the COPYING file for details.
https://archlinux.org/packages/community/x86_64/zsync/

Кстати, легко и быстро создал .zsync для MagOS_2016.64_20210424.iso (2G) командой zsyncmake. Даже проверил на ublinux_db_2102.iso весом 4G, тоже никаких затруднений. В отличие от zsyncmake2, который 'попыхтел' в течении почти часа, и конца и края не видно было. Но при этом прекрасно и быстро создавал для pra.iso (517M).
« Последнее редактирование: 19 Май 2021, 20:25:14 от krasnyh »

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 2862
  • Репутация: +33/-0
  • Автор темы
    • MagOS linux
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #12 : 19 Май 2021, 20:12:47 »
Zsync - не развивается с 17 года
https://github.com/cph6/zsync
Последний коммит посмотрите когда сделан.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #13 : 29 Май 2021, 17:13:31 »
в нем удалено пару файлов и добавлено пару других чтоб общий размер не сильно изменился.
Захотелось проверить подобное, когда в файле изменена/добавлена только одна строка.


Итак, было:
Цитата
$ ll 089-upd-2008-sf59.pfs
-rw-rw-rw- 1 1015 513 344064 мая 13 16:20 089-upd-2008-sf59.pfs
Добавил в ~/.config/autostart/mod-up.desktop строку NotShowIn=LXDE;, выключив данный скрипт из автозагрузки. Собрал модуль командой mkpfs, не изменяя название. Стало:
Цитата
$ ll 089-upd-2008-sf59.pfs
-rw-rw-rw- 1 live live 344064 мая 29 16:21 089-upd-2008-sf59.pfs
Как видно, размер остался прежним. Изменилось время доступа, права и, само собой, хеш.

Далее, пересобрал iso, создал .iso.zsync, закинул новый iso на сервер и скачал командой:
zsync2 -i lfa20.08-21.05-x86_64.iso lfa20.08-21.05-x86_64-test.iso.zsync
Хеш итогового iso совпал.
ive@lfa2008 /mnt/sda3/iso % zsync2 -i lfa20.08-21.05-x86_64.iso lfa20.08-21.05-x86_64-test.iso.zsync
zsync2 version 2.0.0-alpha-1 (commit f0bc205), build <local dev build> built on 2021-04-23 15:16:40 UTC
Checking for changes...
Cannot find file lfa20.08-21.05-x86_64-test.iso, triggering full download
Target file: /mnt/sda3/iso/lfa20.08-21.05-x86_64-test.iso
Reading seed file: lfa20.08-21.05-x86_64.iso
Usable data from seed files: 99.945600%
Renaming temp file
Fetching remaining blocks
Downloading from https://file.puppyrus.org/users/pra64/pfs-portable-test/lfa20.08-21.05-x86_64-test.iso

###################- 99.9% 0.0 kBps         


###################- 99.9% 4.1 kBps         


###################- 100.0% 421.9 kBps         


###################- 100.0% 430.1 kBps         


###################- 100.0% 434.2 kBps         


###################- 100.0% 151.6 kBps         


###################- 100.0% 544.8 kBps         


###################- 100.0% 573.4 kBps         


###################- 100.0% 581.6 kBps         


#################### 100.0% 585.7 kBps DONE   

Verifying downloaded file
checksum matches OK
used 541818880 local, fetched 294912
zsync2 -i lfa20.08-21.05-x86_64.iso lfa20.08-21.05-x86_64-test.iso.zsync  4,14s user 2,00s system 15% cpu 38,618 total


Основные моменты в логе:
Цитата
Usable data from seed files/Полезные данные из исходных файлов: 99.945600%
used/использовал 541818880 (516.72 mb) local, fetched/доставлен 294912 (288 kb)


p.s. Даже не знаю, это много или мало - 288 kb скачано с сервера. Учитывая что измененный файл весит 231 байт.
« Последнее редактирование: 29 Май 2021, 17:19:09 от krasnyh »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 4404
  • Репутация: +123/-1
Re: Экономия трафика : zsync, rsync, xdelta,
« Ответ #14 : 29 Май 2021, 17:56:29 »
Даже не знаю, это много или мало - 288 kb скачано с сервера. Учитывая что измененный файл весит 231 байт.
Возникло подозрение, что zsync пошел по легкому пути и просто заменил 089-upd-2008-sf59.pfs. :) Поэтому перепроверил на большем модуле.
Было:
Цитата
$ ll google-chrome-gtk3-p-90.0.4430.212_64-au01.pfs
-rw-rw-rw- 1 live live 89759744 мая 11 10:46 google-chrome-gtk3-p-90.0.4430.212_64-au01.pfs
Закоментировал строку "sfs-get-dep 030-gtk3" в start.sh, в корне модуля.
Стало:
Цитата
$ ll google-chrome-gtk3-p-90.0.4430.212_64-au01.pfs
-rw-r--r-- 1 root root 89759744 мая 29 17:36 google-chrome-gtk3-p-90.0.4430.212_64-au01.pfs
Все тоже что и в комменте выше - размер не изменился.

live@lfa2008 /mnt/sda3/iso % zsync2 -i lfa20.08-21.05-x86_64.iso lfa20.08-21.05-x86_64-test.iso.zsync
zsync2 version 2.0.0-alpha-1 (commit f0bc205), build <local dev build> built on 2021-04-23 15:16:40 UTC
Checking for changes...
Cannot find file lfa20.08-21.05-x86_64-test.iso, triggering full download
Target file: /mnt/sda3/iso/lfa20.08-21.05-x86_64-test.iso
Reading seed file: lfa20.08-21.05-x86_64.iso
Usable data from seed files: 99.942200%
Renaming temp file
Fetching remaining blocks
Downloading from https://file.puppyrus.org/users/pra64/pfs-portable-test/lfa20.08-21.05-x86_64-test.iso

###################- 99.9% 0.0 kBps         


###################- 99.9% 4.1 kBps         


###################- 100.0% 421.9 kBps         


###################- 100.0% 430.1 kBps         


###################- 100.0% 146.1 kBps         


###################- 100.0% 438.3 kBps         


###################- 100.0% 442.4 kBps         


###################- 100.0% 446.5 kBps         


###################- 100.0% 471.0 kBps         


###################- 100.0% 475.1 kBps         


###################- 100.0% 581.6 kBps         


###################- 100.0% 610.3 kBps         


###################- 100.0% 618.5 kBps         


#################### 100.0% 622.6 kBps DONE   

Verifying downloaded file
checksum matches OK
used 541800448 local, fetched 313344
zsync2 -i lfa20.08-21.05-x86_64.iso lfa20.08-21.05-x86_64-test.iso.zsync  4,10s user 2,06s system 14% cpu 42,710 total


Итог, скачано с сервера 306 kb, сам измененный файл весит 20 байт. Хеш итогового iso совпал.
« Последнее редактирование: 29 Май 2021, 17:59:24 от krasnyh »