Lleihau copïau wrth gefn 99.5% gyda hashget

hashget - mae'n rhad ac am ddim, ffynhonnell agored deduplicator yn gyfleustodau tebyg i archifydd sy'n eich galluogi i leihau maint y copïau wrth gefn yn sylweddol, yn ogystal â threfnu cynlluniau wrth gefn cynyddol a gwahaniaethol a mwy.

Dyma erthygl drosolwg i ddisgrifio'r nodweddion. Disgrifir y defnydd gwirioneddol o hashget (eithaf syml) yn README prosiect a dogfennaeth wiki.

Cymhariaeth

Yn ôl cyfraith y genre, fe ddechreuaf ar unwaith gyda'r dirgelwch - gan gymharu'r canlyniadau:

Sampl data
maint heb ei bacio
.tar.gz
hashget.tar.gz

WordPress- 5.1.1
43 Mb
11 Mb (26%)
155 Kb ( 0.3% )

Cnewyllyn Linux 5.0.4
934 Mb
161 Mb (20%)
4.7 Mb ( 0.5% )

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

Cefndir ar yr hyn y dylai copi wrth gefn delfrydol ac effeithiol fod

Bob tro roeddwn i'n gwneud copi wrth gefn o beiriant rhithwir newydd ei greu, roedd y teimlad fy mod yn gwneud rhywbeth o'i le wedi fy syfrdanu. Pam ydw i'n cael copi wrth gefn helaeth o'r system, lle mae fy nghreadigedd amhrisiadwy, amhrisiadwy yn index.html un llinell gyda'r testun “Helo fyd”?

Pam mae 16 MB /usr/sbin/mysqld yn fy nghop wrth gefn? A yw'n bosibl mewn gwirionedd fy mod yn y byd hwn yn cael yr anrhydedd o gadw'r ffeil bwysig hon, ac os byddaf yn methu, bydd yn cael ei golli i ddynoliaeth? Yn fwyaf tebygol na. Mae'n cael ei storio ar weinyddion debian hynod ddibynadwy (ni ellir cymharu ei ddibynadwyedd a'i amser hir â'r hyn y gallaf ei ddarparu), yn ogystal ag mewn copïau wrth gefn (miliynau ohonynt) gan weinyddwyr eraill. A oes gwir angen i ni greu 10+ copi 000af o'r ffeil bwysig hon i wella dibynadwyedd?

Yn gyffredinol hashget ac yn datrys y broblem hon. Pan fydd wedi'i bacio, mae'n creu copi wrth gefn bach iawn. Wrth ddadbacio - system wedi'i dadbacio'n llwyr, yn debyg i'r hyn y byddai tar -c / tar -x. (Mewn geiriau eraill, pecynnu di-golled yw hwn)

Sut mae hashget yn gweithio

Mae gan hashget y cysyniadau o Pecyn a HashPackage, gyda'u help mae'n cyflawni dad-ddyblygu.

pecyn (bag plastig). Ffeil (archif .deb neu .tar.gz fel arfer) y gellir ei llwytho i lawr yn ddiogel o'r Rhyngrwyd, ac y gellir cael un ffeil neu fwy ohoni.

Pecyn Hash — ffeil JSON fach yn cynrychioli Pecyn, gan gynnwys URL y pecyn a symiau hash (sha256) o ffeiliau ohono. Er enghraifft, ar gyfer pecyn mariadb-server-core 5 megabeit, dim ond 6 kilobytes yw maint yr hashpackage. Tua mil o weithiau yn llai.

Dyblygu — creu archif heb ffeiliau dyblyg (os yw'r dad-ddyblygwr yn gwybod ble y gellir lawrlwytho'r pecyn gwreiddiol, mae'n lleihau copïau dyblyg o'r archif).

Pecynnu

Wrth bacio, mae'r holl ffeiliau o'r cyfeiriadur sy'n cael eu pacio yn cael eu sganio, mae eu symiau hash yn cael eu cyfrifo, ac os yw'r swm i'w gael yn un o'r HashPackages hysbys, yna caiff metadata am y ffeil (enw, hash, hawliau mynediad, ac ati) ei gadw mewn ffeil arbennig .hashget-restore.json, a fydd hefyd yn cael ei chynnwys yn yr archif.

