{"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\/pt\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","title":{"rendered":"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/4d853e314dfea596b45a6aff00238bea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Esta \u00e9 a apar\u00eancia da redund\u00e2ncia<\/em><\/p>\n<p><\/p>\n<p>C\u00f3digos de redund\u00e2ncia* s\u00e3o amplamente utilizados em sistemas computacionais para aumentar a confiabilidade do armazenamento de dados. No Yandex, eles s\u00e3o empregados em muitos projetos. Por exemplo, o uso de c\u00f3digos de redund\u00e2ncia em vez de replica\u00e7\u00e3o em nosso armazenamento de objetos interno economiza milh\u00f5es sem comprometer a confiabilidade. No entanto, apesar da ampla dissemina\u00e7\u00e3o, uma descri\u00e7\u00e3o clara de como funcionam os c\u00f3digos de redund\u00e2ncia \u00e9 rara. Aqueles que desejam entender deparam-se com algo como o seguinte (de <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\">Wikis<\/a><\/noindex>):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/c5e592acd8c1e113c099357d1ba48d5c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meu nome \u00e9 Vadim, e no Yandex eu trabalho no desenvolvimento do armazenamento de objetos interno MDS. Neste artigo, explicarei de forma simples os fundamentos te\u00f3ricos dos c\u00f3digos de redund\u00e2ncia (c\u00f3digos de Reed-Solomon e LRC). Contarei como isso funciona, sem matem\u00e1tica complexa ou termos raros. No final, apresentarei exemplos de uso dos c\u00f3digos de redund\u00e2ncia no Yandex.<\/p>\n<p><\/p>\n<p>Uma s\u00e9rie de detalhes matem\u00e1ticos n\u00e3o ser\u00e1 abordada com profundidade, mas fornecer\u00e9 links para aqueles que desejam se aprofundar. Tamb\u00e9m observarei que algumas defini\u00e7\u00f5es matem\u00e1ticas podem n\u00e3o ser rigorosas, uma vez que o artigo n\u00e3o \u00e9 destinado a matem\u00e1ticos, mas a engenheiros que desejam entender a ess\u00eancia da quest\u00e3o.<\/p>\n<p><\/p>\n<p>* Na literatura em l\u00edngua inglesa, os c\u00f3digos de redund\u00e2ncia s\u00e3o frequentemente chamados de erasure codes.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"1-sut-kodov-izbytochnosti\">1. A ess\u00eancia dos c\u00f3digos de redund\u00e2ncia<\/h1>\n<p><\/p>\n<p>A ess\u00eancia de todos os c\u00f3digos de redund\u00e2ncia \u00e9 extremamente simples: armazenar (ou transmitir) dados de maneira que n\u00e3o se percam em caso de erros (falhas de discos, erros na transmiss\u00e3o de dados, etc.). <\/p>\n<p><\/p>\n<p>Na maioria* dos c\u00f3digos de redund\u00e2ncia, os dados s\u00e3o divididos em n blocos de dados, para os quais s\u00e3o calculados m blocos de c\u00f3digos de redund\u00e2ncia, totalizando n + m blocos. Os c\u00f3digos de redund\u00e2ncia s\u00e3o constru\u00eddos de forma que seja poss\u00edvel recuperar n blocos de dados utilizando apenas uma parte dos n + m blocos. A seguir, abordaremos apenas c\u00f3digos de redund\u00e2ncia em bloco, ou seja, aqueles em que os dados s\u00e3o divididos em blocos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/1273b4643f915dd615026ec38ca56473.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para restaurar todos os n blocos de dados, \u00e9 necess\u00e1rio ter pelo menos n de n + m blocos, pois n\u00e3o se pode obter n blocos tendo apenas n-1 bloco (neste caso, seria necess\u00e1rio obter 1 bloco 'do nada'). \u00c9 suficiente ter n blocos arbitr\u00e1rios de n + m blocos para a restaura\u00e7\u00e3o de todos os dados? Isso depende do tipo de c\u00f3digos de redund\u00e2ncia; por exemplo, os c\u00f3digos de Reed-Solomon permitem restaurar todos os dados com n blocos arbitr\u00e1rios, enquanto os c\u00f3digos de redund\u00e2ncia LRC nem sempre o fazem.<\/p>\n<p><\/p>\n<h3 id=\"hranenie-dannyh\">Armazenamento de dados<\/h3>\n<p><\/p>\n<p>Nos sistemas de armazenamento de dados, geralmente, cada um dos blocos de dados e blocos de c\u00f3digos de redund\u00e2ncia \u00e9 gravado em um disco separado. Assim, ao falhar um disco qualquer, os dados originais ainda poder\u00e3o ser recuperados e lidos. Os dados poder\u00e3o ser recuperados mesmo em caso de falha simult\u00e2nea de v\u00e1rios discos.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh\">Transmiss\u00e3o de dados<\/h3>\n<p><\/p>\n<p>Os c\u00f3digos de redund\u00e2ncia podem ser usados para uma transmiss\u00e3o confi\u00e1vel de dados em uma rede n\u00e3o confi\u00e1vel. Os dados transmitidos s\u00e3o divididos em blocos, e para eles s\u00e3o calculados os c\u00f3digos de redund\u00e2ncia. Tanto os blocos de dados quanto os blocos de c\u00f3digos de redund\u00e2ncia s\u00e3o transmitidos pela rede. Em caso de erro em blocos arbitr\u00e1rios (at\u00e9 um certo n\u00famero de blocos), os dados ainda podem ser transmitidos pela rede de forma confi\u00e1vel. Os c\u00f3digos de Reed-Solomon, por exemplo, s\u00e3o utilizados para a transmiss\u00e3o de dados por linhas \u00f3pticas de comunica\u00e7\u00e3o e em comunica\u00e7\u00f5es via sat\u00e9lite.<\/p>\n<p><\/p>\n<p>* Existem tamb\u00e9m c\u00f3digos de redund\u00e2ncia em que os dados n\u00e3o s\u00e3o divididos em blocos, como os c\u00f3digos de Hamming e os c\u00f3digos CRC, amplamente utilizados para transmiss\u00e3o de dados em redes Ethernet. Esses s\u00e3o c\u00f3digos para codifica\u00e7\u00e3o resistente a interfer\u00eancias, destinados \u00e0 detec\u00e7\u00e3o de erros, e n\u00e3o \u00e0 sua corre\u00e7\u00e3o (o c\u00f3digo de Hamming tamb\u00e9m permite corrigir erros parcialmente).<\/p>\n<p><\/p>\n<h1 id=\"2-kody-rida--solomona\">2. C\u00f3digos de Reed-Solomon<\/h1>\n<p><\/p>\n<p>Os c\u00f3digos de Reed-Solomon s\u00e3o um dos c\u00f3digos de redund\u00e2ncia mais amplamente utilizados, inventados na d\u00e9cada de 1960 e que obtiveram aplica\u00e7\u00e3o generalizada em 1980 para a produ\u00e7\u00e3o em s\u00e9rie de CDs.<\/p>\n<p><\/p>\n<p>Duas quest\u00f5es chave para entender os c\u00f3digos de Reed-Solomon s\u00e3o: 1) como criar blocos de c\u00f3digos de redund\u00e2ncia; 2) como recuperar dados usando blocos de c\u00f3digos de redund\u00e2ncia. Vamos encontrar respostas para elas.<br \/>\nPara simplificar, consideraremos a seguir que n=6 e m=4. Outros esquemas s\u00e3o considerados por analogia.<\/p>\n<p><\/p>\n<h3 id=\"kak-sozdavat-bloki-kodov-izbytochnosti\">Como criar blocos de c\u00f3digos de redund\u00e2ncia<\/h3>\n<p><\/p>\n<p>Cada bloco de c\u00f3digos de redund\u00e2ncia \u00e9 considerado independentemente dos outros. Para o c\u00e1lculo de cada bloco, s\u00e3o utilizados todos os n blocos de dados. No diagrama abaixo, X1-X6 representam os blocos de dados, enquanto P1\u2013P4 s\u00e3o blocos de c\u00f3digos de redund\u00e2ncia.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/b4841e48a5f2f059376bb458a26c6235.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Todos os blocos de dados devem ter o mesmo tamanho; para o alinhamento, podem ser utilizados bits nulos. Os blocos de c\u00f3digos de redund\u00e2ncia resultantes ter\u00e3o o mesmo tamanho que os blocos de dados. Todos os blocos de dados s\u00e3o divididos em palavras (por exemplo, 16 bits). Suponha que dividimos os blocos de dados em k palavras. Assim, todos os blocos de c\u00f3digos de redund\u00e2ncia tamb\u00e9m ser\u00e3o divididos em k palavras.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/fff9c998a760e3f05ef45497557888a9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para calcular a i-\u00e9sima palavra de cada bloco de redund\u00e2ncia, utilizaremos as i-\u00e9simas palavras de todos os blocos de dados. Elas ser\u00e3o calculadas pela seguinte f\u00f3rmula:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/8f52209ef7f628c8a748325b1a30c2d4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqui os valores x representam as palavras dos blocos de dados, p as palavras dos blocos de c\u00f3digos de redund\u00e2ncia, e todos os alfa, beta, gama e delta s\u00e3o n\u00fameros especialmente escolhidos, iguais para todos os i. \u00c9 importante notar que todos esses valores n\u00e3o s\u00e3o n\u00fameros comuns, mas elementos de um campo de Galois; as opera\u00e7\u00f5es +, -, *, \/ n\u00e3o s\u00e3o as opera\u00e7\u00f5es habituais que conhecemos, mas opera\u00e7\u00f5es especiais introduzidas sobre os elementos do campo de Galois.<\/p>\n<p><\/p>\n<h3 id=\"zachem-nuzhny-polya-galua\">Por que s\u00e3o necess\u00e1rios os campos de Galois<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/94ed4514ae15b01e7869efdeb9a605c6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A princ\u00edpio, parece simples: dividimos os dados em blocos, os blocos em palavras, e com as palavras dos blocos de dados calculamos as palavras dos blocos de c\u00f3digos de redund\u00e2ncia, obtendo assim os blocos de c\u00f3digos de redund\u00e2ncia. De forma geral, \u00e9 assim que funciona, mas o diabo est\u00e1 nos detalhes:<\/p>\n<p><\/p>\n<ol>\n<li>Como mencionado acima, o tamanho da palavra \u00e9 fixo, em nosso exemplo 16 bits. As f\u00f3rmulas acima para os c\u00f3digos de Reed-Solomon s\u00e3o tais que, ao utilizar inteiros comuns, o resultado do c\u00e1lculo de p pode n\u00e3o ser represent\u00e1vel com uma palavra do tamanho permitido.<\/li>\n<li>Ao restaurar os dados, as f\u00f3rmulas acima ser\u00e3o consideradas como um sistema de equa\u00e7\u00f5es a ser resolvido para restaurar os dados. Durante o processo de resolu\u00e7\u00e3o, pode haver a necessidade de dividir n\u00fameros inteiros entre si, resultando em um n\u00famero real que n\u00e3o pode ser representado com precis\u00e3o na mem\u00f3ria do computador.<\/li>\n<\/ol>\n<p><\/p>\n<p>Esses problemas impedem o uso de n\u00fameros inteiros para os c\u00f3digos de Reed-Solomon. A solu\u00e7\u00e3o para o problema \u00e9 original e pode ser descrita da seguinte forma: vamos criar n\u00fameros especiais que podem ser representados por palavras de um determinado tamanho (por exemplo, 16 bits), e o resultado de todas as opera\u00e7\u00f5es realizadas sobre esses n\u00fameros (adi\u00e7\u00e3o, subtra\u00e7\u00e3o, multiplica\u00e7\u00e3o, divis\u00e3o) tamb\u00e9m ser\u00e1 representado na mem\u00f3ria do computador usando palavras desse tamanho.<\/p>\n<p><\/p>\n<p>Esses n\u00fameros \u201cespeciais\u201d s\u00e3o estudados h\u00e1 muito tempo pela matem\u00e1tica e s\u00e3o chamados de campos. Um campo \u00e9 um conjunto de elementos com opera\u00e7\u00f5es de adi\u00e7\u00e3o, subtra\u00e7\u00e3o, multiplica\u00e7\u00e3o e divis\u00e3o definidas para eles.<\/p>\n<p><\/p>\n<p>Os campos de Galois* s\u00e3o campos para os quais existe e \u00e9 \u00fanico o resultado de cada opera\u00e7\u00e3o (+, -, *, \/) para quaisquer dois elementos do campo. Os campos de Galois podem ser constru\u00eddos para n\u00fameros que s\u00e3o pot\u00eancias de 2: 2, 4, 8, 16, etc. (na verdade, pot\u00eancias de qualquer n\u00famero primo p, mas na pr\u00e1tica, estamos interessados apenas nas pot\u00eancias de 2). Por exemplo, para palavras de tamanho 16 bits, esse campo cont\u00e9m 65.536 elementos, para cada par dos quais \u00e9 poss\u00edvel encontrar o resultado de qualquer opera\u00e7\u00e3o (+, -, *, \/). Os valores x, p, alfa, beta, gama, delta nas equa\u00e7\u00f5es acima para c\u00e1lculos ser\u00e3o considerados elementos do campo de Galois.<\/p>\n<p><\/p>\n<p>Assim, temos um sistema de equa\u00e7\u00f5es que pode ser usado para construir blocos de c\u00f3digos de redund\u00e2ncia, escrevendo um programa de computador correspondente. Com esse mesmo sistema de equa\u00e7\u00f5es, \u00e9 poss\u00edvel realizar a recupera\u00e7\u00e3o de dados.<\/p>\n<p><\/p>\n<p>* Esta n\u00e3o \u00e9 uma defini\u00e7\u00e3o estrita, mas sim uma descri\u00e7\u00e3o.<\/p>\n<p><\/p>\n<h3 id=\"kak-vosstanavlivat-dannye\">Como recuperar dados<\/h3>\n<p><\/p>\n<p>A recupera\u00e7\u00e3o \u00e9 necess\u00e1ria quando, de n + m blocos, alguns blocos est\u00e3o ausentes. Isso pode incluir tanto blocos de dados quanto blocos de c\u00f3digos de redund\u00e2ncia. A aus\u00eancia de blocos de dados e\/ou blocos de c\u00f3digos de redund\u00e2ncia significa que nas equa\u00e7\u00f5es acima as vari\u00e1veis correspondentes x e\/ou p s\u00e3o desconhecidas.<\/p>\n<p><\/p>\n<p>As equa\u00e7\u00f5es para os c\u00f3digos de Reed-Solomon podem ser vistas como um sistema de equa\u00e7\u00f5es em que todos os valores alfa, beta, gama, delta s\u00e3o constantes, todos os x e p correspondentes aos blocos dispon\u00edveis s\u00e3o vari\u00e1veis conhecidas, e os demais x e p s\u00e3o desconhecidos.<\/p>\n<p><\/p>\n<p>Por exemplo, suponha que os blocos de dados 1, 2, 3 e o bloco de c\u00f3digos de redund\u00e2ncia 2 estejam indispon\u00edveis, ent\u00e3o para o i-\u00e9simo grupo de palavras teremos o seguinte sistema de equa\u00e7\u00f5es (as inc\u00f3gnitas est\u00e3o marcadas em vermelho):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/6f24804c3d34423f31796e43e9ae1203.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Temos um sistema de 4 equa\u00e7\u00f5es com 4 inc\u00f3gnitas, portanto podemos resolv\u00ea-lo e recuperar os dados!<\/p>\n<p><\/p>\n<p>Dessa sistema de equa\u00e7\u00f5es decorrem v\u00e1rias conclus\u00f5es sobre a recupera\u00e7\u00e3o de dados para c\u00f3digos de Reed-Solomon (n blocos de dados, m blocos de c\u00f3digo de redund\u00e2ncia):<\/p>\n<p><\/p>\n<ul>\n<li>Os dados podem ser recuperados com a perda de at\u00e9 m blocos ou menos. Com a perda de m+1 ou mais blocos, os dados n\u00e3o podem ser recuperados: n\u00e3o \u00e9 poss\u00edvel resolver um sistema de m equa\u00e7\u00f5es com m + 1 inc\u00f3gnitas. <\/li>\n<li>Para recuperar at\u00e9 mesmo um bloco de dados, \u00e9 necess\u00e1rio usar quaisquer n dos blocos restantes, podendo utilizar qualquer um dos c\u00f3digos de redund\u00e2ncia.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"chto-eschyo-nuzhno-znat\">O que mais voc\u00ea precisa saber<\/h3>\n<p><\/p>\n<p>Na descri\u00e7\u00e3o acima, deixo de lado uma s\u00e9rie de quest\u00f5es importantes, cuja considera\u00e7\u00e3o requer um mergulho mais profundo na matem\u00e1tica. Em particular, n\u00e3o menciono o seguinte:<\/p>\n<p><\/p>\n<ul>\n<li>O sistema de equa\u00e7\u00f5es para os c\u00f3digos de Reed-Solomon deve ter uma (\u00fanica) solu\u00e7\u00e3o para quaisquer combina\u00e7\u00f5es de inc\u00f3gnitas (n\u00e3o mais que m inc\u00f3gnitas). Com base nesse requisito, s\u00e3o selecionados os valores de alfa, beta, gama e delta.<\/li>\n<li>O sistema de equa\u00e7\u00f5es precisa ser capaz de se construir automaticamente (dependendo de quais blocos est\u00e3o indispon\u00edveis) e ser resolvido.<\/li>\n<li>\u00c9 preciso construir um campo de Galois: para um dado tamanho de palavra, ser capaz de encontrar o resultado de qualquer opera\u00e7\u00e3o (+, -, *, \/) para quaisquer dois elementos.<\/li>\n<\/ul>\n<p><\/p>\n<p>No final do artigo, h\u00e1 refer\u00eancias \u00e0 literatura sobre essas quest\u00f5es importantes.<\/p>\n<p><\/p>\n<h3 id=\"vybor-n-i-m\">Escolha de n e m<\/h3>\n<p><\/p>\n<p>Como escolher n e m na pr\u00e1tica? Na pr\u00e1tica, nos sistemas de armazenamento de dados, os c\u00f3digos de redund\u00e2ncia s\u00e3o usados para economizar espa\u00e7o, portanto m \u00e9 sempre escolhido menor que n. Seus valores espec\u00edficos dependem de uma s\u00e9rie de fatores, incluindo:<\/p>\n<p><\/p>\n<ul>\n<li>Confiabilidade do armazenamento de dados. Quanto maior m, maior a quantidade de falhas de disco que pode ser suportada, ou seja, maior a confiabilidade.<\/li>\n<li>Redund\u00e2ncia do armazenamento. Quanto maior a propor\u00e7\u00e3o m\/n, maior ser\u00e1 a redund\u00e2ncia do armazenamento, e mais cara ser\u00e1 a sistema.<\/li>\n<li>Tempo de processamento de consultas. Quanto maior a soma n + m, mais longo ser\u00e1 o tempo de resposta \u00e0s consultas. Como para ler os dados (durante a recupera\u00e7\u00e3o) \u00e9 necess\u00e1rio ler n blocos armazenados em n discos diferentes, o tempo de leitura ser\u00e1 determinado pelo disco mais lento.<\/li>\n<\/ul>\n<p><\/p>\n<p>Al\u00e9m disso, o armazenamento de dados em v\u00e1rios centros de dados imp\u00f5e restri\u00e7\u00f5es adicionais \u00e0 escolha de n e m: ao desligar 1 centro de dados, os dados ainda devem estar acess\u00edveis para leitura. Por exemplo, ao armazenar dados em 3 centros de dados, deve-se cumprir a condi\u00e7\u00e3o: m &gt;= n\/2, caso contr\u00e1rio, pode ocorrer uma situa\u00e7\u00e3o em que os dados n\u00e3o est\u00e3o dispon\u00edveis para leitura ao desligar 1 centro de dados.<\/p>\n<p><\/p>\n<h1 id=\"3-lrc--local-reconstruction-codes\">3. LRC \u2014 C\u00f3digos de Reconstru\u00e7\u00e3o Local<\/h1>\n<p><\/p>\n<p>Para restaurar dados usando os c\u00f3digos de Reed-Solomon, \u00e9 necess\u00e1rio usar n blocos de dados arbitr\u00e1rios. Este \u00e9 um grande inconveniente para sistemas de armazenamento de dados distribu\u00eddos, pois para recuperar dados de um disco quebrado, \u00e9 preciso ler dados da maioria dos outros, criando uma carga adicional significativa nos discos e na rede.<\/p>\n<p><\/p>\n<p>Os erros mais comuns s\u00e3o a falta de um bloco de dados devido \u00e0 falha ou sobrecarga de um disco. \u00c9 poss\u00edvel reduzir a carga excessiva para a recupera\u00e7\u00e3o de dados em tal (o mais comum) caso? Aparentemente, sim: para isso existem c\u00f3digos de redund\u00e2ncia LRC.<\/p>\n<p><\/p>\n<p>LRC (C\u00f3digos de Reconstru\u00e7\u00e3o Local) s\u00e3o c\u00f3digos de redund\u00e2ncia criados pela Microsoft para uso no Windows Azure Storage. A ideia do LRC \u00e9 bastante simples: dividir todos os blocos de dados em dois (ou mais) grupos e calcular parte dos blocos de c\u00f3digos de redund\u00e2ncia para cada grupo separadamente. Assim, parte dos blocos de c\u00f3digos de redund\u00e2ncia ser\u00e1 calculada usando todos os blocos de dados (no LRC eles s\u00e3o chamados de c\u00f3digos globais de redund\u00e2ncia), enquanto parte ser\u00e1 calculada com um dos dois grupos de blocos de dados (esses s\u00e3o chamados de c\u00f3digos locais de redund\u00e2ncia).<\/p>\n<p><\/p>\n<p>O LRC \u00e9 representado por tr\u00eas n\u00fameros: n-r-l, onde n \u00e9 o n\u00famero de blocos de dados, r \u00e9 o n\u00famero de blocos globais de c\u00f3digos de redund\u00e2ncia, l \u00e9 o n\u00famero de blocos locais de c\u00f3digos de redund\u00e2ncia. Para ler dados quando um bloco de dados n\u00e3o est\u00e1 dispon\u00edvel, \u00e9 necess\u00e1rio ler apenas n\/l blocos - isso \u00e9 l vezes menos do que nos c\u00f3digos de Reed-Solomon.<\/p>\n<p><\/p>\n<p>Como exemplo, consideremos o esquema LRC 6-2-2. X1\u2013X6 \u2014 6 blocos de dados, P1, P2 \u2014 2 blocos globais de redund\u00e2ncia, P3, P4 \u2014 2 blocos locais de redund\u00e2ncia.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/783f6d4b57b992c56385cdd07603cda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Os blocos de c\u00f3digo de redund\u00e2ncia P1, P2 s\u00e3o calculados usando todos os blocos de dados. O bloco de c\u00f3digo de redund\u00e2ncia P3 \u00e9 calculado usando os blocos de dados X1\u2013X3, e o bloco de c\u00f3digo de redund\u00e2ncia P4 \u00e9 calculado usando os blocos de dados X4\u2013X6.<\/p>\n<p><\/p>\n<p>O restante \u00e9 feito no LRC de forma semelhante aos c\u00f3digos de Reed-Solomon. As equa\u00e7\u00f5es para calcular as palavras dos blocos de c\u00f3digos de redund\u00e2ncia ser\u00e3o as seguintes:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3digos de redund\u00e2ncia: explicando de forma simples como armazenar dados com seguran\u00e7a e de forma econ\u00f4mica\" src=\"\/wp-content\/uploads\/2020\/07\/b32c8864fac0678014fc9a5abf490537.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para gerar os n\u00fameros alfa, beta, gama e delta, \u00e9 necess\u00e1rio atender a uma s\u00e9rie de condi\u00e7\u00f5es que garantem a possibilidade de recupera\u00e7\u00e3o dos dados (ou seja, a solu\u00e7\u00e3o do sistema de equa\u00e7\u00f5es). Mais detalhes podem ser encontrados em <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf\">artigo<\/a><\/noindex>.<br \/>\nAl\u00e9m disso, na pr\u00e1tica, para calcular os c\u00f3digos locais de redund\u00e2ncia P3 e P4, usa-se a opera\u00e7\u00e3o XOR. <\/p>\n<p><\/p>\n<p>Do sistema de equa\u00e7\u00f5es para o LRC, v\u00e1rias conclus\u00f5es podem ser tiradas:<\/p>\n<p><\/p>\n<ul>\n<li>Para recuperar qualquer 1 bloco de dados, basta ler n\/l blocos (n\/2 no nosso exemplo).<\/li>\n<li>Se r + l blocos n\u00e3o estiverem dispon\u00edveis e todos os blocos pertencem ao mesmo grupo, os dados n\u00e3o podem ser recuperados. Isso pode ser explicado facilmente com um exemplo. Suponha que os blocos X1\u2013X3 e P3 n\u00e3o estejam dispon\u00edveis: isso corresponde a r + l blocos de um \u00fanico grupo, que s\u00e3o 4 no nosso caso. Portanto, temos um sistema de 3 equa\u00e7\u00f5es com 4 inc\u00f3gnitas, que n\u00e3o pode ser resolvido.<\/li>\n<li>Em todos os outros casos de indisponibilidade de r + l blocos (quando pelo menos um bloco de cada grupo est\u00e1 dispon\u00edvel), os dados no LRC podem ser recuperados.<\/li>\n<\/ul>\n<p><\/p>\n<p>Assim, o LRC supera os c\u00f3digos de Reed-Solomon na recupera\u00e7\u00e3o de dados ap\u00f3s erros \u00fanicos. Nos c\u00f3digos de Reed-Solomon, para recuperar at\u00e9 mesmo um bloco de dados, s\u00e3o necess\u00e1rios n blocos, enquanto no LRC \u00e9 suficiente utilizar n\/l blocos (n\/2 no nosso exemplo) para recuperar um bloco de dados. Por outro lado, o LRC perde para os c\u00f3digos de Reed-Solomon em rela\u00e7\u00e3o ao n\u00famero m\u00e1ximo de erros permitidos. Nos exemplos acima, os c\u00f3digos de Reed-Solomon conseguem recuperar os dados com at\u00e9 4 erros, enquanto no LRC existem 2 combina\u00e7\u00f5es de 4 erros em que os dados n\u00e3o podem ser recuperados.<\/p>\n<p><\/p>\n<p>O que \u00e9 mais importante depende da situa\u00e7\u00e3o espec\u00edfica, mas frequentemente a economia de carga redundante proporcionada pelo LRC supera a ligeiramente menor confiabilidade de armazenamento.<\/p>\n<p><\/p>\n<h1 id=\"4-drugie-kody-izbytochnosti\">4. Outros c\u00f3digos de redund\u00e2ncia<\/h1>\n<p><\/p>\n<p>Al\u00e9m dos c\u00f3digos de Reed-Solomon e LRC, existem muitos outros c\u00f3digos de redund\u00e2ncia. Diferentes c\u00f3digos de redund\u00e2ncia utilizam matem\u00e1ticas diferentes. Aqui est\u00e3o alguns outros c\u00f3digos de redund\u00e2ncia:<\/p>\n<p><\/p>\n<ul>\n<li>C\u00f3digo de redund\u00e2ncia utilizando o operador XOR. A opera\u00e7\u00e3o XOR \u00e9 realizada sobre n blocos de dados, resultando em 1 bloco de c\u00f3digos de redund\u00e2ncia, ou seja, um esquema n+1 (n blocos de dados, 1 c\u00f3digo de redund\u00e2ncia). Utilizado em <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/RAID#RAID_5\">RAID 5<\/a><\/noindex>, onde os blocos de dados e os c\u00f3digos de redund\u00e2ncia s\u00e3o gravados ciclicamente em todos os discos do array.<\/li>\n<li>O algoritmo even-odd, baseado na opera\u00e7\u00e3o XOR. Permite construir 2 blocos de c\u00f3digos de redund\u00e2ncia, ou seja, esquema n+2.<\/li>\n<li>O algoritmo STAR, baseado na opera\u00e7\u00e3o XOR. Permite construir 3 blocos de c\u00f3digos de redund\u00e2ncia, ou seja, esquema n+3.<\/li>\n<li>Os c\u00f3digos Pyramide \u2014 mais c\u00f3digos de redund\u00e2ncia da Microsoft.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"5-ispolzovanie-v-yandekse\">5. Uso no Yandex<\/h1>\n<p><\/p>\n<p>V\u00e1rios projetos de infraestrutura do Yandex aplicam c\u00f3digos de redund\u00e2ncia para armazenamento confi\u00e1vel de dados. Aqui est\u00e3o alguns exemplos:<\/p>\n<p><\/p>\n<ul>\n<li>O armazenamento de objetos interno MDS, sobre o qual escrevi no in\u00edcio do artigo.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/\">YT<\/a><\/noindex> \u2014 Sistema MapReduce do Yandex.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=FwLvAuOSIOU\">YDB<\/a><\/noindex> (Yandex DataBase) \u2014 banco de dados distribu\u00eddo newSQL.<\/li>\n<\/ul>\n<p><\/p>\n<p>No MDS, s\u00e3o utilizados c\u00f3digos de redund\u00e2ncia LRC, esquema 8-2-2. Os dados com c\u00f3digos de redund\u00e2ncia s\u00e3o gravados em 12 discos diferentes em diferentes servidores em 3 DCS: 4 servidores em cada DC. Para mais detalhes, leia em <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806\/\">artigo<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>No YT, s\u00e3o usados tanto c\u00f3digos de Reed-Solomon (esquema 6-3), que foram implementados primeiro, quanto c\u00f3digos de redund\u00e2ncia LRC (esquema 12-2-2), sendo que LRC \u00e9 o m\u00e9todo preferido de armazenamento.<\/p>\n<p><\/p>\n<p>No YDB, s\u00e3o utilizados c\u00f3digos de redund\u00e2ncia baseados em even-odd (esquema 4-2). J\u00e1 se falou sobre c\u00f3digos de redund\u00e2ncia no YDB <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8\">no Highload<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>A aplica\u00e7\u00e3o de diferentes esquemas de c\u00f3digos de redund\u00e2ncia \u00e9 determinada pelos diferentes requisitos impostos aos sistemas. Por exemplo, no MDS, os dados armazenados com LRC s\u00e3o distribu\u00eddos em 3 DCS. \u00c9 importante que os dados permane\u00e7am acess\u00edveis para leitura em caso de falha em qualquer DC, portanto, os blocos devem ser distribu\u00eddos entre os DCS de modo que, ao ficar indispon\u00edvel qualquer DC, a quantidade de blocos inaces\u00edveis n\u00e3o ultrapasse o aceit\u00e1vel. No esquema 8-2-2, podem ser colocados 4 blocos em cada DC, ent\u00e3o, ao desligar qualquer DC, 4 blocos ficar\u00e3o indispon\u00edveis e os dados poder\u00e3o ser lidos. Qualquer que seja o esquema escolhido para aloca\u00e7\u00e3o nos 3 DCS, em qualquer caso, deve ser (r + l) \/ n &gt;= 0,5, ou seja, a redund\u00e2ncia de armazenamento ser\u00e1 de pelo menos 50%.<\/p>\n<p><\/p>\n<p>No YT, a situa\u00e7\u00e3o \u00e9 diferente: cada cluster YT est\u00e1 totalmente localizado em 1 DC (clusters diferentes em diferentes DCs), portanto n\u00e3o h\u00e1 essa limita\u00e7\u00e3o. O esquema 12-2-2 oferece uma redund\u00e2ncia de 33%, ou seja, armazenar dados se torna mais barato, embora eles possam suportar at\u00e9 4 falhas simult\u00e2neas de discos, assim como no esquema do MDS.<\/p>\n<p><\/p>\n<p>Ainda h\u00e1 muitas particularidades na aplica\u00e7\u00e3o de c\u00f3digos de redund\u00e2ncia em sistemas de armazenamento e processamento de dados: nuances na recupera\u00e7\u00e3o de dados, impacto da recupera\u00e7\u00e3o sobre o tempo de execu\u00e7\u00e3o das solicita\u00e7\u00f5es, caracter\u00edsticas da grava\u00e7\u00e3o de dados, entre outros. Vou me aprofundar separadamente nessas e outras caracter\u00edsticas da aplica\u00e7\u00e3o de c\u00f3digos de redund\u00e2ncia na pr\u00e1tica, se o tema for de interesse.<\/p>\n<p><\/p>\n<h1 id=\"6-ssylki\">6. Links<\/h1>\n<p><\/p>\n<ol>\n<li>S\u00e9rie de artigos sobre os c\u00f3digos de Reed-Solomon e campos de Galois: <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 \/>\nNeles, \u00e9 apresentada a matem\u00e1tica de forma acess\u00edvel.<\/li>\n<li>Artigo da Microsoft sobre 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 \/>\nNa se\u00e7\u00e3o 2, a teoria \u00e9 explicada brevemente, seguida da an\u00e1lise da experi\u00eancia na aplica\u00e7\u00e3o do LRC na pr\u00e1tica.<\/li>\n<li>Esquema 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>Esquema 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>C\u00f3digos de pir\u00e2mide: <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>C\u00f3digos de redund\u00e2ncia em 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>C\u00f3digos de redund\u00e2ncia em 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>C\u00f3digos de redund\u00e2ncia em 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>Fonte: <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\/pt\/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=\"pt_PT\" \/>\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\/pt\/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\udd47C\u00f3digos de redund\u00e2ncia: explica\u00e7\u00f5es simples sobre como armazenar dados de forma confi\u00e1vel e econ\u00f4mica | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/pt\/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":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/87758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=87758"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/87758\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/87759"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=87758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=87758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=87758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}