powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Средовый Rsync через http
25 сообщений из 53, страница 1 из 3
Средовый Rsync через http
    #40020087
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет друзья.

Придумал следующее. Не продуктовая задача. А так. Для себя.

Периодически думаю о том как сливать холодный backup от Oracle/PGSql через веб интерфейс.
Но надо минимизировать трафик.


Особенности данной задачи:

1. Бэкап достаточно большой (100-300 Гб файлов россыпью).
2. Файлы изменяются внутри мало. Вангую 1-5%. Размер файлов обычно не меняется.
3. Предпочтителен HTTP. Он удобнее чем NFS/Cifs потому как "пробить дырку"
в сетях по 80 порту всегда проще.

Я мог бы использовать wget -c но он детектирует размер но не содержание.
Я мог бы добавлять к каждому скачиваемому файлу контрольную сумму md5 но сделать
с клиента это невоможно т.к. подсчет md5 эквивалентен скачиванию.

Тоесть нужен умный сервер.

Задумался об утилите rsync.

Она подходит идеально когда вы синхронизируете локальные фолдеры либо фолдеры шареные по файловым
протоколам. Но rsync не работает по http.

Из базовых возможностей http есть опция range.
Код: sql
1.
2.
3.
GET /db/mydb/PG_12_201912345/16387/41553.1 HTTP/1.1
Host: www.maytonsfuckendb.org
Range: bytes=127645-4096



Но не хватает больше серверной и клиенствой логики которая делает всю работу.

Думал об тегах eTag, If-Modified-Since. Но они расчитанные на полное опциональное скачиванеи небольших файлов.
Мне не подходят.

Задача тематически связана с брейнштормом по поводу репликаций https://www.sql.ru/forum/1322059/offlayn-tyapnichnaya-replikaciya
хотя я уже от нее частично отказался. Безперспективно. Но если будете поднимать - я не против.


Линки по теме которые я начал читать.

http://www.webdav.org/
http://www.opennet.ru/man.shtml?category=1&russian=0&topic=rsync
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since

P.S. Go-go думать. Сроков у задачи нет.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020093
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
"пробить дырку" в сетях по 80 порту всегда проще.
mayton
Но rsync не работает по http.
А в ваших сетях по 80 порту обязательно работать по протоколу http?
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020100
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все - неважно. Давайте искать возможности а не причины.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020104
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Это все - неважно. Давайте искать возможности а не причины.
Ну так вот она, возможность - запускать rsync на 80 порту.

Кроме того, в википедии по rsync упоминаются zsync и rclone, которые могут работать по http.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020106
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Пойду читать.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020199
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Че ты мутишь, какой rsync? У тебя же односторонняя передача, ты на сервак с бэкапами ничего с локального компа синхронизировать не должен, должен только синхронизировать локальный комп с серваком, игра в одни ворота.

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

Роутинг примерно такой получится:
Код: plaintext
1.
2.
  GET /meta           -> JSON например такой [{fileName : '1.bak', changeTS : 1605757087476, size : 1232123232}]
  GET /file/:fileName -> binary stream

Опрашиваешь сначала эти метаданные (GET /meta), сравниваешь, с тем, что у тебя локально и заливаешь только то, что изменилось (GET /file/:fileName), опционально удаляешь файлы, по которым нет инфы м метаданных.


Если хочется упороться по MD5, то его можно попробовать прямо встремить в процедуру бэкапа, алгоритм то поточны, например указав утилите бэкапа выводить результат в STDOUT и сделать сплит пайпов
типа так

Код: plaintext
1.
backup -to-stdout | tee >(md5sum > file.md5) >file.bak


Все!
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020315
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80
mayton,

..... Подымаешь свой HTTP сервак ......

В таком случае лучше поднять SSH сервак ибо он намного плезнее для подобного рода задачь, а rsync работает через ssh.

Вот ещё майтону на почитать http://www.ijsrp.org/research-paper-1115/ijsrp-p4786.pdf
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020360
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OoCc
dimonz80
mayton,

..... Подымаешь свой HTTP сервак ......

В таком случае лучше поднять SSH сервак ибо он намного плезнее для подобного рода задачь, а rsync работает через ssh.

Вот ещё майтону на почитать http://www.ijsrp.org/research-paper-1115/ijsrp-p4786.pdf



Топикстартер кем себя считает - программистом или админом? Если последним, то тогда да, скачал готовенькое - сконфигурил - запустил - PROFIT!!!, а если считает себя тру программером, то пусть идет и программирует свой сервак!)))
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020364
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80
mayton,