Yn yr achos symlaf, nid yw'r pecyn ei hun yn edrych yn fwy cymhleth na thar:

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

Dadbacio

Mae dadbacio yn cael ei wneud mewn dau gam. Yn gyntaf y dadbacio tar arferol:

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

yna adfer o'r rhwydwaith:

hashget -u /path/to/data

Wrth adfer, mae hashget yn darllen y ffeil .hashget-restore.json, yn lawrlwytho'r pecynnau angenrheidiol, yn eu dadbacio, ac yn echdynnu'r ffeiliau angenrheidiol, gan eu gosod yn y llwybrau gofynnol, gyda'r perchennog / grŵp / caniatâd gofynnol.

Pethau anoddach

Mae’r hyn a ddisgrifir uchod eisoes yn ddigon i’r rhai sydd “eisiau iddo fel tar, ond i bacio fy Debian i mewn i 4 megabeit.” Gadewch i ni edrych ar bethau mwy cymhleth yn nes ymlaen.

Mynegeio

Pe na bai gan hashget un HashPackage o gwbl, yna ni fyddai'n gallu dad-ddyblygu unrhyw beth.

Gallwch hefyd greu HashPackage â llaw (yn syml: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), ond mae ffordd fwy cyfleus.

Er mwyn cael y hashpackage angenrheidiol, mae llwyfan mynegeio (fe'i gweithredir yn awtomatig gyda'r gorchymyn --pack) A heuristics. Wrth fynegeio, mae hashget yn “bwydo” pob ffeil a ganfyddir i'r holl heuristics sydd ar gael sydd â diddordeb ynddi. Yna gall Heuristics fynegeio unrhyw Becyn i greu HashPackage.

Er enghraifft, mae hewristig Debian yn caru'r ffeil /var/lib/dpkg/status ac yn canfod pecynnau debian wedi'u gosod, ac os nad ydynt wedi'u mynegeio (nid oes HashPackage wedi'i greu ar eu cyfer), mae'n eu lawrlwytho a'u mynegeio. Mae'r canlyniad yn effaith braf iawn - bydd hashget bob amser yn dad-ddyblygu Debian OSes i bob pwrpas, hyd yn oed os oes ganddyn nhw'r pecynnau diweddaraf.

Ffeiliau awgrym

Os yw'ch rhwydwaith yn defnyddio rhai o'ch pecynnau perchnogol neu becyn cyhoeddus nad yw wedi'i gynnwys yn yr hashget heuristics, gallwch ychwanegu ffeil awgrym hashget-hint.json syml ato fel hyn:

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

Nesaf, bob tro y bydd archif yn cael ei greu, bydd y pecyn yn cael ei fynegeio (os nad yw wedi bod yn flaenorol), a bydd y ffeiliau pecyn yn cael eu dad-ddyblygu o'r archif. Nid oes angen rhaglennu, gellir gwneud popeth o vim ac arbed ym mhob copi wrth gefn. Sylwch, diolch i'r dull hash sum, os yw rhai ffeiliau o'r pecyn yn cael eu newid yn lleol (er enghraifft, mae ffeil ffurfweddu yn cael ei newid), yna bydd y ffeiliau wedi'u newid yn cael eu cadw yn yr archif “fel y mae” ac ni fyddant yn cael eu cwtogi.

Os yw rhai o'ch pecynnau eich hun yn cael eu diweddaru o bryd i'w gilydd, ond nad yw'r newidiadau'n fawr iawn, dim ond ar gyfer fersiynau mawr y gallwch chi awgrymu. Er enghraifft, yn fersiwn 1.0 fe wnaethant awgrym yn pwyntio at mypackage-1.0.tar.gz, a bydd yn cael ei ddad-ddyblygu'n llwyr, yna fe wnaethant ryddhau fersiwn 1.1, sydd ychydig yn wahanol, ond ni ddiweddarwyd yr awgrym. Mae'n iawn. Dim ond ffeiliau sy'n cyfateb (gellir eu hadfer i) fersiwn 1.0 sy'n cael eu dad-ddyblygu.

Mae'r hewristig sy'n prosesu'r ffeil awgrym yn enghraifft dda ar gyfer deall mecanwaith mewnol sut mae hewristeg yn gweithio. Mae'n prosesu ffeiliau hashget-hint.json yn unig (neu .hashget-hint.json gyda dot) ac mae'n anwybyddu pob un arall. O'r ffeil hon, mae'n penderfynu pa URL pecyn y dylid ei fynegeio, ac mae hashget yn ei fynegeio (os nad yw wedi gwneud hynny eisoes)

