Бо hashget нусхаҳои эҳтиётиро 99.5% кам кунед

hashget - он озод, манбаи кушода аст дедупликатор утилитаи ба бойгоникунанда монанд аст, ки ба шумо имкон медиҳад андозаи нусхаҳои эҳтиётиро хеле кам кунед, инчунин схемаҳои эҳтиётии афзоянда ва дифференсиалиро ташкил кунед ва ғайра.

Ин мақолаи мухтасар барои тавсифи хусусиятҳост. Истифодаи воқеии hashget (хеле оддӣ) дар тасвир шудааст README лоиҳа ва ҳуҷҷатҳои вики.

Муқоиса

Тибқи қонуни жанр, ман фавран аз интрига оғоз мекунам - муқоисаи натиҷаҳо:

Намунаи маълумот
андозаи кушодашуда
.tar.gz
hashget.tar.gz

WordPress-5.1.1
43 Mb
11 Мб (26%)
155 Кб ( 0.3% )

5.0.4-и Linux
934 Mb
161 Мб (20%)
4.7 МБ ( 0.5% )

Debian 9 (LAMP) LXC VM
724 Mb
165 Мб (23%)
4.1 МБ ( 0.5% )

Замина дар бораи чӣ гуна нусхабардории беҳтарин ва муассир бояд бошад

Ҳар дафъае, ки ман як мошини маҷозии навтаъсисро нусхабардорӣ мекардам, маро эҳсос мекард, ки кори нодуруст карда истодаам. Чаро ман аз система, ки эҷодиёти бебаҳо ва бебозгашти ман як index.html бо матни "Салом ҷаҳон" аст, нусхаи эҳтиётӣ мегирам?

Чаро дар нусхаи эҳтиётии ман 16 МБ /usr/sbin/mysqld мавҷуд аст? Оё воќеан мумкин аст, ки дар ин дунё шарафи нигоњ доштани ин файли муњимро дошта бошам ва агар ноком шавам, он ба инсоният гум шавад? Эҳтимол нест. Он дар серверҳои хеле боэътимоди debian нигоҳ дошта мешавад (эътимоднокӣ ва давомнокии онҳоро бо он чизе ки ман пешниҳод карда метавонам муқоиса кардан мумкин нест), инчунин дар нусхаҳои эҳтиётии (миллионҳо) маъмурони дигар. Оё дар ҳақиқат ба мо лозим аст, ки 10+ нусхаи 000-уми ин файли муҳимро барои беҳтар кардани эътимод эҷод кунем?

Умуман hashget ва ин масъаларо ҳал мекунад. Ҳангоми бастабандӣ, он нусхаи хеле хурдро эҷод мекунад. Ҳангоми кушодан - системаи комилан кушодашуда, ба он чизе, ки агар tar -c / tar -x. (Ба ибораи дигар, ин бастаи бе талаф аст)

Чӣ тавр hashget кор мекунад

hashget дорои мафҳумҳои Package ва HashPackage мебошад, ки бо ёрии онҳо он нусхабардориро иҷро мекунад.

бастаи (халтаи пластикӣ). Файл (одатан бойгонии .deb ё .tar.gz), ки онро аз Интернет бехатар зеркашӣ кардан мумкин аст ва аз он як ё якчанд файл гирифтан мумкин аст.

HashPackage — файли хурди JSON, ки як Бастаро муаррифӣ мекунад, аз ҷумла URL-и баста ва маблағи ҳэш (sha256) файлҳои он. Масалан, барои бастаи 5 мегабайтии mariadb-server-аслӣ, андозаи hashpackage танҳо 6 килобайт аст. Тақрибан ҳазор маротиба камтар.

Депликатсия — эҷоди бойгонӣ бе файлҳои такрорӣ (агар deduplicator донад, ки бастаи аслиро аз куҷо зеркашӣ кардан мумкин аст, он нусхаҳои такрориро аз бойгонӣ кам мекунад).

Бастабандӣ

Ҳангоми бастабандӣ ҳамаи файлҳои директорияи басташуда скан карда мешаванд, маблағи хэши онҳо ҳисоб карда мешаванд ва агар ин маблағ дар яке аз HashPackages маълум ёфт шавад, он гоҳ метамаълумот дар бораи файл (ном, хэш, ҳуқуқи дастрасӣ ва ғ.) захира карда мешавад. дар файли махсуси .hashget-restore.json, ки он низ ба бойгонӣ дохил карда мешавад.

Дар соддатарин ҳолат, худи бастабандӣ аз қатрон мураккабтар нест:

hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data

Борфарорӣ

