{"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\/sv\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","title":{"rendered":"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/4d853e314dfea596b45a6aff00238bea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>S\u00e5 h\u00e4r ser \u00f6verskottsdata ut<\/em><\/p>\n<p><\/p>\n<p>\u00d6verskottskoder* anv\u00e4nds i stor utstr\u00e4ckning i datorsystem f\u00f6r att \u00f6ka tillf\u00f6rlitligheten vid datalagring. P\u00e5 Yandex anv\u00e4nds de i m\u00e5nga projekt. Till exempel sparar anv\u00e4ndningen av \u00f6verskottskoder ist\u00e4llet f\u00f6r replikering i v\u00e5rt interna objektlagringssystem miljontals utan att minska tillf\u00f6rlitligheten. Men trots den utbredda anv\u00e4ndningen \u00e4r en begriplig beskrivning av hur \u00f6verskottskoder fungerar mycket s\u00e4llsynt. De som vill f\u00f6rst\u00e5 st\u00f6ter ofta p\u00e5 f\u00f6ljande (fr\u00e5n <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\">Wikipedia<\/a><\/noindex>):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/c5e592acd8c1e113c099357d1ba48d5c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jag heter Vadim, och p\u00e5 Yandex arbetar jag med utvecklingen av det interna objektlagringssystemet MDS. I denna artikel ska jag p\u00e5 ett enkelt s\u00e4tt beskriva de teoretiska grunderna f\u00f6r \u00f6verskottskoder (Reed-Solomon-koder och LRC). Jag kommer att f\u00f6rklara hur det fungerar utan komplicerad matematik och s\u00e4llsynta termer. I slutet kommer jag att ge exempel p\u00e5 anv\u00e4ndning av \u00f6verskottskoder i Yandex.<\/p>\n<p><\/p>\n<p>Jag kommer inte att g\u00e5 in p\u00e5 en rad matematiska detaljer, men jag ger l\u00e4nkar f\u00f6r dem som vill f\u00f6rdjupa sig mer. Jag noterar ocks\u00e5 att vissa matematiska definitioner kanske inte \u00e4r strikta, eftersom artikeln \u00e4r avsedd f\u00f6r ingenj\u00f6rer som vill f\u00f6rst\u00e5 k\u00e4rnan i fr\u00e5gan.<\/p>\n<p><\/p>\n<p>* I engelskspr\u00e5kig litteratur kallas \u00f6verskottskoder ofta f\u00f6r erasure codes.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"1-sut-kodov-izbytochnosti\">1. K\u00e4rnan i \u00f6verskottskoder<\/h1>\n<p><\/p>\n<p>K\u00e4rnan i alla \u00f6verskottskoder \u00e4r mycket enkel: att lagra (eller \u00f6verf\u00f6ra) data p\u00e5 ett s\u00e4tt som f\u00f6rhindrar dataf\u00f6rlust vid uppkomst av fel (diskfel, data\u00f6verf\u00f6ringsfel osv.). <\/p>\n<p><\/p>\n<p>I de flesta* \u00f6verskottskoder delas data upp i n datablokker, och f\u00f6r dessa ber\u00e4knas m \u00f6verskottskoder, vilket ger totalt n + m block. \u00d6verskottskoderna konstrueras s\u00e5 att man kan \u00e5terst\u00e4lla n datablokker genom att anv\u00e4nda endast en del av de n + m blocken. Nedan kommer vi endast att titta p\u00e5 block\u00f6verskottskoder, det vill s\u00e4ga s\u00e5dana d\u00e4r data delas upp i block.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/1273b4643f915dd615026ec38ca56473.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r att \u00e5terst\u00e4lla alla n datablok m\u00e5ste man ha minst n av n + m block, eftersom man inte kan f\u00e5 n block med endast n-1 block (i s\u00e5 fall skulle man beh\u00f6va ta 1 block \"fr\u00e5n ingenstans\"). \u00c4r n godtyckliga block av n + m block tillr\u00e4ckligt f\u00f6r att \u00e5terst\u00e4lla all data? Det beror p\u00e5 typen av \u00f6verfl\u00f6dskoder, till exempel till\u00e5ter Reid-Solomon-koder att \u00e5terst\u00e4lla all data med hj\u00e4lp av godtyckliga n block, medan LRC-\u00f6verfl\u00f6dskoder inte alltid g\u00f6r det.<\/p>\n<p><\/p>\n<h3 id=\"hranenie-dannyh\">Databevarande<\/h3>\n<p><\/p>\n<p>I datalagringssystem lagras vanligtvis varje databasblock och \u00f6verfl\u00f6dsblock p\u00e5 enskilda diskar. Om en godtycklig disk g\u00e5r s\u00f6nder kan de ursprungliga uppgifterna fortfarande \u00e5terst\u00e4llas och l\u00e4sas. Data kan \u00e5terst\u00e4llas \u00e4ven vid samtidig fel p\u00e5 flera diskar.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh\">Datatransmission<\/h3>\n<p><\/p>\n<p>\u00d6verfl\u00f6dskoder kan anv\u00e4ndas f\u00f6r p\u00e5litlig datatransmission i op\u00e5litliga n\u00e4tverk. De \u00f6verf\u00f6rda uppgifterna delas upp i block, och \u00f6verfl\u00f6dskoder ber\u00e4knas f\u00f6r dessa. B\u00e5de datablok och \u00f6verfl\u00f6dsblock \u00f6verf\u00f6rs \u00f6ver n\u00e4tverket. N\u00e4r fel uppst\u00e5r i godtyckliga block (upp till ett visst antal block) kan data fortfarande \u00f6verf\u00f6ras felfritt \u00f6ver n\u00e4tverket. Reid-Solomon-koder, till exempel, anv\u00e4nds f\u00f6r datatransmission \u00f6ver optiska kommunikationslinjer och i satellitkommunikation.<\/p>\n<p><\/p>\n<p>* Det finns \u00e4ven \u00f6verfl\u00f6dskoder d\u00e4r data inte delas upp i block, till exempel Hamming-koder och CRC-koder, som \u00e4r vanligt f\u00f6rekommande f\u00f6r datatransmission i Ethernet-n\u00e4tverk. Dessa \u00e4r koder f\u00f6r felkorrigerande kodning och \u00e4r avsedda f\u00f6r att uppt\u00e4cka fel snarare \u00e4n att korrigera dem (Hamming-koden till\u00e5ter ocks\u00e5 delvis korrigering av fel).<\/p>\n<p><\/p>\n<h1 id=\"2-kody-rida--solomona\">2. Reid-Solomon-koder<\/h1>\n<p><\/p>\n<p>Reid-Solomon-koder \u00e4r en av de mest spridda \u00f6verfl\u00f6dskoderna, uppfunna redan p\u00e5 1960-talet och som f\u00f6rst fick stor anv\u00e4ndning p\u00e5 1980-talet f\u00f6r massproduktion av CD-skivor.<\/p>\n<p><\/p>\n<p>Det finns tv\u00e5 nyckelfr\u00e5gor f\u00f6r att f\u00f6rst\u00e5 Reid-Solomon-koder: 1) hur man skapar \u00f6verfl\u00f6dsblock; 2) hur man \u00e5terst\u00e4ller data med hj\u00e4lp av \u00f6verfl\u00f6dsblock. L\u00e5t oss hitta svar p\u00e5 dem.<br \/>\nF\u00f6r enkelhetens skull kommer vi att anta att n=6 och m=4. Andra scheman behandlas p\u00e5 liknande s\u00e4tt.<\/p>\n<p><\/p>\n<h3 id=\"kak-sozdavat-bloki-kodov-izbytochnosti\">Hur man skapar \u00f6verfl\u00f6dsblock<\/h3>\n<p><\/p>\n<p>Varje block av felkorrigeringskoder betraktas oberoende av de andra. F\u00f6r att r\u00e4kna varje block anv\u00e4nds samtliga n datablokkar. I diagrammet nedan \u00e4r X1-X6 datablokkar och P1\u2013P4 \u00e4r felkorrigeringsblocks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/b4841e48a5f2f059376bb458a26c6235.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Alla datablokkar m\u00e5ste vara samma storlek; f\u00f6r att justera kan nollbitar anv\u00e4ndas. De resulterande felkorrigeringsblocken kommer att ha samma storlek som datablokkarna. Alla datablokkar delas upp i ord (till exempel 16 bitar). Anta att vi delar upp datablokkarna i k ord. D\u00e5 kommer alla felkorrigeringsblocker ocks\u00e5 att delas in i k ord.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/fff9c998a760e3f05ef45497557888a9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r att r\u00e4kna i:e ordet i varje felkorrigeringsblock kommer i:e orden fr\u00e5n alla datablokkar att anv\u00e4ndas. De kommer att ber\u00e4knas enligt f\u00f6ljande formel:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/8f52209ef7f628c8a748325b1a30c2d4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4r \u00e4r v\u00e4rdena x = ord fr\u00e5n datablokkar, p = ord fr\u00e5n felkorrigeringsblock, alla alfa, beta, gamma och delta \u00e4r speciellt valda tal, lika f\u00f6r alla i. Det m\u00e5ste genast s\u00e4gas att alla dessa v\u00e4rden inte \u00e4r vanliga tal, utan element i Galoisf\u00e4ltet, operationerna +, -, *, \/ - \u00e4r inte de vi k\u00e4nner till, utan speciella operationer som inf\u00f6rts \u00f6ver elementen i Galoisf\u00e4ltet.<\/p>\n<p><\/p>\n<h3 id=\"zachem-nuzhny-polya-galua\">Vad \u00e4r Galoisf\u00e4lt till f\u00f6r<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/94ed4514ae15b01e7869efdeb9a605c6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det verkar enkelt: vi delar upp data i block, blocken i ord, med hj\u00e4lp av orden fr\u00e5n datablokkarna ber\u00e4knar vi orden fr\u00e5n felkorrigeringsblocken \u2013 vi f\u00e5r felkorrigeringsblock. I stort sett fungerar det s\u00e5, men dj\u00e4vulen ligger i detaljerna:<\/p>\n<p><\/p>\n<ol>\n<li>Som n\u00e4mnts tidigare \u00e4r ordstorleken fast, i v\u00e5rt exempel 16 bitar. Formlerna ovan f\u00f6r Reed-Solomon-koder \u00e4r s\u00e5dana att n\u00e4r vanliga heltal anv\u00e4nds kan resultatet av ber\u00e4kningen av p vara orepresenterbart med hj\u00e4lp av ett ord av giltig storlek.<\/li>\n<li>Vid \u00e5terst\u00e4llande av data kommer ovanst\u00e5ende formler att betraktas som ett system av ekvationer som m\u00e5ste l\u00f6sas f\u00f6r att \u00e5terst\u00e4lla data. Under l\u00f6sningen kan det bli n\u00f6dv\u00e4ndigt att utf\u00f6ra division av heltal med varandra, vilket ger ett reellt tal som inte kan representeras exakt i datorns minne.<\/li>\n<\/ol>\n<p><\/p>\n<p>Dessa problem g\u00f6r att hela tal inte kan anv\u00e4ndas f\u00f6r Reed-Solomon-koder. L\u00f6sningen p\u00e5 problemet \u00e4r originell och kan beskrivas p\u00e5 f\u00f6ljande s\u00e4tt: l\u00e5t oss t\u00e4nka ut speciella tal som kan representeras med ord av \u00f6nskad l\u00e4ngd (till exempel 16 bitar) och resultatet av alla operationer p\u00e5 dem (addition, subtraktion, multiplikation, division) ocks\u00e5 kommer att representeras i datorns minne med ord av \u00f6nskad l\u00e4ngd.<\/p>\n<p><\/p>\n<p>Dessa \"speciella\" tal har l\u00e4nge studerats inom matematik och kallas kroppar. En kropp \u00e4r en m\u00e4ngd element med specifika operationer f\u00f6r addition, subtraktion, multiplikation och division.<\/p>\n<p><\/p>\n<p>Galois-kroppar* \u00e4r kroppar d\u00e4r det finns ett entydigt resultat f\u00f6r varje operation (+, -, *, \\\/) f\u00f6r vilka som helst tv\u00e5 element i kroppen. Galois-kroppar kan byggas f\u00f6r tal som \u00e4r en potens av 2: 2, 4, 8, 16 och s\u00e5 vidare (i praktiken \u00e4r vi dock bara intresserade av potenser av 2). Till exempel, f\u00f6r ord av storlek 16 bitar \u00e4r detta en kropp som inneh\u00e5ller 65 536 element, f\u00f6r vilka man kan hitta resultatet av vilken operation (+, -, *, \\\/) som helst f\u00f6r varje par. V\u00e4rdena x, p, alfa, beta, gamma, delta i ovanst\u00e5ende ekvationer kommer att betraktas som element av Galois-kroppen f\u00f6r ber\u00e4kningarna.<\/p>\n<p><\/p>\n<p>S\u00e5ledes har vi ett system av ekvationer, med hj\u00e4lp av vilket vi kan bygga redundanta kodblock genom att skriva ett motsvarande datorprogram. Med hj\u00e4lp av detta system av ekvationer kan vi ocks\u00e5 utf\u00f6ra datag \u00e5terst\u00e4llning.<\/p>\n<p><\/p>\n<p>* Detta \u00e4r ingen strikt definition, snarare en beskrivning.<\/p>\n<p><\/p>\n<h3 id=\"kak-vosstanavlivat-dannye\">Hur man \u00e5terst\u00e4ller data<\/h3>\n<p><\/p>\n<p>\u00c5terst\u00e4llning \u00e4r n\u00f6dv\u00e4ndig n\u00e4r en del av blocken \u00e4r saknade fr\u00e5n n + m block. Det kan vara antingen datablock eller redundanta kodblock. Fr\u00e5nvaro av datablock och\/eller redundanta kodblock inneb\u00e4r att de motsvarande variablerna x och\/eller p i ovanst\u00e5ende ekvationer \u00e4r ok\u00e4nda.<\/p>\n<p><\/p>\n<p>Ekvationerna f\u00f6r Reed-Solomon-koder kan betraktas som ett system av ekvationer, d\u00e4r alla v\u00e4rden alfa, beta, gamma, delta \u00e4r konstanter, alla x och p som motsvarar tillg\u00e4ngliga block \u00e4r k\u00e4nda variabler, medan de \u00f6vriga x och p \u00e4r ok\u00e4nda.<\/p>\n<p><\/p>\n<p>Till exempel, l\u00e5t oss anta att datablock 1, 2, 3 och redundanta kodblock 2 \u00e4r otillg\u00e4ngliga, d\u00e5 kommer f\u00f6ljande system av ekvationer att g\u00e4lla f\u00f6r den i:te ordgruppen (ok\u00e4nda markerade i r\u00f6tt):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/6f24804c3d34423f31796e43e9ae1203.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi har ett system med 4 ekvationer och 4 obekanta, vilket inneb\u00e4r att vi kan l\u00f6sa det och \u00e5terst\u00e4lla data!<\/p>\n<p><\/p>\n<p>Fr\u00e5n detta ekvationssystem f\u00f6ljer en rad slutsatser om datarader f\u00f6r Reed-Solomon-koder (n datablokkar, m redundanta kodblock):<\/p>\n<p><\/p>\n<ul>\n<li>Data kan \u00e5terst\u00e4llas vid f\u00f6rlust av vilket som helst av m block eller f\u00e4rre. Vid f\u00f6rlust av m+1 block eller fler kan data inte \u00e5terst\u00e4llas: det g\u00e5r inte att l\u00f6sa ett system med m ekvationer och m + 1 obekanta. <\/li>\n<li>F\u00f6r att \u00e5terst\u00e4lla \u00e4ven ett enda datablock m\u00e5ste du anv\u00e4nda vilka som helst n av de \u00e5terst\u00e5ende blocken, samtidigt som du kan anv\u00e4nda valfritt av redundanskoderna.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"chto-eschyo-nuzhno-znat\">Vad mer beh\u00f6ver man veta<\/h3>\n<p><\/p>\n<p>I beskrivningen ovan hoppar jag \u00f6ver en rad viktiga fr\u00e5gor, vars \u00f6verv\u00e4gande kr\u00e4ver en djupare f\u00f6rdjupning i matematiken. S\u00e4rskilt pratar jag inte om f\u00f6ljande:<\/p>\n<p><\/p>\n<ul>\n<li>Ekvationssystemet f\u00f6r Reed-Solomon-koder m\u00e5ste ha (enligt) l\u00f6sning f\u00f6r alla kombinationer av obekanta (inte mer \u00e4n m obekanta). Baserat p\u00e5 detta krav v\u00e4ljs v\u00e4rdena alpha, beta, gamma och delta.<\/li>\n<li>Ekvationssystemet m\u00e5ste kunna byggas automatiskt (beroende p\u00e5 vilka block som \u00e4r otillg\u00e4ngliga) och l\u00f6sas.<\/li>\n<li>Det \u00e4r n\u00f6dv\u00e4ndigt att konstruera ett Galoisf\u00e4lt: f\u00f6r en given ordstorlek ska man kunna hitta resultatet av vilken operation som helst (+, -, *, \/) f\u00f6r vilka tv\u00e5 element som helst.<\/li>\n<\/ul>\n<p><\/p>\n<p>I slutet av artikeln finns h\u00e4nvisningar till litteratur om dessa viktiga fr\u00e5gor.<\/p>\n<p><\/p>\n<h3 id=\"vybor-n-i-m\">Val av n och m<\/h3>\n<p><\/p>\n<p>Hur v\u00e4ljer man n och m i praktiken? I praktiken anv\u00e4nds redundanskoder i datalagringssystem f\u00f6r att spara utrymme, s\u00e5 d\u00e4rf\u00f6r v\u00e4ljs m alltid mindre \u00e4n n. Deras specifika v\u00e4rden beror p\u00e5 flera faktorer, inklusive:<\/p>\n<p><\/p>\n<ul>\n<li>Tillf\u00f6rlitlighet i datalagring. Ju fler m, desto fler diskfel kan hanteras, vilket inneb\u00e4r h\u00f6gre p\u00e5litlighet.<\/li>\n<li>\u00d6verfl\u00f6dighet i lagring. Ju h\u00f6gre f\u00f6rh\u00e5llande m \/ n, desto h\u00f6gre blir \u00f6verfl\u00f6digheten i lagringen och desto dyrare blir systemet.<\/li>\n<li>Bearbetningstid f\u00f6r f\u00f6rfr\u00e5gningar. Ju st\u00f6rre summa n + m, desto l\u00e4ngre blir svarstiden p\u00e5 f\u00f6rfr\u00e5gningar. Eftersom det f\u00f6r att l\u00e4sa data (under \u00e5terst\u00e4llning) kr\u00e4vs att l\u00e4sa n block som lagras p\u00e5 n olika diskar, kommer l\u00e4sningstiden att best\u00e4mmas av den l\u00e5ngsammaste disken.<\/li>\n<\/ul>\n<p><\/p>\n<p>Dessutom inneb\u00e4r lagring av data i flera datacenter ytterligare begr\u00e4nsningar f\u00f6r valet av n och m: n\u00e4r ett datacenter \u00e4r urkopplat m\u00e5ste data fortfarande vara l\u00e4sbara. Till exempel, vid lagring av data i 3 datacenter m\u00e5ste villkoret h\u00e5llas: m &gt;= n\/2, annars kan situationer uppst\u00e5 d\u00e4r data inte \u00e4r l\u00e4sbara n\u00e4r ett datacenter \u00e4r urkopplat.<\/p>\n<p><\/p>\n<h1 id=\"3-lrc--local-reconstruction-codes\">3. LRC \u2014 Lokala Rekonstruktionskoder<\/h1>\n<p><\/p>\n<p>F\u00f6r att \u00e5terst\u00e4lla data med hj\u00e4lp av Reed-Solomon-koder m\u00e5ste n godtyckliga datablokkar anv\u00e4ndas. Detta \u00e4r en mycket betydande nackdel f\u00f6r distribuerade datalagringssystem, eftersom f\u00f6r att \u00e5terst\u00e4lla data p\u00e5 en trasig disk m\u00e5ste data l\u00e4sas fr\u00e5n majoriteten av de \u00f6vriga, vilket skapar betydande extra belastning p\u00e5 diskar och n\u00e4tverk.<\/p>\n<p><\/p>\n<p>De vanligaste felen \u00e4r otillg\u00e4nglighet av en datablokk p\u00e5 grund av en trasig eller \u00f6verbelastad disk. Kan man p\u00e5 n\u00e5got s\u00e4tt minska den \u00f6verfl\u00f6diga belastningen f\u00f6r datar\u00e4ddning i ett s\u00e5dant (vanligast f\u00f6rekommande) fall? Det visar sig att det g\u00e5r: just f\u00f6r detta finns det redundanskodning i form av LRC.<\/p>\n<p><\/p>\n<p>LRC (Lokala Rekonstruktionskoder) \u00e4r redundanskoder som uppfanns av Microsoft f\u00f6r anv\u00e4ndning i Windows Azure Storage. Id\u00e9n med LRC \u00e4r mycket enkel: dela alla datablokkar i tv\u00e5 (eller fler) grupper och ber\u00e4kna en del av redundanskoderna f\u00f6r varje grupp separat. D\u00e5 kommer en del av kodblocken f\u00f6r redundans att ber\u00e4knas med hj\u00e4lp av alla datablokkar (i LRC kallas de globala redundanskoder), medan en del ber\u00e4knas med hj\u00e4lp av en av de tv\u00e5 grupperna av datablokkar (de kallas lokala redundanskoder).<\/p>\n<p><\/p>\n<p>LRC betecknas med tre siffror: n-r-l, d\u00e4r n \u00e4r antalet datablokkar, r \u00e4r antalet globala redundanskoder, l \u00e4r antalet lokala redundanskoder. F\u00f6r att l\u00e4sa data n\u00e4r en datablokk \u00e4r otillg\u00e4nglig beh\u00f6ver man bara l\u00e4sa n\/l blokkar \u2014 detta \u00e4r l g\u00e5nger mindre \u00e4n med Reed-Solomon-koder.<\/p>\n<p><\/p>\n<p>F\u00f6r att ge ett exempel, betrakta LRC-schemat 6-2-2. X1\u2013X6 \u00e4r 6 datablokkar, P1, P2 \u00e4r 2 globala redundanskoder, P3, P4 \u00e4r 2 lokala redundanskoder.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/783f6d4b57b992c56385cdd07603cda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Redundansblocken P1, P2 ber\u00e4knas med hj\u00e4lp av alla datablokkar. Redundansblocket P3 ber\u00e4knas med hj\u00e4lp av datablokkarna X1\u2013X3, redundansblocket P4 ber\u00e4knas med hj\u00e4lp av datablokkarna X4\u2013X6.<\/p>\n<p><\/p>\n<p>Det \u00f6vriga g\u00f6rs i LRC p\u00e5 liknande s\u00e4tt som med Reed-Solomon-koder. Ekvationerna f\u00f6r att r\u00e4kna orden i \u00f6verskottskodblocken kommer att vara s\u00e5dana:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Felkoder: en enkel f\u00f6rklaring om hur man p\u00e5 ett s\u00e4kert och billigt s\u00e4tt lagrar data\" src=\"\/wp-content\/uploads\/2020\/07\/b32c8864fac0678014fc9a5abf490537.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r att v\u00e4lja siffrorna alfa, beta, gamma, delta m\u00e5ste en rad villkor uppfyllas som s\u00e4kerst\u00e4ller m\u00f6jlighet att \u00e5terst\u00e4lla data (dvs. att l\u00f6sa ekvationssystemet). Mer om dem kan l\u00e4sas i <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf\">artikeln<\/a><\/noindex>.<br \/>\nI praktiken anv\u00e4nds ocks\u00e5 XOR-operationen f\u00f6r att r\u00e4kna lokala \u00f6verskottkoder P3, P4. <\/p>\n<p><\/p>\n<p>Fr\u00e5n ekvationssystemet f\u00f6r LRC f\u00f6ljer flera slutsatser:<\/p>\n<p><\/p>\n<ul>\n<li>F\u00f6r att \u00e5terst\u00e4lla vilket 1 datablok som helst r\u00e4cker det att l\u00e4sa n\/l block (n\/2 i v\u00e5rt exempel).<\/li>\n<li>Om r + l block \u00e4r otillg\u00e4ngliga, och alla block ing\u00e5r i en grupp, kan data inte \u00e5terst\u00e4llas. Detta kan enkelt f\u00f6rklaras med ett exempel. L\u00e5t oss s\u00e4ga att blocken X1\u2013X3 och P3 \u00e4r otillg\u00e4ngliga: detta \u00e4r r + l block fr\u00e5n en grupp, 4 i v\u00e5rt fall. D\u00e5 har vi ett system med 3 ekvationer och 4 ok\u00e4nda, vilket inte g\u00e5r att l\u00f6sa.<\/li>\n<li>I alla andra fall av otillg\u00e4nglighet av r + l block (n\u00e4r minst 1 block fr\u00e5n varje grupp \u00e4r tillg\u00e4ngligt) kan data \u00e5terst\u00e4llas i LRC.<\/li>\n<\/ul>\n<p><\/p>\n<p>S\u00e5ledes \u00f6vertr\u00e4ffar LRC Reed-Solomon-koderna n\u00e4r det g\u00e4ller datar\u00e4ddning efter enkla fel. I Reed-Solomon-koder kr\u00e4vs att \u00e4ven ett block av data \u00e5terst\u00e4lls genom att anv\u00e4nda n block, medan f\u00f6r att \u00e5terst\u00e4lla ett block av data i LRC r\u00e4cker det att anv\u00e4nda n\/l block (n\/2 i v\u00e5rt exempel). \u00c5 andra sidan, LRC f\u00f6rlorar mot Reed-Solomon-koderna n\u00e4r det g\u00e4ller maximalt antal till\u00e5tna fel. I de tidigare exemplen kan Reed-Solomon-koder \u00e5terst\u00e4lla data vid upp till 4 fel, medan det f\u00f6r LRC finns 2 kombinationer av 4 fel d\u00e4r data inte kan \u00e5terst\u00e4llas.<\/p>\n<p><\/p>\n<p>Vad som \u00e4r viktigast beror p\u00e5 den specifika situationen, men ofta v\u00e4ger den besparing av \u00f6verskottsbelastning som LRC erbjuder tyngre \u00e4n den n\u00e5got l\u00e4gre lagringss\u00e4kerheten.<\/p>\n<p><\/p>\n<h1 id=\"4-drugie-kody-izbytochnosti\">4. Andra \u00f6verskottkoder<\/h1>\n<p><\/p>\n<p>F\u00f6rutom Reed-Solomon-koder och LRC finns det m\u00e5nga andra \u00f6verskottkoder. Olika \u00f6verskottkoder anv\u00e4nder olika matematik. H\u00e4r \u00e4r n\u00e5gra andra \u00f6verskottkoder:<\/p>\n<p><\/p>\n<ul>\n<li>\u00d6verskottkod med hj\u00e4lp av XOR-operatorn. XOR-operationen utf\u00f6rs \u00f6ver n datablock, och en \u00f6verskottskodblock genereras, det vill s\u00e4ga schema n+1 (n datablock, 1 \u00f6verskottskod). Anv\u00e4nds i <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/RAID#RAID_5\">RAID 5<\/a><\/noindex>, d\u00e4r datablock och \u00f6verskottskoder cykliskt skrivs p\u00e5 alla diskar i arrayen.<\/li>\n<li>Even-odd-algoritmen, baserat p\u00e5 XOR-operationen. M\u00f6jligg\u00f6r skapandet av 2 block av redundanta koder, dvs n+2-schema.<\/li>\n<li>STAR-algoritmen, baserat p\u00e5 XOR-operationen. G\u00f6r det m\u00f6jligt att bygga 3 block av redundanta koder, dvs n+3-schema.<\/li>\n<li>Pyramidkoder \u2014 ytterligare redundanta koder fr\u00e5n Microsoft.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"5-ispolzovanie-v-yandekse\">5. Anv\u00e4ndning inom Yandex<\/h1>\n<p><\/p>\n<p>En rad infrastrukturella projekt fr\u00e5n Yandex anv\u00e4nder redundanta koder f\u00f6r s\u00e4ker datalagring. H\u00e4r \u00e4r n\u00e5gra exempel:<\/p>\n<p><\/p>\n<ul>\n<li>Det interna objektlagret MDS, som jag n\u00e4mnde i b\u00f6rjan av artikeln.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/\">YT<\/a><\/noindex> \u2014 Yandexs MapReduce-system.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=FwLvAuOSIOU\">YDB<\/a><\/noindex> (Yandex DataBase) \u2014 en distribuerad newSQL-databas.<\/li>\n<\/ul>\n<p><\/p>\n<p>I MDS anv\u00e4nds LRC-redundanskoder, 8-2-2-schema. Data med redundanskoder skrivs p\u00e5 12 olika diskar p\u00e5 olika servrar i 3 olika datacenter: 4 servrar i varje datacenter. L\u00e4s mer om detta i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806\/\">artikeln<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>I YT anv\u00e4nds b\u00e5de Reed-Solomon-koder (6-3-schema), som var de f\u00f6rsta som implementerades, samt LRC-redundanskoder (12-2-2-schema), d\u00e4r LRC \u00e4r den f\u00f6redragna lagringsmetoden.<\/p>\n<p><\/p>\n<p>I YDB anv\u00e4nds redundanskoder baserade p\u00e5 even-odd (4-2-schema). Redundanskoderna i YDB har redan <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8\">ber\u00e4ttats om p\u00e5 Highload<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Anv\u00e4ndningen av olika redundanskodescheman beror p\u00e5 de olika kraven som st\u00e4lls p\u00e5 systemen. Till exempel, i MDS placeras data som lagras med LRC omedelbart i 3 datacenter. Det \u00e4r viktigt f\u00f6r oss att data f\u00f6rblir tillg\u00e4ngliga f\u00f6r l\u00e4sning \u00e4ven om 1 datacenter g\u00e5r ner, d\u00e4rf\u00f6r m\u00e5ste blocken distribueras \u00f6ver datacentren s\u00e5 att antalet otillg\u00e4ngliga block inte \u00f6verskrider det till\u00e5tna vid nedl\u00e4ggning av n\u00e5got datacenter. I 8-2-2-schemat kan 4 block placeras i varje datacenter, s\u00e5 att om n\u00e5got datacenter st\u00e4ngs av, kommer 4 block att vara otillg\u00e4ngliga och data kan fortfarande l\u00e4sas. Oavsett vilket schema vi v\u00e4ljer n\u00e4r vi placerar i 3 datacenter, m\u00e5ste det alltid vara (r + l) \/ n &gt;= 0,5, vilket betyder att lagringsredundansen kommer att vara minst 50%.<\/p>\n<p><\/p>\n<p>I YT \u00e4r situationen annorlunda: varje YT-kluster ligger helt inom 1 datacenter (olika kluster i olika datacenter), d\u00e4rf\u00f6r finns det inga s\u00e5dana begr\u00e4nsningar d\u00e4r. 12-2-2-schemat ger en redundans p\u00e5 33%, vilket g\u00f6r att data kan lagras billigare, samtidigt som de kan klara av upp till 4 samtidiga diskavbrott, precis som schemat i MDS.<\/p>\n<p><\/p>\n<p>Det finns fortfarande m\u00e5nga s\u00e4rdrag kring anv\u00e4ndningen av redundanskoder i lagrings- och databehandlingssystem: nyanser av datar\u00e4ddning, inverkan av \u00e5terst\u00e4llning p\u00e5 svarstider, s\u00e4rskilda aspekter av dataskrivning osv. Jag planerar att ber\u00e4tta mer om dessa och andra s\u00e4rdrag av till\u00e4mpning av redundanskoder i praktiken om \u00e4mnet \u00e4r av intresse.<\/p>\n<p><\/p>\n<h1 id=\"6-ssylki\">6. L\u00e4nkar<\/h1>\n<p><\/p>\n<ol>\n<li>Serien artiklar om Reed-Solomon-koder och Galois-f\u00e4lt: <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 \/>\nI dem behandlas matematiken mer ing\u00e5ende p\u00e5 ett l\u00e4ttf\u00f6rst\u00e5eligt s\u00e4tt.<\/li>\n<li>Artikel fr\u00e5n Microsoft om 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 \/>\nI avsnitt 2 f\u00f6rklaras teorin kort, och d\u00e4refter behandlas erfarenheter av LRC i praktiken.<\/li>\n<li>Even-odd-schema: <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>STAR-schema: <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>Pyramidkoder: <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>Redundanskoder i 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>Redundanskoder i 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>Redundanskoder i 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>K\u00e4lla: <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.4 - 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\/sv\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Redundanskoder: enkelt f\u00f6rklarat hur man p\u00e5 ett s\u00e4kert och kostnadseffektivt s\u00e4tt lagrar data | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/87758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=87758"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/87758\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/87759"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=87758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=87758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=87758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}