HashGweinydd

Byddai'n eithaf llafurddwys i berfformio mynegeio llawn wrth greu copïau wrth gefn. I wneud hyn, mae angen i chi lawrlwytho pob pecyn, ei ddadbacio, a'i fynegeio. Felly mae hashget yn defnyddio cynllun gyda HashGweinydd. Pan ddarganfyddir pecyn Debian wedi'i osod, os na chaiff ei ddarganfod yn yr HashPackage lleol, gwneir ymgais gyntaf i lawrlwytho'r HashPackage o'r gweinydd hash. A dim ond os nad yw hyn yn gweithio, mae hashget ei hun yn llwytho i lawr ac yn hashesu'r pecyn (a'i uwchlwytho i hashserver, fel bod hashserver yn ei ddarparu yn y dyfodol).

Mae HashServer yn elfen ddewisol o'r cynllun, nid yn hanfodol, mae'n gwasanaethu i gyflymu a lleihau'r llwyth ar y storfeydd yn unig. Hawdd anabl (dewisol --hashserver heb baramedrau). Yn ogystal, gallwch yn hawdd gwneud eich hashserver eich hun.

Copïau wrth gefn cynyddol a gwahaniaethol, darfodiad cynlluniedig

hashget yn ei gwneud hi'n hawdd iawn gwneud diagram copïau wrth gefn cynyddol a gwahaniaethol. Pam nad ydym yn mynegeio ein copi wrth gefn ei hun (gyda'n holl ffeiliau unigryw)? Un tîm --submit ac rydych chi wedi gorffen! Ni fydd y copi wrth gefn nesaf y mae hashget yn ei greu yn cynnwys ffeiliau o'r archif hon.

Ond nid yw hwn yn ddull da iawn, oherwydd efallai y bydd yn rhaid i ni dynnu pob copi wrth gefn hashget yn yr hanes cyfan wrth adfer (os yw pob un yn cynnwys o leiaf un ffeil unigryw). Mae mecanwaith ar gyfer hyn darfodiad cynlluniau wrth gefn. Wrth fynegeio, gallwch nodi dyddiad dod i ben HashPackage --expires 2019-06-01, ac ar ôl y dyddiad hwn (o 00:00), ni fydd yn cael ei ddefnyddio. Ni ellir dileu'r archif ei hun ar ôl y dyddiad hwn (Er y gall hashget ddangos URLs pob copi wrth gefn sydd / a fydd yn pydru ar hyn o bryd neu ar unrhyw ddyddiad yn gyfleus).

Er enghraifft, os byddwn yn gwneud copi wrth gefn llawn ar y 1af ac yn ei fynegeio gydag oes hyd at ddiwedd y mis, byddwn yn cael cynllun wrth gefn gwahaniaethol.

Os byddwn yn mynegeio copïau wrth gefn newydd yn yr un modd, bydd cynllun o gopïau wrth gefn cynyddrannol.

Yn wahanol i gynlluniau traddodiadol, mae hashget yn caniatáu ichi ddefnyddio sawl ffynhonnell sylfaenol. Bydd y copi wrth gefn yn cael ei leihau trwy leihau ffeiliau o gopïau wrth gefn blaenorol (os o gwbl) a chan ffeiliau cyhoeddus (yr hyn y gellir ei lawrlwytho).