Че ты мутишь, какой rsync? У тебя же односторонняя передача, ты на сервак с бэкапами ничего с локального компа синхронизировать не должен, должен только синхронизировать локальный комп с серваком, игра в одни ворота.

Почему у меня односторонняя передача? У меня есть рабочая станция дома. И есть ноубук на даче.
Поработал дома. Чего-то залил в git. Но в git нельзя залить базы. Базы надо лить либо через гуглдрайвы
либо через AWS S3. Естественно я сразу это откинул ибо

1) Лишний траф.
2) Не спортивно.

И передача не односторонняя потому что роли меняются. Сначала (1) -> (2). Потом наоборот (2) -> (1)
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020366
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80
OoCc
пропущено...

В таком случае лучше поднять SSH сервак ибо он намного плезнее для подобного рода задачь, а rsync работает через ssh.

Вот ещё майтону на почитать http://www.ijsrp.org/research-paper-1115/ijsrp-p4786.pdf



Топикстартер кем себя считает - программистом или админом? Если последним, то тогда да, скачал готовенькое - сконфигурил - запустил - PROFIT!!!, а если считает себя тру программером, то пусть идет и программирует свой сервак!)))

Скорее второе. Но я ознакомлюсь с готовыми тулзами однозначно.
Золото... как вы понимаете намывается из песка.

Да и еще не раздражайся сильно. Ты просто мои другие топики не видел. Я периодически подкидываю
задачи безо всякого бизнес смысла.

Так. Головоломка.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020392
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
dimonz80
mayton,

Че ты мутишь, какой rsync? У тебя же односторонняя передача, ты на сервак с бэкапами ничего с локального компа синхронизировать не должен, должен только синхронизировать локальный комп с серваком, игра в одни ворота.

Почему у меня односторонняя передача? У меня есть рабочая станция дома. И есть ноубук на даче.
Поработал дома. Чего-то залил в git. Но в git нельзя залить базы. Базы надо лить либо через гуглдрайвы
либо через AWS S3. Естественно я сразу это откинул ибо

1) Лишний траф.
2) Не спортивно.

И передача не односторонняя потому что роли меняются. Сначала (1) -> (2). Потом наоборот (2) -> (1)



Про гит в начале ничего не было

Тогда берем httpd/nginx, прикручиваем webdav для gita (типа как тут https://gitirc.eu/howto/setup-git-server-over-http.html ) и подбираем модуль для работы с файлами чтобы и файлы отдавал и список файлов с атрибутами, ну или сам на PHP херак-херак и готово.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020396
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
dimonz80
пропущено...



Топикстартер кем себя считает - программистом или админом? Если последним, то тогда да, скачал готовенькое - сконфигурил - запустил - PROFIT!!!, а если считает себя тру программером, то пусть идет и программирует свой сервак!)))

Скорее второе. Но я ознакомлюсь с готовыми тулзами однозначно.
Золото... как вы понимаете намывается из песка.

Да и еще не раздражайся сильно. Ты просто мои другие топики не видел. Я периодически подкидываю
задачи безо всякого бизнес смысла.

Так. Головоломка.


Да я тебя еще по топику про схлопывание графов запомнил. Ты - всяко шпион, пылесосишь идеи по форумам, а мы лопухи тут перед тобой распинаемся)))
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020411
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80
Подымаешь свой HTTP сервак, который помимо отдачи файлов умеет отдавать метаданные по ним, те же размер и дату изменения.

Вообще-то для этого в HTTP есть запрос HEAD, который поддерживается всеми и городить уже ничего не нужно. Но проблема не в этом.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020416
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80
mayton
пропущено...

Скорее второе. Но я ознакомлюсь с готовыми тулзами однозначно.
Золото... как вы понимаете намывается из песка.

Да и еще не раздражайся сильно. Ты просто мои другие топики не видел. Я периодически подкидываю
задачи безо всякого бизнес смысла.

Так. Головоломка.


Да я тебя еще по топику про схлопывание графов запомнил. Ты - всяко шпион, пылесосишь идеи по форумам, а мы лопухи тут перед тобой распинаемся)))

Вот так поворот!
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020418
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Давайте искать возможности

Берёшь на одном конце новый бэкап и создаёшь для него торрент-файл. На другом конце берёшь старый бэкап и новый торрент-файл. Пинаешь торрент-клиент, он проверяет контрольные суммы каждого блока в файле и несовпадающие помечает как инвалидные, после чего лезет к пиру и скачивает эти блоки. Профит.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020419
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
mayton
Давайте искать возможности

