Народ, помогите мне, пожалуйста, правильно поставить задачу, прежде чем я полезу с ней по спецкомьюнити.
Синхронизируем большой массив данных. Весь массив порядка полутерабайта, но синхронизация дифференциальная, в месяц трафика порядка 30 гигабайт.
В массиве очень много мелких файлов. Ежедневно при построении индекса отсматривается около 3,5 млн. файлов, при этом синхронизируется 5-6 тысяч.
Синхронизируем из Америки в Питер и обратно. С американской стороны данные представляют собой очень разветвленную структуру NIS-карт и линков на десятки NFS-серверов в сети.
В Питере на машине запускается rsync-демон, который и осуществляет синхронизацию.
Проблема в следующем.
При построении индекса он шерстит те самые 3,5 млн файлов, которые расположены в Штатах, каждый раз лезя к каждому из этих файлов. В итоге времени на построение индекса уходит туева хуча времени. Дефакто - около 70% времени всего процесса синхронизации в целом.
Американские данные даны мне как неизменяемая данность. Я ничего не могу с ними сделать - ни поменять структуру, ни получить рута, ничего. Большого дискового пространства или мощностей у меня там тоже нет, но небольшие - есть. Есть пара серверов, на которых я могу получить немного места и имею рута.
Если бы можно было составлять индекс локально в Америке, а потом передавать питерскому демону - это облегчило бы ситуацию в разы. Актуальность "раз в сутки" достаточна. Как научить так работать rsync - непонятно, кажется, без хака этого вообще не сделать.
Какие есть варианты решения? Может быть, я не вижу чего-то очевидного?
Насколько понятно задан вопрос?
Куда, кроме ru_root, имеет смысл этот вопрос задавать?
Спасибо заранее.
Синхронизируем большой массив данных. Весь массив порядка полутерабайта, но синхронизация дифференциальная, в месяц трафика порядка 30 гигабайт.
В массиве очень много мелких файлов. Ежедневно при построении индекса отсматривается около 3,5 млн. файлов, при этом синхронизируется 5-6 тысяч.
Синхронизируем из Америки в Питер и обратно. С американской стороны данные представляют собой очень разветвленную структуру NIS-карт и линков на десятки NFS-серверов в сети.
В Питере на машине запускается rsync-демон, который и осуществляет синхронизацию.
Проблема в следующем.
При построении индекса он шерстит те самые 3,5 млн файлов, которые расположены в Штатах, каждый раз лезя к каждому из этих файлов. В итоге времени на построение индекса уходит туева хуча времени. Дефакто - около 70% времени всего процесса синхронизации в целом.
Американские данные даны мне как неизменяемая данность. Я ничего не могу с ними сделать - ни поменять структуру, ни получить рута, ничего. Большого дискового пространства или мощностей у меня там тоже нет, но небольшие - есть. Есть пара серверов, на которых я могу получить немного места и имею рута.
Если бы можно было составлять индекс локально в Америке, а потом передавать питерскому демону - это облегчило бы ситуацию в разы. Актуальность "раз в сутки" достаточна. Как научить так работать rsync - непонятно, кажется, без хака этого вообще не сделать.
Какие есть варианты решения? Может быть, я не вижу чего-то очевидного?
Насколько понятно задан вопрос?
Куда, кроме ru_root, имеет смысл этот вопрос задавать?
Спасибо заранее.
no subject
Date: 2007-05-11 03:53 pm (UTC)Хотя вроде бы какая разница.
no subject
Date: 2007-05-11 04:17 pm (UTC)no subject
Date: 2007-05-11 04:38 pm (UTC)no subject
Date: 2007-05-11 04:44 pm (UTC)Концептуальное. ;-)
Date: 2007-05-15 07:30 am (UTC)(убегает обратно в норку) ;-)))
no subject
Date: 2007-05-11 07:10 pm (UTC)(1) Настраивается нетривиально
(2) Написан на Modula-3
no subject
Date: 2007-05-11 07:12 pm (UTC)Может банальный ls -lR + diff + скрипт?
no subject
Date: 2007-05-12 03:36 pm (UTC)Скрипт, который будет делать - что? Rsync пофайлово? И что даст diff? rsync, мне кажется, делает ровно то же, но эффективней. Нет? Я ошибаюсь?
no subject
Date: 2007-05-12 05:20 pm (UTC)Ну, монтируем всё на ОДНУ машину в единое дерево, и там вешаем источник. Ему что с локальной FS что с NFS раздавать...
Ну да, всё сводится к ls -lR внутри ли rsync'а, снаружи ли (в виде ls'а настоящего). Если это bottle neck, то мне кажется, единственный путь -- параллелить получение списка файлов и пересылку изменённого, т.е. сравнили 100 штук, начали переслыать, а тем временем собираем информацию о следующих 100 штуках, и так далее (на деле -- мультитред). Именно так и написан cvsupd/cvsup -- там всё параллельно происходит и когда он читает последние куски дерева файлы из начала дерева изменённые давно переданы уже...
no subject
Date: 2007-05-12 11:21 am (UTC)однако вопрос - а не можешь ли ты этот rsync заставить работать в Штатах, да еще и поставить перед ним какой-нибудь примитивный селектор по дате последнего изменения? Т.е. скармливать ему уже готовый список файлов, которые со вчерашней синхронизации точно поменялись. а?
no subject
Date: 2007-05-12 03:32 pm (UTC)В Штатах я могу заставить работать демон, то есть сервис. И я попробую это сделать. Но rsync проводит сравнение файлов 1:1, то есть как сейчас он за каждым сравнением бегает в Штаты из Питера, так будет наоборот. Правда, в Питере синхронизированное менее дисперсно по сетевой структуре. Возможно, это даст выигрыш.
no subject
Date: 2007-05-13 03:38 pm (UTC)если я правильно понимаю эту фразу из описания алгоритма - "The recipient splits its copy of the file into fixed-size non-overlapping chunks, say of size S, and computes two checksums for each chunk: the MD4 hash, and a weaker 'rolling checksum'. It sends these checksums to the sender." - то он не сравнивает файлы 1 к 1, а посылает хэш для каждого файла.
Что мне непонятно - почему recipient? В моем понимании управлять процессом должен сервер. Т.е. в твоем случае - заокеанская сторона. Или у тебя двунаправленная актуализация - вам из штатов и в штаты - от вас?
Насчет модиф.тайм - глупая возможно идея - предположим актуализация происходит раз в сутки в 1 ночи. Вначале стартует скрипт, которые создает например симв. линки к файлам, у которых мод.дата > вчера в 1 ночи. Эти сим.линки помещаются все в одну директорию, а rsync уже во втором шаге синхронизирует только эту директорию. А?
no subject
Date: 2007-05-13 05:45 pm (UTC)no subject
Date: 2007-05-13 08:50 pm (UTC)no subject
Date: 2007-05-13 08:53 pm (UTC)no subject
Date: 2007-05-14 08:22 am (UTC)no subject
Date: 2007-05-14 05:06 pm (UTC)Можно в принципе попробовать похачить сишные исходники, мы вроде нашли функции, Которые можно было бы подправить. Но не хочется.
no subject
Date: 2007-05-14 05:22 pm (UTC)я именно и пытался у тебя выяснить, а умеет ли этот кудесник брать файлы по линкам. значит нет. :-(
похачить сишные исходники - это уже немножко навороты. я бы это уж на самый крайний случай оставил.
no subject
Date: 2007-05-13 07:06 pm (UTC)no subject
Date: 2007-05-13 07:05 pm (UTC)no subject
Date: 2007-05-13 08:22 pm (UTC)оно? пока всего 7 источников, это может продлиться.
насчет торрента точно не скажу, осел может работать без айпи. Там есть какая-то разница между HighID и LowID. Когда у меня на рутере не был прописан порт-форвардинг, то мой осел получал от серверов только лоу-айди, при этом качалось, но медленнее.
если хочешь попробовать - 2.5 метра инасталлятора могу тебе в гмейл кинуть.
no subject
Date: 2007-05-13 08:54 pm (UTC)Присылай. С июня перейду на анлим, можно будет и ослика воткнуть... надеюсь :)
no subject
Date: 2007-05-14 06:44 am (UTC)насчет Во - поправка. вчера пока писал коммент, нашлась в торре. не знаю или та же самая, просто с другим битрейтом сжатая, или другая.
сегодня к утру приползла. 276 метров. фтп бы вам девушка где-нить завести :-))
может rapidshare опробуем? я им никогда не пользовался, но говорят, что там можно вполне чего-нить большого выложить.
no subject
Date: 2007-05-14 05:09 pm (UTC)*Горестно* Нету у меня ftp. У меня тут ничего нету, я сижу в огромной сети, от всех спрятанная. Вот доломаю провайдера не реальный IP - подыму дома.
Эдька, огромное тебе спасибо. Я эту книжку люблю не сказать как.
no subject
Date: 2007-05-14 09:10 pm (UTC)всего 10 дисков, скажи как скачаешь, я еще парочку упакую и вылью туда. :-)
no subject
Date: 2007-05-14 09:17 pm (UTC)no subject
Date: 2007-05-14 05:11 pm (UTC)no subject
Date: 2007-05-14 05:19 pm (UTC)счас я его раром прижал, попробую. если не пойдет - еще и запаролю. :-)))
no subject
Date: 2007-05-15 07:39 am (UTC)Я понял, что мне не только твоё рычание нравится: в своём собственном журнале, где ты полная сама себе хозяйка, создать офтопик - это 5+. Хорошо, что модератор "+" не поставил! ;-)))
Буду читать дальше! ;-)
no subject
Date: 2007-05-12 05:27 pm (UTC)-I, --ignore-times Normally rsync will skip any files that are already the same size and have the same modification time-stamp. This option turns off this "quick check" behavior, causing all files to be updated.В конце концов, если и директории медленно качаются, а время тикает правильно, можно не думая на той стороне рожать ручками какой-нибудь find -daystart список и далее tgz scp.
no subject
Date: 2007-05-13 10:51 am (UTC)Простите, туплю. Каким образом можно сравнить modification time без обращения к файлам-папкам, для которых мы запрашиваем время?
Запускать find на той стороне - приведет к большой ресурсной нагрузке, этого я сделать не могу, машины все билдовые.
Однако rsync на той стороне мы попробуем запустить. Может, оно получится побыстрее. Еще один вариант - попробуем разработать мультитредную схему, написать соответствующий скриптик с использованием того же rsync. Спасибо.
no subject
Date: 2007-05-13 05:42 pm (UTC)http://en.wikipedia.org/wiki/Rsync
no subject
Date: 2007-05-13 05:59 pm (UTC)Странно - что?
no subject
Date: 2007-05-13 06:35 pm (UTC)Еще, кстати, есть такое средство, как unison (open source). Он делает синхронизацию в обе стороны и находит конфликты (типа с момента синхронизации файл был изменен на обоих концах).
Еще интересная утилита - monotone - это распределенный CVS (можно базы синхронизировать).
no subject
Date: 2007-05-13 07:02 pm (UTC)no subject
Date: 2007-05-13 08:00 pm (UTC)С CVS идея была в том, что при наличии в Питере полной repository, последняя версия вытаскивается checkout-ом или merge-м (в терминах стандартной CVS).
Недостатки подхода:
1) Добавляется лишний шаг по извлечению версии.
Достоинства:
1) Достать можно любую версию, а не только последнюю.
2) CVS все равно в конторе есть. При обнволении repository как раз и определяется что именно изменилось - вся информация уже готова и сидит в одном месте.
Я естественно понимаю, что никто не будет менять работающую схему во большой организации. Поэтому могу предложить половинчатое решение - cvsup+cvs (если вы уже используете cvs). Половинчатое оно потому, что cvsup синхронизирует только в одну сторону.
no subject
Date: 2007-05-14 05:11 pm (UTC)В качестве вершн-контроля в этом конкретно проекте исп-ся teamware покойная, кстати :) Спасибо за участие всяко. Будем, видимо, обычный мультитред писать все-таки.
no subject
Date: 2007-05-14 05:46 pm (UTC)no subject
Date: 2007-05-14 01:07 am (UTC)Есть ещё одна штука: mirrordir (ftp://sunsite.unc.edu/pub/Linux/system/backup/mirrordir-0.10.41.tar.gz) мощи необыкновенной. Нонче так не пишут, это настоящий одесский джаз. Автор перестал её трогать после того, как заработал ssl. Чудная софтинка. :-)
no subject
Date: 2007-05-14 05:09 pm (UTC)