Os nad ydym yn ymddiried yn ddibynadwyedd adnoddau Debian am ryw reswm (https://snapshot.debian.org/) neu'n defnyddio dosbarthiad arall, gallwn wneud copi wrth gefn llawn unwaith gyda'r holl becynnau, ac yna dibynnu arno (trwy analluogi heuristics). Nawr, os nad yw holl weinyddion ein dosraniadau ar gael i ni (ar y Rhyngrwyd cofroddion neu yn ystod apocalypse zombie), ond bod ein copïau wrth gefn mewn trefn, gallwn adennill o unrhyw wrth gefn diff byr sy'n dibynnu ar ein copïau wrth gefn cynharach yn unig .

Mae Hashget ond yn dibynnu ar ffynonellau adfer dibynadwy yn ôl eich disgresiwn CHI. Bydd y rhai rydych chi'n eu hystyried yn ddibynadwy yn cael eu defnyddio.

FilePool a Rhewlif

Mecanwaith Pwll Ffeil yn caniatáu ichi beidio â chysylltu â gweinyddwyr allanol yn gyson i lawrlwytho pecynnau, ond defnyddio pecynnau o gyfeiriadur lleol neu weinydd corfforaethol, er enghraifft:

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

neu

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

I wneud pwll mewn cyfeiriadur lleol, does ond angen i chi greu cyfeiriadur a thaflu ffeiliau i mewn iddo, bydd hashget ei hun yn dod o hyd i'r hyn sydd ei angen arno gan ddefnyddio'r hashes. I wneud y pwll yn hygyrch trwy HTTP, mae angen i chi greu symlinks mewn ffordd arbennig; gwneir hyn gydag un gorchymyn (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). Mae HTTP FilePool ei hun yn ffeiliau statig, felly gall unrhyw weinydd gwe syml ei wasanaethu, mae'r llwyth ar y gweinydd bron yn sero.

Diolch i FilePool, gallwch ddefnyddio nid yn unig adnoddau http(s) fel adnoddau sylfaenol, ond hefyd Er enghraifft, Rhewlif Amazon.

Ar ôl uwchlwytho'r copi wrth gefn i'r rhewlif, rydym yn cael ei ID Llwytho i fyny ac yn ei ddefnyddio fel URL. Er enghraifft:

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

Nawr bydd copïau wrth gefn newydd (gwahanol) yn seiliedig ar y copi wrth gefn hwn a byddant yn fyrrach. Ar ôl dadbacio'r copi wrth gefn, gallwn weld pa adnoddau y mae'n dibynnu arnynt:

hashget --info /tmp/unpacked/ list

a defnyddiwch sgript cragen i lawrlwytho'r holl ffeiliau hyn o Rhewlif i'r pwll a rhedeg yr adferiad arferol: hashget -u /tmp/dadbacio —pool /tmp/pool

Ydy'r gêm werth y gannwyll?

Yn yr achos symlaf, byddwch yn talu llai am gopïau wrth gefn (os ydych chi'n eu storio yn rhywle yn y cwmwl am arian). Efallai llawer, llawer llai.

Ond nid dyna'r unig beth. Mae maint yn troi'n ansawdd. Gallwch ddefnyddio hwn i gael uwchraddiad o ansawdd uchel i'ch cynllun wrth gefn. Er enghraifft, gan fod ein copïau wrth gefn bellach yn fyrrach, ni allwn wneud copïau wrth gefn misol, ond rhai dyddiol. Storiwch nhw nid am chwe mis, fel o'r blaen, ond am 5 mlynedd. Yn flaenorol, fe wnaethoch chi ei storio mewn storfa “oer” araf ond rhad (Rhewlif), nawr gallwch chi ei storio mewn storfa boeth, lle gallwch chi bob amser lawrlwytho copi wrth gefn yn gyflym a'i adfer mewn munudau, nid mewn diwrnod.

Gallwch gynyddu dibynadwyedd storio wrth gefn. Os ydym yn eu storio ar hyn o bryd mewn un cyfleuster storio, yna trwy leihau nifer y copïau wrth gefn, byddwn yn gallu eu storio mewn 2-3 o gyfleusterau storio a goroesi'n ddi-boen os bydd un ohonynt yn cael ei niweidio.

Sut i geisio dechrau defnyddio?

Ewch i dudalen gitlab https://gitlab.com/yaroslaff/hashget, gosod gydag un gorchymyn (pip3 install hashget[plugins]) a dim ond darllen a gweithredu cyflym-cychwyn. Rwy'n credu y bydd yn cymryd 10-15 munud i wneud yr holl bethau syml. Yna gallwch geisio cywasgu eich peiriannau rhithwir, gwneud ffeiliau awgrym os oes angen i wneud y cywasgu yn gryfach, chwarae gyda phyllau, cronfa ddata hash leol a gweinydd hash os oes gennych ddiddordeb, a thrannoeth gweld beth yw maint y copi wrth gefn cynyddrannol bydd ar ben ddoe.

Ffynhonnell: hab.com

Ychwanegu sylw