Берёшь на одном конце новый бэкап и создаёшь для него торрент-файл. На другом конце берёшь старый бэкап и новый торрент-файл. Пинаешь торрент-клиент, он проверяет контрольные суммы каждого блока в файле и несовпадающие помечает как инвалидные, после чего лезет к пиру и скачивает эти блоки. Профит.

Да. Идею с торрентом я обдумывал. Хлопотно. И несекюрно.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020426
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Периодически думаю о том как сливать холодный backup от Oracle/PGSql через веб интерфейс.
Но надо минимизировать трафик.

Может diff ? Хранить текущий и предыдущий бэкап, получать разницу и ее заливать, на той стороне накатывать. Трафик будет минимальный.

PS Еще передаваемое запаковать можно
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020436
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
Периодически думаю о том как сливать холодный backup от Oracle/PGSql через веб интерфейс.
Но надо минимизировать трафик.

Может diff ? Хранить текущий и предыдущий бэкап, получать разницу и ее заливать, на той стороне накатывать. Трафик будет минимальный.

PS Еще запаковать можно

Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff.
Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге.

Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для
300 Гигабайтной БД я никогда не получу ответа по bsdiff.

Мне нужно - линейное время.

Я сейчас думаю что для меня - хеши для фрагментов это хороший компромисс
между bsdiff которые смотрят "слишком глубоко" и анализируют
вставки новых блобов в файл. Мне это не нужно т.к. в большинстве
случаев (99%) изменения в БД трекают не вставками а update-s
кусочков файлов (обычно 4-8К) так называемых db-blocks.

