{"id":87758,"date":"2020-07-10T01:41:58","date_gmt":"2020-07-09T23:41:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye"},"modified":"2020-07-10T01:41:58","modified_gmt":"2020-07-09T23:41:58","slug":"kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","title":{"rendered":"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/4d853e314dfea596b45a6aff00238bea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Takto vypad\u00e1 redundance<\/em><\/p>\n<p><\/p>\n<p>K\u00f3dy redundance* se \u0161iroce pou\u017e\u00edvaj\u00ed v po\u010d\u00edta\u010dov\u00fdch syst\u00e9mech pro zv\u00fd\u0161en\u00ed spolehlivosti ukl\u00e1d\u00e1n\u00ed dat. V Yandexu se pou\u017e\u00edvaj\u00ed v mnoha projektech. Nap\u0159\u00edklad pou\u017eit\u00ed k\u00f3d\u016f redundance m\u00edsto replikace v na\u0161em intern\u00edm objektov\u00e9m \u00falo\u017ei\u0161ti \u0161et\u0159\u00ed miliony bez sn\u00ed\u017een\u00ed spolehlivosti. P\u0159esto je pochopiteln\u00e9 vysv\u011btlen\u00ed toho, jak k\u00f3dy redundance funguj\u00ed, velmi vz\u00e1cn\u00e9. Z\u00e1jemci se \u010dasto pot\u00fdkaj\u00ed s n\u00e1sleduj\u00edc\u00edm (z <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%B4_%D0%A0%D0%B8%D0%B4%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%BC%D0%BE%D0%BD%D0%B0\">Wikipedie<\/a><\/noindex>):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/c5e592acd8c1e113c099357d1ba48d5c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jmenuji se Vadim, v Yandexu se zab\u00fdv\u00e1m v\u00fdvojem intern\u00edho objektov\u00e9ho \u00falo\u017ei\u0161t\u011b MDS. V tomto \u010dl\u00e1nku jednodu\u0161e pop\u00ed\u0161u teoretick\u00e9 z\u00e1klady k\u00f3d\u016f redundance (k\u00f3d\u016f Reed-Solomon a LRC). Vysv\u011btl\u00edm, jak to funguje, bez slo\u017eit\u00e9 matematiky a vz\u00e1cn\u00e9 terminologie. Na konci uvedu p\u0159\u00edklady pou\u017eit\u00ed k\u00f3d\u016f redundance v Yandexu.<\/p>\n<p><\/p>\n<p>N\u011bkter\u00e9 matematick\u00e9 detaily nebudu podrobn\u011b rozeb\u00edrat, ale poskytnu odkazy pro ty, kte\u0159\u00ed se cht\u011bj\u00ed pono\u0159it hloub\u011bji. R\u00e1d bych tak\u00e9 poznamenal, \u017ee n\u011bkter\u00e9 matematick\u00e9 definice nemus\u00ed b\u00fdt striktn\u00ed, proto\u017ee \u010dl\u00e1nek nen\u00ed zam\u011b\u0159en na matematiky, ale na in\u017een\u00fdry, kte\u0159\u00ed cht\u011bj\u00ed pochopit podstatu probl\u00e9mu.<\/p>\n<p><\/p>\n<p>* V anglicky mluv\u00edc\u00ed literatu\u0159e se k\u00f3dy redundance \u010dasto naz\u00fdvaj\u00ed erasure codes.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"1-sut-kodov-izbytochnosti\">1. Podstata k\u00f3d\u016f redundance<\/h1>\n<p><\/p>\n<p>Podstata v\u0161ech k\u00f3d\u016f redundance je maxim\u00e1ln\u011b jednoduch\u00e1: uchov\u00e1vat (nebo p\u0159en\u00e1\u0161et) data tak, aby nezmizela p\u0159i vzniku chyb (poruch\u00e1ch disk\u016f, chyb\u00e1ch p\u0159enosu dat atd.). <\/p>\n<p><\/p>\n<p>Ve v\u011bt\u0161in\u011b* k\u00f3d\u016f redundance jsou data rozd\u011blena na n blok\u016f, pro kter\u00e9 se po\u010d\u00edt\u00e1 m blok\u016f k\u00f3d\u016f redundance, celkem tedy vznikne n + m blok\u016f. K\u00f3dy redundance jsou konstruov\u00e1ny tak, aby bylo mo\u017en\u00e9 obnovit n blok\u016f dat, p\u0159i\u010dem\u017e je t\u0159eba pouze \u010d\u00e1st z n + m blok\u016f. D\u00e1le se budeme zab\u00fdvat pouze blokov\u00fdmi k\u00f3dy redundance, tedy takov\u00fdmi, kde jsou data rozd\u011blena na bloky.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/1273b4643f915dd615026ec38ca56473.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aby obnovili v\u0161echna n datov\u00e9 bloky, je t\u0159eba m\u00edt alespo\u0148 n z n + m blok\u016f, proto\u017ee nen\u00ed mo\u017en\u00e9 z\u00edskat n blok\u016f, pokud m\u00e1te pouze n-1 blok (v takov\u00e9m p\u0159\u00edpad\u011b byste museli 1 blok vz\u00edt z \u00abvzduchu\u00bb). Sta\u010d\u00ed n libovoln\u00fdch blok\u016f z n + m blok\u016f k obnoven\u00ed v\u0161ech dat? To z\u00e1vis\u00ed na typu redundatn\u00edch k\u00f3d\u016f, nap\u0159\u00edklad Reed-Solomonovy k\u00f3dy umo\u017e\u0148uj\u00ed obnovit v\u0161echna data pomoc\u00ed libovoln\u00fdch n blok\u016f, zat\u00edmco LRC redundatn\u00ed k\u00f3dy to ne v\u017edy umo\u017e\u0148uj\u00ed.<\/p>\n<p><\/p>\n<h3 id=\"hranenie-dannyh\">Ukl\u00e1d\u00e1n\u00ed dat<\/h3>\n<p><\/p>\n<p>V syst\u00e9mech pro ukl\u00e1d\u00e1n\u00ed dat jsou obvykle ka\u017ed\u00fd z blok\u016f dat a bloky redundatn\u00edch k\u00f3d\u016f zapisov\u00e1ny na jednotliv\u00e9 disky. Pak p\u0159i poru\u0161e libovoln\u00e9ho disku je mo\u017en\u00e9 z\u00e1kladn\u00ed data st\u00e1le obnovit a p\u0159e\u010d\u00edst. Data lze obnovit i p\u0159i soub\u011b\u017en\u00e9m selh\u00e1n\u00ed v\u00edce disk\u016f.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh\">P\u0159enos dat<\/h3>\n<p><\/p>\n<p>Redundatn\u00ed k\u00f3dy lze pou\u017e\u00edt pro spolehliv\u00fd p\u0159enos dat v nespolehliv\u00e9 s\u00edti. P\u0159en\u00e1\u0161en\u00e1 data se d\u011bl\u00ed na bloky a pro n\u011b se po\u010d\u00edtaj\u00ed redundatn\u00ed k\u00f3dy. P\u0159es s\u00ed\u0165 se p\u0159en\u00e1\u0161ej\u00ed jak bloky dat, tak bloky redundatn\u00edch k\u00f3d\u016f. P\u0159i vzniku chyb v libovoln\u00fdch bloc\u00edch (a\u017e do ur\u010dit\u00e9ho po\u010dtu blok\u016f) lze data i tak bezchybn\u011b p\u0159en\u00e9st po s\u00edti. Reed-Solomonovy k\u00f3dy se nap\u0159\u00edklad pou\u017e\u00edvaj\u00ed pro p\u0159enos dat po optick\u00fdch link\u00e1ch a v satelitn\u00ed komunikaci.<\/p>\n<p><\/p>\n<p>* Existuj\u00ed tak\u00e9 redundatn\u00ed k\u00f3dy, kde se data ned\u011bl\u00ed na bloky, nap\u0159\u00edklad Hammingovy k\u00f3dy a CRC k\u00f3dy, kter\u00e9 jsou \u0161iroce aplikov\u00e1ny pro p\u0159enos dat v s\u00edt\u00edch Ethernet. Jsou to k\u00f3dy pro k\u00f3dov\u00e1n\u00ed odoln\u00e9 v\u016f\u010di poruch\u00e1m, kter\u00e9 slou\u017e\u00ed k detekci chyb, nikoliv k jejich oprav\u011b (Hamming\u016fv k\u00f3d tak\u00e9 umo\u017e\u0148uje \u010d\u00e1ste\u010dnou opravu chyb).<\/p>\n<p><\/p>\n<h1 id=\"2-kody-rida--solomona\">2. Reed-Solomonovy k\u00f3dy<\/h1>\n<p><\/p>\n<p>Reed-Solomonovy k\u00f3dy jsou jedny z nejroz\u0161\u00ed\u0159en\u011bj\u0161\u00edch redundatn\u00edch k\u00f3d\u016f, kter\u00e9 byly vynalezeny u\u017e v 60. letech a poprv\u00e9 se \u0161iroce pou\u017e\u00edvaly v 80. letech p\u0159i s\u00e9riov\u00e9 v\u00fdrob\u011b kompaktn\u00edch disk\u016f.<\/p>\n<p><\/p>\n<p>Dva kl\u00ed\u010dov\u00e9 ot\u00e1zky pro pochopen\u00ed Reed-Solomonov\u00fdch k\u00f3d\u016f jsou: 1) jak vytv\u00e1\u0159et bloky redundatn\u00edch k\u00f3d\u016f; 2) jak obnovit data pomoc\u00ed blok\u016f redundatn\u00edch k\u00f3d\u016f. Najdeme na n\u011b odpov\u011bdi.<br \/>\nAbychom to zjednodu\u0161ili, budeme d\u00e1le p\u0159edpokl\u00e1dat, \u017ee n=6 a m=4. Ostatn\u00ed sch\u00e9mata se posuzuj\u00ed analogicky.<\/p>\n<p><\/p>\n<h3 id=\"kak-sozdavat-bloki-kodov-izbytochnosti\">Jak vytv\u00e1\u0159et bloky redundatn\u00edch k\u00f3d\u016f<\/h3>\n<p><\/p>\n<p>Ka\u017ed\u00fd blok k\u00f3d\u016f redundance se pova\u017euje za nez\u00e1visl\u00fd na ostatn\u00edch. Pro v\u00fdpo\u010det ka\u017ed\u00e9ho bloku se pou\u017e\u00edv\u00e1 v\u0161ech n blok\u016f dat. Na sch\u00e9matu n\u00ed\u017ee X1-X6 jsou bloky dat, P1\u2013P4 jsou bloky k\u00f3d\u016f redundance.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/b4841e48a5f2f059376bb458a26c6235.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u0161echny bloky dat mus\u00ed m\u00edt stejnou velikost, pro zarovn\u00e1n\u00ed je mo\u017en\u00e9 pou\u017e\u00edt nulov\u00e9 bity. Z\u00edskan\u00e9 bloky k\u00f3d\u016f redundance budou m\u00edt stejnou velikost jako bloky dat. V\u0161echny bloky dat se d\u011bl\u00ed na slova (nap\u0159\u00edklad po 16 bitech). P\u0159edpokl\u00e1dejme, \u017ee jsme rozd\u011blili bloky dat na k slov. Pot\u00e9 budou v\u0161echny bloky k\u00f3d\u016f redundance tak\u00e9 rozd\u011bleny na k slov.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/fff9c998a760e3f05ef45497557888a9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pro v\u00fdpo\u010det i-t\u00e9ho slova ka\u017ed\u00e9ho bloku redundance se pou\u017eij\u00ed i-t\u00e1 slova v\u0161ech blok\u016f dat. Ta se spo\u010d\u00edtaj\u00ed podle n\u00e1sleduj\u00edc\u00edho vzorce:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/8f52209ef7f628c8a748325b1a30c2d4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zde hodnoty x p\u0159edstavuj\u00ed slova blok\u016f dat, p p\u0159edstavuj\u00ed slova blok\u016f k\u00f3d\u016f redundance, v\u0161echny alfa, beta, gamma a delta jsou speci\u00e1ln\u011b vybran\u00e1 \u010d\u00edsla, kter\u00e1 jsou stejn\u00e1 pro v\u0161echna i. Je nutn\u00e9 \u0159\u00edci, \u017ee v\u0161echny tyto hodnoty nejsou b\u011b\u017en\u00e1 \u010d\u00edsla, ale prvky Galoisova pole, operace +, -, *, \/ \u2013 nejsou to obvykl\u00e9 operace, jak je zn\u00e1me, ale speci\u00e1ln\u00ed operace zaveden\u00e9 nad prvky Galoisova pole.<\/p>\n<p><\/p>\n<h3 id=\"zachem-nuzhny-polya-galua\">Pro\u010d jsou pot\u0159eba Galoisova pole<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/94ed4514ae15b01e7869efdeb9a605c6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na prvn\u00ed pohled to vypad\u00e1 jednodu\u0161e: rozd\u011bl\u00edme data na bloky, bloky na slova, a pomoc\u00ed slov blok\u016f dat spo\u010d\u00edt\u00e1me slova blok\u016f k\u00f3d\u016f redundance \u2013 z\u00edsk\u00e1me bloky k\u00f3d\u016f redundance. Celkov\u011b to tak funguje, ale \u010dert je v detailech:<\/p>\n<p><\/p>\n<ol>\n<li>Jak je uvedeno v\u00fd\u0161e, velikost slova je fixn\u00ed, v na\u0161em p\u0159\u00edkladu 16 bit\u016f. Vzorce v\u00fd\u0161e pro k\u00f3dy Reed-Solomon jsou takov\u00e9, \u017ee p\u0159i pou\u017eit\u00ed b\u011b\u017en\u00fdch cel\u00fdch \u010d\u00edsel m\u016f\u017ee b\u00fdt v\u00fdsledek v\u00fdpo\u010dtu p nep\u0159edstaviteln\u00fd pomoc\u00ed slova povolen\u00e9 velikosti.<\/li>\n<li>P\u0159i obnov\u011b dat budou v\u00fd\u0161e uveden\u00e9 vzorce pova\u017eov\u00e1ny za soustavu rovnic, kterou je t\u0159eba vy\u0159e\u0161it pro obnoven\u00ed dat. P\u0159i \u0159e\u0161en\u00ed se m\u016f\u017ee objevit pot\u0159eba prov\u00e9st d\u011blen\u00ed cel\u00fdch \u010d\u00edsel mezi sebou, jeho\u017e v\u00fdsledkem bude re\u00e1ln\u00e9 \u010d\u00edslo, kter\u00e9 nelze p\u0159esn\u011b reprezentovat v po\u010d\u00edta\u010dov\u00e9 pam\u011bti.<\/li>\n<\/ol>\n<p><\/p>\n<p>Tyto probl\u00e9my br\u00e1n\u00ed pou\u017eit\u00ed cel\u00fdch \u010d\u00edsel pro Reed-Solomonovy k\u00f3dy. \u0158e\u0161en\u00ed probl\u00e9mu je origin\u00e1ln\u00ed a lze ho popsat takto: vymysleme speci\u00e1ln\u00ed \u010d\u00edsla, kter\u00e1 lze reprezentovat pomoc\u00ed slov pot\u0159ebn\u00e9 d\u00e9lky (nap\u0159\u00edklad 16 bit\u016f), a v\u00fdsledek v\u0161ech operac\u00ed prov\u00e1d\u011bn\u00fdch s nimi (s\u010d\u00edt\u00e1n\u00ed, od\u010d\u00edt\u00e1n\u00ed, n\u00e1soben\u00ed, d\u011blen\u00ed) bude tak\u00e9 reprezentov\u00e1n v po\u010d\u00edta\u010dov\u00e9 pam\u011bti pomoc\u00ed slov pot\u0159ebn\u00e9 d\u00e9lky.<\/p>\n<p><\/p>\n<p>Takov\u00e1 \"speci\u00e1ln\u00ed\" \u010d\u00edsla ji\u017e dlouho zkoum\u00e1 matematika a naz\u00fdvaj\u00ed se poli. Pole je mno\u017eina prvk\u016f se specifick\u00fdmi operacemi s\u010d\u00edt\u00e1n\u00ed, od\u010d\u00edt\u00e1n\u00ed, n\u00e1soben\u00ed a d\u011blen\u00ed.<\/p>\n<p><\/p>\n<p>Galoisova pole* jsou pole, pro kter\u00e1 existuje a je jedine\u010dn\u00fd v\u00fdsledek ka\u017ed\u00e9 operace (+, -, *, \/) pro libovoln\u00e9 dva prvky pole. Galoisova pole lze sestavit pro \u010d\u00edsla, kter\u00e1 jsou mocninami 2: 2, 4, 8, 16 atd. (ve skute\u010dnosti mocninami jak\u00e9hokoli prvo\u010d\u00edsla p, ale v praxi n\u00e1s zaj\u00edmaj\u00ed pouze mocniny 2). Nap\u0159\u00edklad pro slova o velikosti 16 bit\u016f je toto pole, kter\u00e9 obsahuje 65 536 prvk\u016f, pro ka\u017edou dvojici kter\u00fdch lze nal\u00e9zt v\u00fdsledek libovoln\u00e9 operace (+, -, *, \/). Hodnoty x, p, alfa, beta, gama, delta v uveden\u00fdch rovnic\u00edch pro v\u00fdpo\u010dty budou pova\u017eov\u00e1ny za prvky Galoisova pole.<\/p>\n<p><\/p>\n<p>T\u00edmto zp\u016fsobem m\u00e1me soustavu rovnic, pomoc\u00ed kter\u00e9 lze sestavit bloky k\u00f3d\u016f redundance naps\u00e1n\u00edm odpov\u00eddaj\u00edc\u00ed po\u010d\u00edta\u010dov\u00e9 programy. Pomoc\u00ed t\u00e9to soustavy rovnic lze tak\u00e9 prov\u00e9st obnoven\u00ed dat.<\/p>\n<p><\/p>\n<p>* To nen\u00ed striktn\u00ed definice, sp\u00ed\u0161e popis.<\/p>\n<p><\/p>\n<h3 id=\"kak-vosstanavlivat-dannye\">Jak obnovit data<\/h3>\n<p><\/p>\n<p>Obnoven\u00ed je pot\u0159eba, kdy\u017e z n + m blok\u016f chyb\u00ed \u010d\u00e1st blok\u016f. M\u016f\u017ee se jednat jak o bloky dat, tak o bloky k\u00f3d\u016f redundance. Chyb\u011bj\u00edc\u00ed bloky dat a\/nebo bloky k\u00f3d\u016f redundance budou znamenat, \u017ee v uveden\u00fdch rovnic\u00edch jsou nezn\u00e1m\u00e9 p\u0159\u00edslu\u0161n\u00e9 prom\u011bnn\u00e9 x a\/nebo p.<\/p>\n<p><\/p>\n<p>Rovnice pro Reed-Solomonovy k\u00f3dy lze pova\u017eovat za soustavu rovnic, v n\u00ed\u017e jsou v\u0161echny hodnoty alfa, beta, gama, delta konstanty, v\u0161echny x a p odpov\u00eddaj\u00edc\u00ed dostupn\u00fdm blok\u016fm jsou zn\u00e1m\u00e9 prom\u011bnn\u00e9, a ostatn\u00ed x a p jsou nezn\u00e1m\u00e9.<\/p>\n<p><\/p>\n<p>Nap\u0159\u00edklad, pokud jsou bloky dat 1, 2, 3 a blok k\u00f3d\u016f redundance 2 nedostupn\u00e9, pak pro i-tou skupinu slov bude n\u00e1sleduj\u00edc\u00ed soustava rovnic (nezn\u00e1m\u00e9 ozna\u010deny \u010derven\u011b):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/6f24804c3d34423f31796e43e9ae1203.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e1me syst\u00e9m \u010dty\u0159 rovnic se \u010dty\u0159mi nezn\u00e1m\u00fdmi, co\u017e znamen\u00e1, \u017ee jej m\u016f\u017eeme vy\u0159e\u0161it a obnovit data!<\/p>\n<p><\/p>\n<p>Z tohoto syst\u00e9mu rovnic vypl\u00fdv\u00e1 \u0159ada z\u00e1v\u011br\u016f o obnov\u011b dat pro k\u00f3dy Reed-Solomon (n blok\u016f dat, m blok\u016f redundance):<\/p>\n<p><\/p>\n<ul>\n<li>Data lze obnovit p\u0159i ztr\u00e1t\u011b jak\u00fdchkoli m blok\u016f nebo m\u00e9n\u011b. P\u0159i ztr\u00e1t\u011b v\u00edce ne\u017e m blok\u016f (m + 1 a v\u00edce) nelze data obnovit: nelze vy\u0159e\u0161it syst\u00e9m m rovnic s m + 1 nezn\u00e1m\u00fdmi. <\/li>\n<li>Pro obnovu i jednoho bloku dat je nutn\u00e9 pou\u017e\u00edt jak\u00e9koli n z zb\u00fdvaj\u00edc\u00edch blok\u016f, p\u0159i\u010dem\u017e lze pou\u017e\u00edt jak\u00fdkoli z k\u00f3d\u016f redundance.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"chto-eschyo-nuzhno-znat\">Co je\u0161t\u011b pot\u0159ebujete v\u011bd\u011bt<\/h3>\n<p><\/p>\n<p>V popisu v\u00fd\u0161e se vyh\u00fdb\u00e1m \u0159ad\u011b d\u016fle\u017eit\u00fdch ot\u00e1zek, jejich\u017e zkoum\u00e1n\u00ed vy\u017eaduje hlub\u0161\u00ed ponor do matematiky. Zejm\u00e9na nic ne\u0159\u00edk\u00e1m o n\u00e1sleduj\u00edc\u00edch:<\/p>\n<p><\/p>\n<ul>\n<li>Syst\u00e9m rovnic pro k\u00f3dy Reed-Solomon mus\u00ed m\u00edt (jedin\u00e9) \u0159e\u0161en\u00ed p\u0159i jak\u00fdchkoli kombinac\u00edch nezn\u00e1m\u00fdch (ne v\u00edce ne\u017e m nezn\u00e1m\u00fdch). Na z\u00e1klad\u011b t\u00e9to podm\u00ednky jsou vyb\u00edr\u00e1ny hodnoty alfa, beta, gamma a delta.<\/li>\n<li>Syst\u00e9m rovnic je t\u0159eba um\u011bt automaticky sestavovat (v z\u00e1vislosti na tom, kter\u00e9 bloky nejsou k dispozici) a \u0159e\u0161it.<\/li>\n<li>Je t\u0159eba vytvo\u0159it Galoisovo pole: pro danou d\u00e9lku slova um\u011bt naj\u00edt v\u00fdsledek jak\u00e9koli operace (+, -, *, \/) pro jak\u00e9koli dva prvky.<\/li>\n<\/ul>\n<p><\/p>\n<p>Na konci \u010dl\u00e1nku jsou odkazy na literaturu k t\u011bmto d\u016fle\u017eit\u00fdm ot\u00e1zk\u00e1m.<\/p>\n<p><\/p>\n<h3 id=\"vybor-n-i-m\">Volba n a m<\/h3>\n<p><\/p>\n<p>Jak prakticky vybrat n a m? V praxi se v syst\u00e9mech ukl\u00e1d\u00e1n\u00ed dat pou\u017e\u00edvaj\u00ed k\u00f3dy redundance pro \u00fasporu m\u00edsta, proto se m v\u017edy vyb\u00edr\u00e1 men\u0161\u00ed ne\u017e n. Jejich konkr\u00e9tn\u00ed hodnoty z\u00e1vis\u00ed na \u0159ad\u011b faktor\u016f, v\u010detn\u011b:<\/p>\n<p><\/p>\n<ul>\n<li>Spolehlivost ukl\u00e1d\u00e1n\u00ed dat. \u010c\u00edm v\u011bt\u0161\u00ed je m, t\u00edm v\u00edce poruch disk\u016f lze p\u0159ekonat, co\u017e znamen\u00e1 vy\u0161\u0161\u00ed spolehlivost.<\/li>\n<li>Redundance ukl\u00e1d\u00e1n\u00ed. \u010c\u00edm vy\u0161\u0161\u00ed je pom\u011br m \/ n, t\u00edm vy\u0161\u0161\u00ed bude redundance ukl\u00e1d\u00e1n\u00ed a t\u00edm dra\u017e\u0161\u00ed bude syst\u00e9m.<\/li>\n<li>\u010cas zpracov\u00e1n\u00ed dotaz\u016f. \u010c\u00edm v\u011bt\u0161\u00ed je sou\u010det n + m, t\u00edm del\u0161\u00ed bude \u010das odezvy na dotazy. Proto\u017ee pro \u010dten\u00ed dat (b\u011bhem obnovy) je t\u0159eba p\u0159e\u010d\u00edst n blok\u016f ulo\u017een\u00fdch na n r\u016fzn\u00fdch disc\u00edch, \u010das \u010dten\u00ed bude ur\u010den nejpomalej\u0161\u00edm diskem.<\/li>\n<\/ul>\n<p><\/p>\n<p>Krom\u011b toho ukl\u00e1d\u00e1n\u00ed dat v n\u011bkolika datov\u00fdch centrech klade dal\u0161\u00ed omezen\u00ed na v\u00fdb\u011br n a m: p\u0159i v\u00fdpadku 1 datov\u00e9ho centra mus\u00ed b\u00fdt data st\u00e1le dostupn\u00e1 pro \u010dten\u00ed. Nap\u0159\u00edklad p\u0159i ukl\u00e1d\u00e1n\u00ed dat ve 3 datov\u00fdch centrech mus\u00ed b\u00fdt spln\u011bna podm\u00ednka: m &gt;= n\/2, jinak m\u016f\u017ee nastat situace, kdy data nejsou dostupn\u00e1 pro \u010dten\u00ed p\u0159i v\u00fdpadku 1 datov\u00e9ho centra.<\/p>\n<p><\/p>\n<h1 id=\"3-lrc--local-reconstruction-codes\">3. LRC \u2014 Lok\u00e1ln\u00ed rekonstruk\u010dn\u00ed k\u00f3dy<\/h1>\n<p><\/p>\n<p>Pro obnoven\u00ed dat pomoc\u00ed Reed-Solomonov\u00fdch k\u00f3d\u016f je nutn\u00e9 pou\u017e\u00edt n libovoln\u00fdch blok\u016f dat. To je velmi v\u00fdznamn\u00e1 nev\u00fdhoda pro distribuovan\u00e9 syst\u00e9my ukl\u00e1d\u00e1n\u00ed dat, nebo\u0165 k obnoven\u00ed dat na jednom po\u0161kozen\u00e9m disku je t\u0159eba \u010d\u00edst data z v\u011bt\u0161iny ostatn\u00edch, co\u017e vytv\u00e1\u0159\u00ed velkou dodate\u010dnou z\u00e1t\u011b\u017e na disky a s\u00ed\u0165.<\/p>\n<p><\/p>\n<p>Nej\u010dast\u011bj\u0161\u00edmi chybami jsou nedostupnost jednoho bloku dat v d\u016fsledku poruchy nebo p\u0159et\u00ed\u017een\u00ed jednoho disku. Lze n\u011bjak sn\u00ed\u017eit nadbyte\u010dnou z\u00e1t\u011b\u017e pro obnovu dat v takov\u00e9m (nej\u010dast\u011bj\u0161\u00edm) p\u0159\u00edpad\u011b? Odpov\u011bd\u00ed je ano: existuj\u00ed speci\u00e1ln\u011b pro to navr\u017een\u00e9 LRC nadbyte\u010dn\u00e9 k\u00f3dy.<\/p>\n<p><\/p>\n<p>LRC (lok\u00e1ln\u00ed rekonstruk\u010dn\u00ed k\u00f3dy) jsou nadbyte\u010dn\u00e9 k\u00f3dy vymy\u0161len\u00e9 spole\u010dnost\u00ed Microsoft pro pou\u017eit\u00ed ve Windows Azure Storage. My\u0161lenka LRC je velmi jednoduch\u00e1: rozd\u011blit v\u0161echny bloky dat do dvou (nebo v\u00edce) skupin a po\u010d\u00edtat \u010d\u00e1st blok\u016f nadbyte\u010dn\u00fdch k\u00f3d\u016f pro ka\u017edou skupinu zvl\u00e1\u0161\u0165. T\u00edm bude \u010d\u00e1st blok\u016f nadbyte\u010dn\u00fdch k\u00f3d\u016f vypo\u010dtena pomoc\u00ed v\u0161ech blok\u016f dat (v LRC se naz\u00fdvaj\u00ed glob\u00e1ln\u00edmi nadbyte\u010dn\u00fdmi k\u00f3dy), a \u010d\u00e1st \u2014 pomoc\u00ed jedn\u00e9 ze dvou skupin blok\u016f dat (ty se naz\u00fdvaj\u00ed lok\u00e1ln\u00edmi nadbyte\u010dn\u00fdmi k\u00f3dy).<\/p>\n<p><\/p>\n<p>LRC je vyj\u00e1d\u0159eno t\u0159emi \u010d\u00edsly: n-r-l, kde n je po\u010det blok\u016f dat, r je po\u010det glob\u00e1ln\u00edch blok\u016f nadbyte\u010dn\u00fdch k\u00f3d\u016f, l je po\u010det lok\u00e1ln\u00edch blok\u016f nadbyte\u010dn\u00fdch k\u00f3d\u016f. Pro \u010dten\u00ed dat p\u0159i nedostupnosti jednoho bloku dat je t\u0159eba p\u0159e\u010d\u00edst pouze n\/l blok\u016f \u2014 co\u017e je lkr\u00e1t m\u00e9n\u011b ne\u017e u Reed-Solomonov\u00fdch k\u00f3d\u016f.<\/p>\n<p><\/p>\n<p>Pro p\u0159\u00edklad vezm\u011bme sch\u00e9ma LRC 6-2-2. X1\u2013X6 jsou 6 blok\u016f dat, P1, P2 jsou 2 glob\u00e1ln\u00ed bloky nadbyte\u010dnosti, P3, P4 jsou 2 m\u00edstn\u00ed bloky nadbyte\u010dnosti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/783f6d4b57b992c56385cdd07603cda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bloky nadbyte\u010dn\u00fdch k\u00f3d\u016f P1, P2 jsou po\u010d\u00edt\u00e1ny pomoc\u00ed v\u0161ech blok\u016f dat. Blok nadbyte\u010dn\u00e9ho k\u00f3du P3 \u2014 pomoc\u00ed blok\u016f dat X1\u2013X3, blok nadbyte\u010dn\u00e9ho k\u00f3du P4 \u2014 pomoc\u00ed blok\u016f dat X4\u2013X6.<\/p>\n<p><\/p>\n<p>Ostatn\u00ed se prov\u00e1d\u00ed v LRC obdobn\u011b jako u Reed-Solomonov\u00fdch k\u00f3d\u016f. Rovnice pro v\u00fdpo\u010det po\u010dtu slov blok\u016f k\u00f3d\u016f redundance budou n\u00e1sleduj\u00edc\u00ed:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dy redundance: zjednodu\u0161en\u011b o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data\" src=\"\/wp-content\/uploads\/2020\/07\/b32c8864fac0678014fc9a5abf490537.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pro v\u00fdb\u011br \u010d\u00edsel alfa, beta, gama, delta je t\u0159eba splnit \u0159adu podm\u00ednek, kter\u00e9 zaru\u010duj\u00ed mo\u017enost obnovy dat (tedy \u0159e\u0161en\u00ed soustavy rovnic). Podrobn\u011bji o nich lze \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf\">\u010dl\u00e1nku<\/a><\/noindex>.<br \/>\nTak\u00e9 v praxi se pro v\u00fdpo\u010det lok\u00e1ln\u00edch k\u00f3d\u016f redundance P3, P4 pou\u017e\u00edv\u00e1 operace XOR. <\/p>\n<p><\/p>\n<p>Z rovnic pro LRC vypl\u00fdv\u00e1 \u0159ada z\u00e1v\u011br\u016f:<\/p>\n<p><\/p>\n<ul>\n<li>Pro obnoven\u00ed jak\u00e9hokoli 1 bloku dat sta\u010d\u00ed p\u0159e\u010d\u00edst n\/l blok\u016f (n\/2 v na\u0161em p\u0159\u00edkladu).<\/li>\n<li>Pokud jsou nedostupn\u00e9 r + l bloky a v\u0161echny bloky pat\u0159\u00ed do jedn\u00e9 skupiny, data nelze obnovit. To lze snadno vysv\u011btlit na p\u0159\u00edkladu. P\u0159edpokl\u00e1dejme, \u017ee bloky X1\u2013X3 a P3 jsou nedostupn\u00e9: to je r + l blok\u016f z jedn\u00e9 skupiny, 4 v na\u0161em p\u0159\u00edpad\u011b. Potom m\u00e1me soustavu 3 rovnic se 4 nezn\u00e1m\u00fdmi, kterou nelze vy\u0159e\u0161it.<\/li>\n<li>Ve v\u0161ech ostatn\u00edch p\u0159\u00edpadech nedostupnosti r + l blok\u016f (kdy je z ka\u017ed\u00e9 skupiny dostupn\u00fd alespo\u0148 jeden blok) lze data v LRC obnovit.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tak\u017ee LRC p\u0159evy\u0161uje Reed-Solomonovy k\u00f3dy v obnov\u011b dat po jednotliv\u00fdch chyb\u00e1ch. U Reed-Solomonov\u00fdch k\u00f3d\u016f je pro obnovu i jedin\u00e9ho bloku dat pot\u0159eba pou\u017e\u00edt n blok\u016f, zat\u00edmco v LRC sta\u010d\u00ed pro obnovu jednoho bloku dat pou\u017e\u00edt n\/l blok\u016f (n\/2 v na\u0161em p\u0159\u00edkladu). Na druh\u00e9 stran\u011b v\u0161ak LRC zaost\u00e1v\u00e1 za Reed-Solomonov\u00fdmi k\u00f3dy v maxim\u00e1ln\u00edm po\u010dtu povolen\u00fdch chyb. V p\u0159\u00edkladech v\u00fd\u0161e vzorci Reed-Solomon mohou obnovit data p\u0159i libovoln\u00fdch 4 chyb\u00e1ch, a pro LRC existuj\u00ed 2 kombinace 4 chyb, kdy nelze data obnovit.<\/p>\n<p><\/p>\n<p>Co je d\u016fle\u017eit\u011bj\u0161\u00ed \u2014 z\u00e1vis\u00ed na konkr\u00e9tn\u00ed situaci, ale \u010dasto \u00faspora redundance, kterou LRC poskytuje, p\u0159ev\u00e1\u017e\u00ed nad m\u00edrn\u011b men\u0161\u00ed spolehlivost\u00ed uchov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<h1 id=\"4-drugie-kody-izbytochnosti\">4. Dal\u0161\u00ed k\u00f3dy redundance<\/h1>\n<p><\/p>\n<p>Krom\u011b Reed-Solomonov\u00fdch a LRC k\u00f3d\u016f existuje mnoho dal\u0161\u00edch k\u00f3d\u016f redundance. R\u016fzn\u00e9 k\u00f3dy redundance pou\u017e\u00edvaj\u00ed r\u016fznou matematiku. Zde je n\u011bkolik dal\u0161\u00edch k\u00f3d\u016f redundance:<\/p>\n<p><\/p>\n<ul>\n<li>K\u00f3d redundance pomoc\u00ed oper\u00e1toru XOR. Operace XOR se prov\u00e1d\u00ed na n bloc\u00edch dat a vznik\u00e1 1 blok k\u00f3d\u016f redundance, co\u017e znamen\u00e1 sch\u00e9ma n+1 (n blok\u016f dat, 1 k\u00f3d redundance). Pou\u017e\u00edv\u00e1 se v <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/RAID#RAID_5\">RAID 5<\/a><\/noindex>, kde jsou bloky dat a k\u00f3d\u016f redundance cyklicky zapisov\u00e1ny na v\u0161echny disky pole.<\/li>\n<li>Algoritmus even-odd zalo\u017een\u00fd na operaci XOR. Umo\u017e\u0148uje vytvo\u0159it 2 bloky redundantn\u00edch k\u00f3d\u016f, tedy sch\u00e9ma n+2.<\/li>\n<li>Algoritmus STAR, zalo\u017een\u00fd na operaci XOR. Umo\u017e\u0148uje vytvo\u0159it 3 bloky redundantn\u00edch k\u00f3d\u016f, tedy sch\u00e9ma n+3.<\/li>\n<li>Pyramide codes \u2014 dal\u0161\u00ed redundantn\u00ed k\u00f3dy od Microsoftu.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"5-ispolzovanie-v-yandekse\">5. Pou\u017eit\u00ed v Yandexu<\/h1>\n<p><\/p>\n<p>N\u011bkolik infrastrukturn\u00edch projekt\u016f Yandexu pou\u017e\u00edv\u00e1 redundantn\u00ed k\u00f3dy pro spolehliv\u00e9 uchov\u00e1n\u00ed dat. Zde je n\u011bkolik p\u0159\u00edklad\u016f:<\/p>\n<p><\/p>\n<ul>\n<li>Intern\u00ed objektov\u00e9 \u00falo\u017ei\u0161t\u011b MDS, o kter\u00e9m jsem psal na za\u010d\u00e1tku \u010dl\u00e1nku.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/\">YT<\/a><\/noindex> \u2014 MapReduce syst\u00e9m Yandexu.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=FwLvAuOSIOU\">YDB<\/a><\/noindex> (Yandex DataBase) \u2014 distribuovan\u00e1 datab\u00e1ze newSQL.<\/li>\n<\/ul>\n<p><\/p>\n<p>V MDS se pou\u017e\u00edvaj\u00ed redundantn\u00ed k\u00f3dy LRC, sch\u00e9ma 8-2-2. Data s redundantn\u00edmi k\u00f3dy jsou ulo\u017eena na 12 r\u016fzn\u00fdch disc\u00edch v r\u016fzn\u00fdch serverech ve 3 r\u016fzn\u00fdch DC: po 4 servery v ka\u017ed\u00e9m DC. O tom si m\u016f\u017eete p\u0159e\u010d\u00edst v\u00edce v <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806\/\">\u010dl\u00e1nku<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>V YT se pou\u017e\u00edvaj\u00ed jak Reid-Solomonovy k\u00f3dy (sch\u00e9ma 6-3), kter\u00e9 byly implementov\u00e1ny jako prvn\u00ed, tak redundantn\u00ed k\u00f3dy LRC (sch\u00e9ma 12-2-2), p\u0159i\u010dem\u017e LRC je preferovan\u00fd zp\u016fsob uchov\u00e1v\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p>V YDB se pou\u017e\u00edvaj\u00ed redundantn\u00ed k\u00f3dy zalo\u017een\u00e9 na even-odd (sch\u00e9ma 4-2). O redundantn\u00edch k\u00f3dech v YDB ji\u017e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8\">bylo zm\u00edn\u011bno na Highload<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Pou\u017eit\u00ed r\u016fzn\u00fdch sch\u00e9mat redundantn\u00edch k\u00f3d\u016f je podm\u00edn\u011bno r\u016fzn\u00fdmi po\u017eadavky na syst\u00e9my. Nap\u0159\u00edklad v MDS jsou data uchov\u00e1van\u00e1 pomoc\u00ed LRC um\u00edst\u011bna z\u00e1rove\u0148 ve 3 DC. Je pro n\u00e1s d\u016fle\u017eit\u00e9, aby data z\u016fstala dostupn\u00e1 pro \u010dten\u00ed p\u0159i v\u00fdpadku jak\u00e9hokoli DC, proto mus\u00ed b\u00fdt bloky rozlo\u017eeny po DC tak, aby p\u0159i nedostupnosti jak\u00e9hokoli DC bylo maxim\u00e1ln\u011b nedostupn\u00fdch blok\u016f m\u00e9n\u011b ne\u017e povolen\u00e9. V sch\u00e9matu 8-2-2 lze um\u00edstit po 4 bloky do ka\u017ed\u00e9ho DC, tak\u017ee p\u0159i odpojen\u00ed jak\u00e9hokoli DC budou nedostupn\u00e9 4 bloky, a data budou moci b\u00fdt \u010dtena. A\u0165 u\u017e zvol\u00edme jak\u00e9koli sch\u00e9ma p\u0159i rozlo\u017een\u00ed ve 3 DC, mus\u00ed platit (r + l) \/ n &gt;= 0,5, tedy redundance uchov\u00e1v\u00e1n\u00ed bude minim\u00e1ln\u011b 50%.<\/p>\n<p><\/p>\n<p>V YT je situace jin\u00e1: ka\u017ed\u00fd YT cluster je um\u00edst\u011bn zcela v 1 DC (r\u016fzn\u00e9 cluster v r\u016fzn\u00fdch DC), tak\u017ee tam nen\u00ed takov\u00e9 omezen\u00ed. Sch\u00e9ma 12-2-2 poskytuje redundanci 33%, tedy uchov\u00e1n\u00ed dat je levn\u011bj\u0161\u00ed, p\u0159i\u010dem\u017e mohou p\u0159e\u017e\u00edt a\u017e 4 sou\u010dasn\u00e9 v\u00fdpadky disk\u016f, stejn\u011b jako sch\u00e9ma v MDS.<\/p>\n<p><\/p>\n<p>Existuje je\u0161t\u011b mnoho dal\u0161\u00edch aspekt\u016f vyu\u017eit\u00ed k\u00f3d\u016f redundance v syst\u00e9mech ukl\u00e1d\u00e1n\u00ed a zpracov\u00e1n\u00ed dat: nuance obnovy dat, vliv obnovy na dobu vykon\u00e1v\u00e1n\u00ed dotaz\u016f, specifika z\u00e1pisu dat atd. Pl\u00e1nuji se podrobn\u011bji zab\u00fdvat t\u011bmito a dal\u0161\u00edmi aspekty praktick\u00e9ho pou\u017eit\u00ed k\u00f3d\u016f redundance, pokud bude t\u00e9ma zaj\u00edmav\u00e9.<\/p>\n<p><\/p>\n<h1 id=\"6-ssylki\">6. Odkazy<\/h1>\n<p><\/p>\n<ol>\n<li>S\u00e9rie \u010dl\u00e1nk\u016f o Ridu \u2013 Solomonov\u00fdch k\u00f3dech a Galoisov\u00fdch pol\u00edch: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yadro\/blog\/336286\/\">https:\/\/habr.com\/ru\/company\/yadro\/blog\/336286\/<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yadro\/blog\/341506\/\">https:\/\/habr.com\/ru\/company\/yadro\/blog\/341506\/<\/a><\/noindex><br \/>\nV nich je matematika podrobn\u011bji rozebr\u00e1na srozumiteln\u00fdm jazykem.<\/li>\n<li>\u010cl\u00e1nek od Microsoftu o LRC: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf\">https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf<\/a><\/noindex><br \/>\nV odd\u00edlu 2 je stru\u010dn\u011b vysv\u011btlena teorie, n\u00e1sleduje zkoum\u00e1n\u00ed praktick\u00fdch aplikac\u00ed LRC.<\/li>\n<li>Sch\u00e9ma even-odd: <noindex><a rel=\"nofollow\" href=\"https:\/\/people.eecs.berkeley.edu\/~kubitron\/courses\/cs262a-F12\/handouts\/papers\/p245-blaum.pdf\">https:\/\/people.eecs.berkeley.edu\/~kubitron\/courses\/cs262a-F12\/handouts\/papers\/p245-blaum.pdf<\/a><\/noindex><\/li>\n<li>Sch\u00e9ma STAR: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/legacy\/event\/fast05\/tech\/full_papers\/huang\/huang.pdf\">https:\/\/www.usenix.org\/legacy\/event\/fast05\/tech\/full_papers\/huang\/huang.pdf<\/a><\/noindex><\/li>\n<li>Pyramidov\u00e9 k\u00f3dy: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/pyramid-codes-flexible-schemes-to-trade-space-for-access-efficiency-in-reliable-data-storage-systems\/\">https:\/\/www.microsoft.com\/en-us\/research\/publication\/pyramid-codes-flexible-schemes-to-trade-space-for-access-efficiency-in-reliable-data-storage-systems\/<\/a><\/noindex><\/li>\n<li>K\u00f3dy redundance v MDS: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806\">https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806<\/a><\/noindex> <\/li>\n<li>K\u00f3dy redundance v YT: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/\">https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/<\/a><\/noindex><\/li>\n<li>K\u00f3dy redundance v YDB: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8\">https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8<\/a><\/noindex><\/li>\n<\/ol>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/510050\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u041a\u043e\u0434\u044b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438* \u0448\u0438\u0440\u043e\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0434\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u0432 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0431\u0435\u0437 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0448\u0438\u0440\u043e\u043a\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u043e\u0434\u044b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e. \u0416\u0435\u043b\u0430\u044e\u0449\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87759,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87758","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\".\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0434\u044b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438: \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0438 \u0434\u0451\u0448\u0435\u0432\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-09T23:41:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-09T23:41:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 K\u00f3dy redundance: jednoduch\u00fdmi slovy o tom, jak spolehliv\u011b a levn\u011b uchov\u00e1vat data | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0434\u044b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438: \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0438 \u0434\u0451\u0448\u0435\u0432\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 | ProHoster","og:description":".","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-09T23:41:58+00:00","article:modified_time":"2020-07-09T23:41:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87758","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:44:06","updated":"2022-09-29 13:02:43","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/87758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=87758"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/87758\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/87759"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=87758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=87758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=87758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}