Кушодан дар ду марҳила анҷом дода мешавад. Аввал кушодани қатрони муқаррарӣ:

tar -xf mybackup.tar.gz -C /path/to/data

пас аз шабака барқарор кунед:

hashget -u /path/to/data

Ҳангоми барқарорсозӣ, hashget файли .hashget-restore.json-ро мехонад, бастаҳои лозимиро зеркашӣ мекунад, онҳоро мекушояд ва файлҳои заруриро хориҷ карда, онҳоро дар роҳҳои зарурӣ насб мекунад, бо соҳиби/гурӯҳ/иҷозатҳои зарурӣ.

Чизҳои душвортар

Он чизе ки дар боло тавсиф шудааст, аллакай барои онҳое кифоя аст, ки "ба мисли қатрон мехоҳанд, аммо Debian-и маро ба 4 мегабайт ҷамъ кунанд." Биёед баъдтар ба чизҳои мураккабтар назар кунем.

Индексатсия

Агар hashget умуман як HashPackage надошта бошад, он гоҳ он ҳеҷ чизро нусхабардорӣ карда наметавонад.

Шумо инчунин метавонед HashPackage-ро дастӣ эҷод кунед (оддӣ: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), аммо роҳи қулайтар вуҷуд дорад.

Барои ба даст овардани hashpackage зарурӣ, як марҳила вуҷуд дорад индексатсия (он бо фармон ба таври худкор иҷро карда мешавад --pack) ва эвристика. Ҳангоми индексатсия, hashget ҳар як файли пайдошударо ба ҳама эвристикаҳои дастрасе, ки ба он таваҷҷӯҳ доранд, "таъмин мекунад". Пас эвристика метавонад ҳама гуна бастаро барои сохтани HashPackage индексатсия кунад.

Масалан, эвристикаи Debian файли /var/lib/dpkg/status-ро дӯст медорад ва бастаҳои насбшудаи debian-ро муайян мекунад ва агар онҳо индексатсия нашуда бошанд (барои онҳо HashPackage сохта нашудааст), онҳоро зеркашӣ ва индексатсия мекунад. Натиҷа таъсири хеле хуб аст - hashget ҳамеша OS-ҳои Debian-ро самаранок нусхабардорӣ мекунад, ҳатто агар онҳо бастаҳои навтарин дошта бошанд.

Файлҳои ишора

Агар шабакаи шумо баъзе аз бастаҳои хусусии шумо ё бастаи ҷамъиятиро, ки ба эвристикаи hashget дохил карда нашудааст, истифода барад, шумо метавонед ба он файли маслиҳати hashget-hint.json-ро ба таври зерин илова кунед:

{
    "project": "wordpress.org",
    "url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}

Минбаъд, ҳар дафъае, ки бойгонӣ сохта мешавад, баста индексатсия карда мешавад (агар он қаблан набуда бошад) ва файлҳои бастаҳо аз бойгонӣ нусхабардорӣ карда мешаванд. Ҳеҷ гуна барномасозӣ лозим нест, ҳама чизро аз vim анҷом додан мумкин аст ва дар ҳар як нусха захира кунед. Лутфан таваҷҷӯҳ намоед, ки ба шарофати равиши ҳаш ҷамъ, агар баъзе файлҳои баста ба таври маҳаллӣ тағир дода шаванд (масалан, файли конфигуратсия иваз карда шавад), он гоҳ файлҳои тағирёфта дар бойгонӣ "чун мавҷуд аст" захира карда мешаванд ва бурида намешаванд.

Агар баъзе бастаҳои шахсии шумо давра ба давра нав карда шаванд, аммо тағиротҳо он қадар калон набошанд, шумо метавонед танҳо барои версияҳои асосӣ ишора кунед. Масалан, дар версияи 1.0 онҳо ишорае карданд, ки ба mypackage-1.0.tar.gz ишора мекунад ва он комилан нусхабардорӣ карда мешавад, баъд версияи 1.1-ро бароварданд, ки каме фарқ мекунад, аммо ишора нав карда нашудааст. Ин дуруст аст. Танҳо файлҳое, ки ба версияи 1.0 мувофиқанд (барқарор кардан мумкин аст) нусхабардорӣ карда мешаванд.

Эвристика, ки файли ишораро коркард мекунад, намунаи хуб барои фаҳмидани механизми дохилии кор кардани эвристика мебошад. Он танҳо файлҳои hashget-hint.json (ё .hashget-hint.json бо нуқта) коркард мекунад ва ҳамаи дигаронро нодида мегирад. Аз ин файл он муайян мекунад, ки кадом URL-и баста бояд индексатсия карда шавад ва hashget онро индексатсия мекунад (агар он аллакай ин корро накарда бошад)

HashServer

Ҳангоми эҷод кардани нусхаҳои эҳтиётӣ индексатсияи пурра хеле меҳнатталаб хоҳад буд. Барои ин, шумо бояд ҳар як бастаро зеркашӣ кунед, онро кушоед ва индексатсия кунед. Аз ин рӯ, hashget як схемаро бо HashServer. Вақте ки бастаи насбшудаи Debian муайян карда мешавад, агар он дар HashPackage маҳаллӣ ёфт нашавад, аввал кӯшиш карда мешавад, ки HashPackage-ро аз сервери hash зеркашӣ кунад. Ва танҳо агар ин кор накунад, hashget худ бастаро зеркашӣ ва ҳаш мекунад (ва онро ба hashserver бор мекунад, то hashserver дар оянда онро таъмин кунад).

HashServer як унсури ихтиёрии схема аст, муҳим нест, он танҳо барои суръат ва кам кардани сарбории анборҳо хидмат мекунад. Ба осонӣ ғайрифаъол (ихтиёрӣ --hashserver бе параметрҳо). Илова бар ин, шумо метавонед ба осонӣ хэшсервери худро созед.

Нусхаҳои афзоянда ва дифференсиалӣ, кӯҳнашавии ба нақша гирифташуда

hashget сохтани диаграммаро хеле осон мекунад нусхаҳои эҳтиётӣ ва дифференсиалӣ. Чаро мо худи нусхаи эҳтиётии худро (бо ҳама файлҳои беназири худ) индексатсия намекунем? Як даста --submit ва шумо тамом шудед! Нусхаи навбатӣ, ки hashget эҷод мекунад, файлҳои ин бойгониро дар бар намегирад.

Аммо ин як равиши хеле хуб нест, зеро маълум мешавад, ки ҳангоми барқарорсозӣ мо бояд ҳамаи нусхаҳои hashget-ро дар тамоми таърих кашем (агар ҳар кадоме ҳадди аққал як файли беназир дошта бошад). Барои ин механизм вуҷуд дорад фарсуда шудани нусхахои ба накша гирифташуда. Ҳангоми индексатсия, шумо метавонед мӯҳлати анҷоми HashPackage -ро муайян кунед --expires 2019-06-01, ва баъд аз ин сана (аз соати 00:00) истифода намешавад. Худи бойгонӣ пас аз ин сана нест карда намешавад (Гарчанде ки hashget метавонад ба осонӣ URL-и ҳама нусхаҳои эҳтиётиро нишон диҳад, ки дар айни замон ё дар ҳама гуна сана пӯсидаанд/пӯсида мешаванд).

Масалан, агар мо дар 1-уми пурра нусхабардорӣ кунем ва онро то охири моҳ индексатсия кунем, мо схемаи эҳтиётии дифференсиалӣ мегирем.

Агар мо нусхаҳои эҳтиётии навро ҳамин тавр индексатсия кунем, схемаи захираҳои афзоянда пайдо мешавад.

Баръакси схемаҳои анъанавӣ, hashget ба шумо имкон медиҳад, ки якчанд манбаъҳои асосиро истифода баред. Нусхаи эҳтиётӣ ҳам аз ҳисоби кам кардани файлҳо аз нусхаҳои қаблӣ (агар вуҷуд дошта бошад) ва файлҳои ҷамъиятӣ (чизе ки мумкин аст бор карда шавад) кам карда мешавад.

Агар бо ягон сабаб мо ба эътимоднокии захираҳои Debian бовар накунем (https://snapshot.debian.org/) ё паҳнкунии дигарро истифода мебарад, мо метавонем танҳо як маротиба бо тамоми бастаҳо нусхаи эҳтиётии пурра созем ва сипас ба он такя кунем (бо хомӯш кардани эвристика). Ҳоло, агар ҳамаи серверҳои дистрибюторҳои мо барои мо дастнорас шаванд (дар Интернети сувенирӣ ё дар вақти апокалипсиси зомби), аммо нусхаҳои эҳтиётии мо дурустанд, мо метавонем аз ҳама гуна нусхаҳои эҳтиётии кӯтоҳе, ки танҳо ба нусхаҳои қаблии мо такя мекунад, барқарор кунем. .

Hashget танҳо ба манбаъҳои боэътимоди барқарорсозӣ мувофиқи салоҳдиди шумо такя мекунад. Онҳое, ки шумо боварӣ доред, истифода мешаванд.

FilePool ва пирях

Механизм FilePool ба шумо имкон медиҳад, ки пайваста бо серверҳои беруна барои зеркашии бастаҳо тамос нагиред, балки бастаҳоро аз директорияи маҳаллӣ ё сервери корпоративӣ истифода баред, масалан:

$ hashget -u . --pool /tmp/pool

ё

$ hashget -u . --pool http://myhashdb.example.com/

Барои сохтани ҳавз дар директорияи маҳаллӣ, ба шумо танҳо лозим аст, ки директория эҷод кунед ва файлҳоро ба он партоед, худи hashget он чизеро, ки барои худ лозим аст, бо истифода аз hasheҳо пайдо мекунад. Барои дастрас кардани ҳавз тавассути HTTP, шумо бояд аломатҳоро бо роҳи махсус эҷод кунед; ин бо як фармон анҷом дода мешавад (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). Худи HTTP FilePool файлҳои статикӣ аст, бинобар ин ҳама гуна веб-сервери оддӣ метавонад ба он хидмат расонад, сарбории сервер қариб сифр аст.

Бо шарофати FilePool, шумо метавонед на танҳо http(ҳо)-ро ҳамчун захираҳои асосӣ истифода баред, балки инчунин барои мисол, Пиряхи Амазонка.

Пас аз бор кардани нусхаи эҳтиётӣ ба пирях, мо ID-и боркунии онро мегирем ва онро ҳамчун URL истифода мебарем. Барои намуна:

hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01

Акнун нусхаҳои эҳтиётии нав (дифференсиалӣ) ба ин нусха асос ёфта, кӯтоҳтар хоҳанд шуд. Пас аз кушодани diffbackup, мо мебинем, ки он ба кадом захираҳо такя мекунад:

hashget --info /tmp/unpacked/ list

ва танҳо як скрипти ҷилдиро барои зеркашии ҳамаи ин файлҳо аз пирях ба ҳавз истифода баред ва барқарорсозии муқаррариро иҷро кунед: hashget -u /tmp/unpacked —pool /tmp/pool

Оё бозӣ ба шамъ меарзад?

Дар соддатарин ҳолат, шумо танҳо барои нусхаҳои эҳтиётӣ камтар пардохт мекунед (агар шумо онҳоро дар ҷои абр барои пул нигоҳ доред). Шояд хеле, хеле камтар.

Аммо ин ягона чизе нест. Миқдор ба сифат табдил меёбад. Шумо метавонед аз ин истифода баред, то нақшаи эҳтиётии худро такмил диҳед. Масалан, азбаски нусхаҳои эҳтиётии мо ҳоло кӯтоҳтаранд, мо метавонем нусхаҳои эҳтиётии ҳармоҳа, балки ҳаррӯзаро эҷод кунем. Онхоро мисли пештара на шаш мох, балки 5 сол нигох доред. Пештар шумо онро дар анбори суст, вале арзони "сард" нигоҳ медоштед (Прьях), акнун шумо метавонед онро дар анбори гарм нигоҳ доред, ки аз он ҷо шумо ҳамеша метавонед нусхаи эҳтиётиро зуд зеркашӣ кунед ва онро дар тӯли чанд дақиқа барқарор кунед, на дар як рӯз.

Шумо метавонед эътимоднокии нигаҳдории эҳтиётиро зиёд кунед. Агар мо дар айни замон онхоро дар як анбор нигох дошта бошем, пас бо кам кардани хачми захирахо дар 2—3 анбор нигох дошта, дар сурати осеб дидани яке аз онхо бедард зинда монем.

Чӣ тавр кӯшиш кардан ва оғоз кардани истифода?

Ба саҳифаи gitlab равед https://gitlab.com/yaroslaff/hashget, бо як фармон насб кунед (pip3 install hashget[plugins]) ва танҳо хонед ва зуд оғоз кунед. Ман фикр мекунам, ки барои иҷрои ҳама корҳои оддӣ 10-15 дақиқа вақт лозим аст. Пас шумо метавонед кӯшиш кунед, ки мошинҳои виртуалии худро фишурда кунед, файлҳои ишоратӣ созед, агар лозим бошад, фишурдашавиро пурзӯртар созед, бо ҳавзҳо, базаи хэшҳои маҳаллӣ ва сервери hash бозӣ кунед, агар шумо таваҷҷӯҳ дошта бошед ва рӯзи дигар бубинед, ки андозаи нусхаи афзоянда чӣ гуна аст. дар болои дирӯз хоҳад буд.

Манбаъ: will.com

Илова Эзоҳ