Кстати для e-Mule хеш вычислялся какраз следующим образом.
Для файлов меньше 16 мегабайт просто брался MD4 от тела файла.
Для файлов больше - файл бился на некоторое число фрагментов
которые хешировались опять-же через MD4 и потом уже их хеши
еще раз хешировались через MD4 и финальный линк был таков.
Конкатенация MD4(MD4(fraqment(1),MD4(fraqment(2),....e.t.c).
Эта схема дает почти 0 коллизий.

Ну да бох с ним. Ослик умер и умер.

Главное что такая схема подозрительно напоминает Дерево Меркла.
Только не бинарное. И с 1 уровнем вложенности.


Вот на этот блочный режим я и хочу затачивать свой http-rsync сервер.

Которого еще нет.

И который я напишу.

Или как "инфо-шпион", вытащу эти знания из димона80
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020438
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Dima T
пропущено...

Может diff ? Хранить текущий и предыдущий бэкап, получать разницу и ее заливать, на той стороне накатывать. Трафик будет минимальный.

PS Еще запаковать можно

Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff.
Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге.

Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для
300 Гигабайтной БД я никогда не получу ответа по bsdiff.

Мне нужно - линейное время.

Я сейчас думаю что для меня - хеши для фрагментов это хороший компромисс
между bsdiff которые смотрят "слишком глубоко" и анализируют
вставки новых блобов в файл. Мне это не нужно т.к. в большинстве
случаев (99%) изменения в БД трекают не вставками а update-s
кусочков файлов (обычно 4-8К) так называемых db-blocks.

Кстати для e-Mule хеш вычислялся какраз следующим образом.
Для файлов меньше 16 мегабайт просто брался MD4 от тела файла.
Для файлов больше - файл бился на некоторое число фрагментов
которые хешировались опять-же через MD4 и потом уже их хеши
еще раз хешировались через MD4 и финальный линк был таков.
Конкатенация MD4(MD4(fraqment(1),MD4(fraqment(2),....e.t.c).
Эта схема дает почти 0 коллизий.

Ну да бох с ним. Ослик умер и умер.

Главное что такая схема подозрительно напоминает Дерево Меркла.
Только не бинарное. И с 1 уровнем вложенности.


Вот на этот блочный режим я и хочу затачивать свой http-rsync сервер.

Которого еще нет.

И который я напишу.

Или как "инфо-шпион", вытащу эти знания из димона80


Дык эта... Для PG ваще можно заюзать архивирование WAL. Типа сначала pg_basebackup + прописать в кофиге чего с WAL делать хоть чтоб само куда надо высылалось, хоть на почту. Там прям в доке по PG все описано. Безо всяких rsynс.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020439
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно. Щас пойду по делам. Потом проведу след. Эксперимент. Сделаю копию мой PGsql БД.
Там сейчас лежат только 2 крупных таблицы. Ошметки одной из БД.

Загружу в нее что-то и посчитаю общие цифры.

Типа сколько Гигов было. Сколько Стало. И сколько 4к блочков обновилось.
Эта high-level информация даст пищу для размышлений. Особенно по тому
что делать дальше. Next steps...


Если в топик набегут Постгресщики и будут меня бить - я не буду сопротивлятся.
Я не спец в этой dbms. Я админил Оракл а не PG. Просто PG попалась под руку. А предположения о блочном
изменении - просто эвристика которая не влияет на корректность моего алгоритма
а может просто повлиять на степень сжатия инкрементального бэкапа. Даже
если я ошибся и парсил не data-файл а какой-то другой бинарник - все равно
при восстановлении он будет восстановлен корректно. Просто с избыточным количеством
инкрементальной ифны например.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020440
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80

Дык эта... Для PG ваще можно заюзать архивирование WAL. Типа сначала pg_basebackup + прописать в кофиге чего с WAL делать хоть чтоб само куда надо высылалось, хоть на почту. Там прям в доке по PG все описано. Безо всяких rsynс.

Ну вот видишь как хорошо что мы с тобой тут чай пьем и беседуем.

Спасибо. Но я выпью свою чашу до дна с твоего позволения. Про hot-backup я не забуду
и тоже его включу в свои бенчмарки.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020441
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Dima T
пропущено...

Может diff ? Хранить текущий и предыдущий бэкап, получать разницу и ее заливать, на той стороне накатывать. Трафик будет минимальный.

PS Еще запаковать можно

Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff.
Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге.

Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для
300 Гигабайтной БД я никогда не получу ответа по bsdiff.

Мне нужно - линейное время.

Я сейчас думаю что для меня - хеши для фрагментов это хороший компромисс
между bsdiff которые смотрят "слишком глубоко" и анализируют
вставки новых блобов в файл. Мне это не нужно т.к. в большинстве
случаев (99%) изменения в БД трекают не вставками а update-s
кусочков файлов (обычно 4-8К) так называемых db-blocks.

Кстати для e-Mule хеш вычислялся какраз следующим образом.
Для файлов меньше 16 мегабайт просто брался MD4 от тела файла.
Для файлов больше - файл бился на некоторое число фрагментов
которые хешировались опять-же через MD4 и потом уже их хеши
еще раз хешировались через MD4 и финальный линк был таков.
Конкатенация MD4(MD4(fraqment(1),MD4(fraqment(2),....e.t.c).
Эта схема дает почти 0 коллизий.

Ну да бох с ним. Ослик умер и умер.

Главное что такая схема подозрительно напоминает Дерево Меркла.
Только не бинарное. И с 1 уровнем вложенности.


Вот на этот блочный режим я и хочу затачивать свой http-rsync сервер.

Которого еще нет.

И который я напишу.

Или как "инфо-шпион", вытащу эти знания из димона80


Еще можно посмотреть в сторону всяких реплицируемых ФС типа DRDB или DFS, что умеет снапшоты и репликацию.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020442
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff.
Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге.

Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для
300 Гигабайтной БД я никогда не получу ответа по bsdiff.

Мне нужно - линейное время.

Потести, вроде относительно быстро работает.

В принципе внутри бэкапа одни и те же страницы на одних и тех же местах. В один проход можно сравнить, а разницу писать в каком-нибудь самодельном формате.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020444
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Потом проведу след. Эксперимент. Сделаю копию мой PGsql БД.
Там сейчас лежат только 2 крупных таблицы. Ошметки одной из БД.

Если не путаю PGSql хранит версионные данные, т.е. выполняя update записи таблицы фактически создается новая на уровне файловой системы, а старая как-то помечается ненужной. И так он гадит при каждом update. Поэтому периодически нужно делать VACUUM , который как минимум ненужные помечает как свободное место, как максимум сдвигает данные внутри файла.
При интенсивных update в первом случае придется обновлять этот мусор в копии, во втором можно словить полное изменение БД на файловом уровне.
...
Рейтинг: 0 / 0
Средовый Rsync через http
    #40020450
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
mayton
Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff.
Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге.

Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для
300 Гигабайтной БД я никогда не получу ответа по bsdiff.

Мне нужно - линейное время.

Потести, вроде относительно быстро работает.

В принципе внутри бэкапа одни и те же страницы на одних и тех же местах. В один проход можно сравнить, а разницу писать в каком-нибудь самодельном формате.


Идея конечно здравая, только diff в общем случае строит матрицу NxM где N и M - размеры сравниваемых файлов. Если единицей сравнения будет байт, то все будет плохо, лучше бить на более крупные блоки. Ну и не накосячить при накатывании патча.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Средовый Rsync через http
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]