Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Ieu naon redundancy Sigana mah

Kode redundansi* loba dipaké dina sistem komputer pikeun ngaronjatkeun reliabilitas gudang data. Dina Yandex aranjeunna dianggo dina seueur proyék. Contona, ngagunakeun kode redundansi tinimbang réplikasi dina panyimpenan objék internal urang ngahemat jutaan tanpa ngorbankeun reliabilitas. Tapi sanajan pamakéan nyebar maranéhanana, déskripsi jelas ngeunaan kumaha kode redundansi jalan pisan jarang. Jalma anu hoyong ngartos disanghareupan kira-kira di handap ieu (tina Wikipédia):

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Nami abdi Vadim, di Yandex abdi ngembangkeun MDS panyimpenan obyék internal. Dina artikel ieu, kuring bakal ngajelaskeun dina kecap basajan dasar teoritis kode redundancy (Reed-Solomon jeung kode LRC). Kuring gé ngabejaan Anjeun kumaha gawéna, tanpa matematik kompléks jeung istilah langka. Dina tungtungna kuring bakal masihan conto ngagunakeun kode redundansi dina Yandex.

Kuring moal nganggap sajumlah detil matematika sacara rinci, tapi kuring bakal nyayogikeun tautan pikeun anu hoyong teuleum langkung jero. Kuring ogé bakal dicatet yén sababaraha definisi matematik bisa jadi teu ketat, sabab artikel teu dimaksudkeun pikeun matematikawan, tapi pikeun insinyur anu hoyong ngartos hakekat masalah.

* Dina literatur basa Inggris, kode redundansi sering disebut kode erasure.

1. Hakekat kode redundansi

Intina sadaya kode redundansi saderhana pisan: nyimpen (atanapi ngirimkeun) data supados henteu leungit nalika aya kasalahan (gagal disk, kasalahan mindahkeun data, jsb.).

Dina kalolobaan * kode redundansi, data dibagi kana n blok data, nu m blok kode redundancy diitung, hasilna total n + m blok. Kodeu redundancy diwangun ku cara nu n blok data bisa pulih ngagunakeun ngan nyangkokkeun sabagian n + m blok. Salajengna, urang bakal mertimbangkeun ukur blok redundancy kode, nyaeta, nu data dibagi kana blok.

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Pikeun cageur sadaya n blok data, anjeun kedah gaduh sahenteuna n tina n + m blok, sabab anjeun moal bisa meunang n blok ku ngabogaan ngan n-1 blok (dina hal ieu, anjeun bakal kudu nyokot 1 blok "ti ipis. hawa”). Naha n blok acak tina n + m blok cukup pikeun cageur sadaya data? Ieu gumantung kana jenis kode redundancy, Contona, Reed-Solomon Konci ngidinan Anjeun pikeun cageur kabeh data ngagunakeun blok n sawenang, tapi LRC kode redundancy teu salawasna.

Panyimpenan data

Dina sistem panyimpen data, sakumaha aturan, unggal blok data sareng blok kode redundansi ditulis kana disk anu misah. Lajeng, lamun hiji disk sawenang gagal, data aslina masih bisa dibalikeun sarta dibaca. Data tiasa pulih sanajan sababaraha disk gagal dina waktos anu sami.

Mindahkeun data

Kode redundansi tiasa dianggo pikeun ngirimkeun data anu dipercaya dina jaringan anu teu dipercaya. Data anu dikirimkeun dibagi kana blok, sareng kode redundansi diitung pikeun aranjeunna. Duanana blok data sareng blok kode redundansi dikirimkeun ngaliwatan jaringan. Lamun kasalahan lumangsung dina blok sawenang (nepi ka jumlah nu tangtu blok), data masih bisa dikirimkeun ngaliwatan jaringan tanpa kasalahan. Kodeu Reed-Solomon, contona, dipaké pikeun ngirimkeun data ngaliwatan jalur komunikasi optik jeung dina komunikasi satelit.

* Aya ogé kode redundansi dimana data henteu dibagi kana blok, sapertos kode Hamming sareng kode CRC, anu seueur dianggo pikeun pangiriman data dina jaringan Ethernet. Ieu mangrupikeun kode pikeun koréksi kasalahan, aranjeunna dirancang pikeun ngadeteksi kasalahan, sareng henteu ngabenerkeunana (kode Hamming ogé ngamungkinkeun koréksi parsial kasalahan).

2. Kodeu Reed-Solomon

Kodeu Reed-Solomon mangrupikeun salah sahiji kode redundansi anu paling seueur dianggo, diciptakeun dina taun 1960-an sareng mimiti dianggo dina taun 1980-an pikeun produksi masal cakram kompak.

Aya dua patarosan konci pikeun pamahaman kode Reed-Solomon: 1) kumaha carana nyieun blok kode redundansi; 2) kumaha cageur data ngagunakeun blok kode redundancy. Hayu urang manggihan jawaban ka aranjeunna.
Pikeun kesederhanaan, urang salajengna bakal nganggap yén n = 6 jeung m = 4. Skéma séjén dianggap ku analogi.

Kumaha cara nyieun blok kode redundansi

Unggal blok kode redundansi diitung sacara mandiri tina anu sanés. Kabéh n blok data dipaké pikeun cacah unggal blok. Dina diagram di handap, X1-X6 mangrupakeun blok data, P1-P4 mangrupakeun blok kode redundancy.

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Sadaya blok data kedah ukuran anu sami, sareng nol bit tiasa dianggo pikeun alignment. Blok kode redundansi anu dihasilkeun bakal ukuranana sarua jeung blok data. Sadaya blok data dibagi kana kecap (contona, 16 bit). Hayu urang ngabagi blok data kana kecap k. Lajeng sakabeh blok kode redundancy ogé bakal dibagi kana k kecap.

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Pikeun ngitung kecap i-th unggal blok redundansi, kecap i-th tina sakabeh blok data bakal dipaké. Aranjeunna bakal diitung dumasar kana rumus ieu:

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Di dieu nilai x nyaéta kecap blok data, p nyaéta kecap blok kode redundansi, sadaya alfa, béta, gamma sareng délta mangrupikeun nomer anu dipilih khusus anu sami pikeun sadaya i. Éta kedah langsung disebatkeun yén sadaya nilai ieu sanés nomer biasa, tapi unsur-unsur médan Galois; operasi +, -, *, / sanés operasi anu biasa pikeun urang sadayana, tapi operasi khusus diwanohkeun dina unsur Galois. sawah.

Naha sawah Galois diperyogikeun?

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Éta sigana yén sadayana saderhana: urang ngabagi data kana blok, blok kana kecap, ngagunakeun kecap blok data urang ngitung kecap blok kode redundancy - urang nampi blok kode redundancy. Sacara umum ieu kumaha gawéna, tapi Iblis aya dina detil:

  1. Sakumaha anu dinyatakeun di luhur, ukuran kecap tetep, dina conto urang 16 bit. Rumus di luhur pikeun kode Reed-Solomon sapertos kitu nalika nganggo wilangan bulat biasa, hasil ngitung p tiasa henteu tiasa diwakilan nganggo kecap anu ukuranana sah.
  2. Nalika malikkeun data, rumus di luhur bakal dianggap salaku sistem persamaan anu kedah direngsekeun supados tiasa pulih data. Salila prosés leyuran, meureun nya perlu ngabagi integer ku silih, hasilna jumlah riil nu teu bisa akurat digambarkeun dina mémori komputer.

Masalah ieu nyegah pamakean integer pikeun kode Reed-Solomon. Leyuran pikeun masalah aslina, éta bisa digambarkeun saperti kieu: hayu urang datang nepi ka angka husus nu bisa digambarkeun ku kecap tina panjangna diperlukeun (contona, 16 bit), sarta hasil tina ngajalankeun sagala operasi on nu (tambahan). , pangurangan, multiplication, division) ogé bakal dibere dina mémori komputer ngagunakeun kecap tina panjangna diperlukeun.

Angka-angka "husus" sapertos kitu parantos diulik ku matematika salami lami, aranjeunna disebut widang. Widang nyaéta sakumpulan elemen anu operasi tambahan, pangurangan, perkalian sareng pembagian anu ditetepkeun pikeun aranjeunna.

Widang Galois * nyaéta widang anu aya hasil unik tina unggal operasi (+, -, *, /) pikeun dua elemen lapangan. Widang Galois bisa diwangun pikeun angka anu kakuatan 2: 2, 4, 8, 16, jeung sajabana (sabenerna kakuatan tina sagala prima wilangan p, tapi dina praktekna urang ngan museurkeun kakuatan 2). Salaku conto, pikeun kecap 16-bit, ieu mangrupikeun lapangan anu ngandung 65 elemen, pikeun unggal pasangan anjeun tiasa mendakan hasil tina operasi naon waé (+, -, *, /). Nilai x, p, alfa, béta, gamma, délta tina persamaan di luhur bakal dianggap unsur médan Galois pikeun itungan.

Ku kituna, urang boga sistem persamaan nu bisa ngawangun blok kode redundansi ku nulis program komputer luyu. Nganggo sistem persamaan anu sami, anjeun tiasa ngalakukeun pamulihan data.

* Ieu sanes definisi ketat, tapi rada pedaran.

Kumaha cageur data

Pamulihan diperlukeun nalika sababaraha n + m blok leungit. Ieu tiasa duanana blok data sareng blok kode redundansi. Henteuna blok data sareng / atanapi blok kode redundansi hartosna yén variabel x sareng / atanapi p anu pakait henteu dipikanyaho dina persamaan di luhur.

Persamaan pikeun kode Reed-Solomon tiasa ditingali salaku sistem persamaan dimana sadaya nilai alfa, béta, gamma, délta konstanta, sadaya x sareng p pakait sareng blok anu sayogi mangrupikeun variabel anu dipikanyaho, sareng sésana x sareng p. teu kanyahoan.

Salaku conto, hayu blok data 1, 2, 3 sareng blok kode redundansi 2 henteu sayogi, teras pikeun grup kecap i-th bakal aya sistem persamaan di handap ieu (teu dipikanyaho ditandaan beureum):

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Simkuring boga sistem 4 persamaan kalawan 4 kanyahoan, nu hartina urang bisa ngajawab eta tur malikkeun data!

Tina sistem persamaan ieu sababaraha kacindekan nuturkeun ngeunaan pamulihan data pikeun kode Reed-Solomon (n blok data, m blok kode redundansi):

  • Data tiasa pulih upami aya m blok atanapi sakedik anu leungit. Lamun m+1 atawa leuwih blok leungit, data teu bisa dibalikkeun: mustahil pikeun ngajawab hiji sistem persamaan m jeung m + 1 kanyahoan.
  • Pikeun mulangkeun malah hiji blok data, anjeun kudu make sagala n tina blok sésana, tur anjeun tiasa nganggo salah sahiji kode redundancy.

Naon deui nu peryogi kauninga

Dina pedaran di luhur, abdi ulah sababaraha isu penting anu merlukeun hiji beuleum deeper kana matematik mertimbangkeun. Khususna, kuring henteu nyarios nanaon ngeunaan ieu:

  • Sistem persamaan pikeun kode Reed-Solomon kedah gaduh solusi (unik) pikeun kombinasi anu teu dipikanyaho (henteu langkung ti m kanyahoan). Dumasar sarat ieu, nilai alfa, béta, gamma sareng délta dipilih.
  • Hiji sistem persamaan kudu bisa otomatis diwangun (gumantung blok mana nu teu sadia) jeung direngsekeun.
  • Urang kudu ngawangun hiji widang Galois: pikeun ukuran kecap tinangtu, bisa manggihan hasil tina sagala operasi (+, -, *, /) pikeun sagala dua elemen.

Dina ahir artikel aya rujukan pikeun literatur ngeunaan masalah penting ieu.

Pilihan n jeung m

Kumaha carana milih n jeung m dina prakna? Dina prakna, dina sistem panyimpenan data, kode redundansi dipaké pikeun ngahemat spasi, jadi m sok dipilih kirang ti n. Nilai spésifikna gumantung kana sababaraha faktor, kalebet:

  • Réliabilitas neundeun data. Nu leuwih gede m, nu leuwih gede jumlah gagal disk nu bisa salamet, nyaeta, nu leuwih luhur reliabiliti.
  • gudang kaleuleuwihan. Nu leuwih luhur rasio m / n, nu leuwih luhur redundansi gudang bakal, jeung sistem bakal leuwih mahal.
  • Nyuhunkeun waktos ngolah. Langkung ageung jumlah n + m, langkung lami waktos ngaréspon kana pamundut. Kusabab data bacaan (salila recovery) merlukeun bacaan n blok disimpen dina n disk béda, waktu maca bakal ditangtukeun ku disk slowest.

Sajaba ti éta, nyimpen data dina sababaraha DCs imposes larangan tambahan dina pilihan n sarta m: lamun 1 DC dipareuman, data kudu tetep sadia pikeun bacaan. Contona, nalika nyimpen data dina 3 DCs, kaayaan di handap ieu kudu patepung: m> = n / 2, disebutkeun meureun aya kaayaan dimana data teu sadia pikeun bacaan nalika 1 DC dipareuman.

3. LRC - Kodeu Rekonstruksi Lokal

Pikeun cageur data ngagunakeun kode Reed-Solomon, anjeun kudu make n blok data sawenang. Ieu mangrupikeun kalemahan anu penting pikeun sistem panyimpen data anu disebarkeun, sabab pikeun mulangkeun data dina hiji disk anu rusak, anjeun kedah maca data tina kalolobaan anu sanés, nyiptakeun beban tambahan anu ageung dina disk sareng jaringan.

Kasalahan anu paling umum nyaéta inaccessibility tina hiji blok data kusabab gagalna atanapi overload hiji disk. Naha mungkin kumaha waé ngirangan kaleuwihan beban pikeun pamulihan data dina hal ieu (paling umum)? Tétéla anjeun tiasa: aya kode redundansi LRC khusus pikeun tujuan ieu.

LRC (Kode Rekonstruksi Lokal) mangrupikeun kode redundansi anu diciptakeun ku Microsoft pikeun dianggo dina Windows Azure Storage. Gagasan LRC sasederhana mungkin: ngabagi sadaya blok data kana dua (atanapi langkung) grup sareng baca bagian tina blok kode redundansi pikeun tiap grup nyalira. Lajeng sababaraha blok kode redundancy bakal diitung ngagunakeun sakabeh blok data (dina LRC disebut kode redundancy global), sarta sababaraha - ngagunakeun salah sahiji dua grup blok data (aranjeunna disebut kode redundancy lokal).

LRC dilambangkeun ku tilu angka: nrl, dimana n nyaéta jumlah blok data, r nyaéta jumlah blok kode redundancy global, l nyaéta jumlah blok kode redundancy lokal. Pikeun maca data nalika hiji blok data teu sadia, anjeun kudu maca ngan n / l blok - ieu l kali kirang ti dina kode Reed-Solomon.

Contona, mertimbangkeun skéma LRC 6-2-2. X1–X6 — 6 blok data, P1, P2 — 2 blok redundansi global, P3, P4 — 2 blok redundansi lokal.

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Blok kode redundancy P1, P2 diitung ngagunakeun sakabeh blok data. Blok kode redundancy P3 - ngagunakeun blok data X1-X3, blok kode redundancy P4 - ngagunakeun blok data X4-X6.

Sésana dilakukeun dina LRC ku analogi sareng kode Reed-Solomon. Persamaan pikeun ngitung kecap blok kode redundansi bakal kieu:

Kode redundansi: dina kecap basajan ngeunaan cara nyimpen data reliably tur murah

Pikeun milih nomer alfa, béta, gamma, délta, sababaraha kaayaan kudu minuhan pikeun ngajamin kamungkinan recovery data (nyaéta, ngarengsekeun sistem persamaan). Anjeun tiasa maca langkung seueur ngeunaan aranjeunna dina artikel.
Ogé dina prakna, operasi XOR dipaké pikeun ngitung kode redundansi lokal P3, P4.

Sajumlah kacindekan nuturkeun tina sistem persamaan pikeun LRC:

  • Pikeun cageur sagala 1 blok data, éta cukup maca n / l blok (n / 2 dina conto urang).
  • Upami blok r + l henteu sayogi, sareng sadaya blok kalebet dina hiji grup, datana henteu tiasa dibalikeun deui. Ieu gampang dijelaskeun ku conto. Hayu blok X1–X3 jeung P3 teu sadia: ieu r + l blok ti grup sarua, 4 bisi urang. Teras we gaduh sistem 3 persamaan sareng 4 kanyahoan anu teu tiasa direngsekeun.
  • Dina sakabeh kasus sejenna unavailability of r + l blok (lamun sahanteuna hiji blok sadia ti unggal grup), data dina LRC bisa disimpen deui.

Ku kituna, LRC outperforms kode Reed-Solomon dina recovering data sanggeus kasalahan tunggal. Dina kode Reed-Solomon, pikeun cageur malah hiji blok data, Anjeun kudu make n blok, sarta dina LRC, cageur hiji blok data, éta cukup ngagunakeun n / l blok (n / 2 dina conto urang). Di sisi anu sanés, LRC langkung handap tina kode Reed-Solomon dina hal jumlah maksimum kasalahan anu diidinan. Dina conto di luhur, Reed-Solomon Konci bisa cageur data pikeun sagala 4 kasalahan, jeung LRC aya 2 kombinasi 4 kasalahan nalika data teu bisa pulih.

Naon anu leuwih penting gumantung kana kaayaan spésifik, tapi mindeng tabungan dina kaleuwihan beban nu LRC nyadiakeun outweigh gudang rada kirang dipercaya.

4. Kode redundancy séjén

Salian kode Reed-Solomon sareng LRC, aya seueur kode redundansi anu sanés. Kode redundansi béda ngagunakeun matematik béda. Ieu sababaraha kode redundansi anu sanés:

  • Kode redundansi ngagunakeun operator XOR. Operasi XOR dipigawé dina n blok data, sarta 1 blok kode redundancy diala, nyaeta, skéma n + 1 (n blok data, 1 kode redundancy). Dipaké dina razia 5, dimana blok data sareng kode redundansi ditulis sacara siklik ka sadaya disk tina array.
  • Algoritma genap-ganjil dumasar kana operasi XOR. Ngidinan anjeun ngawangun 2 blok kode redundansi, nyaéta, skéma n +2.
  • Algoritma STAR dumasar kana operasi XOR. Ngidinan anjeun ngawangun 3 blok kode redundansi, nyaéta, skéma n +3.
  • Kode piramida mangrupakeun kode redundansi sejen ti Microsoft.

5. Paké dina Yandex

Sajumlah proyék infrastruktur Yandex nganggo kode redundansi pikeun neundeun data anu dipercaya. Ieu sababaraha conto:

  • Panyimpenan objék internal MDS, anu kuring nyerat dina awal tulisan.
  • YT - Sistem MapReduce tina Yandex.
  • YDB (Yandex DataBase) - database disebarkeun newSQL.

MDS ngagunakeun kode redundansi LRC, skéma 8-2-2. Data kalawan kode redundancy ditulis kana 12 disk béda dina server béda dina 3 DC béda: 4 server di unggal DC. Baca leuwih seueur tentang ieu dina artikel.

YT ngagunakeun duanana kode Reed-Solomon (Skéma 6-3), anu munggaran diimplementasikeun, sareng kode redundansi LRC (Skéma 12-2-2), sareng LRC mangrupikeun metode panyimpen anu dipikaresep.

YDB ngagunakeun kode redundansi dumasar-ganjil (Gambar 4-2). Ngeunaan kode redundancy di YDB geus ngawartoskeun on Highload.

Pamakéan skéma kode redundansi anu béda disababkeun ku syarat anu béda pikeun sistem. Contona, dina MDS, data nu disimpen maké LRC disimpen dina 3 DCs sakaligus. Kadé pikeun urang yén data tetep sadia pikeun dibaca lamun 1 tina sagala DCs gagal, kituna blok kudu disebarkeun sakuliah DC ambéh maranéhanana mun DC sagala teu sadia, jumlah blok inaccessible teu leuwih ti diidinan. Dina skéma 8-2-2, anjeun tiasa nempatkeun 4 blok dina unggal DC, teras nalika sagala DC dipareuman, 4 blok moal sayogi, sareng datana tiasa dibaca. Naon skéma anu urang pilih nalika nempatkeun éta dina 3 DC, dina sagala hal kedah aya (r + l) / n> = 0,5, nyaéta, redundansi gudang sahenteuna 50%.

Dina YT kaayaan béda: unggal klaster YT sagemblengna lokasina di 1 DC (klaster béda dina DC béda), jadi euweuh larangan sapertos. skéma 12-2-2 nyadiakeun 33% redundancy, nyaeta, nyimpen data leuwih murah, sarta eta oge bisa salamet nepi ka 4 outages disk simultaneous, kawas skéma MDS.

Aya seueur deui fitur tina ngagunakeun kode redundansi dina neundeun data sareng sistem ngolah: nuansa pamulihan data, dampak pamulihan dina waktos palaksanaan pamundut, fitur ngarékam data, jsb. kode redundancy dina prakna, lamun topik bakal metot.

6. Tumbu

  1. Runtuyan artikel ngeunaan kode Reed-Solomon sareng widang Galois: https://habr.com/ru/company/yadro/blog/336286/
    https://habr.com/ru/company/yadro/blog/341506/
    Aranjeunna nyandak katingal deeper dina matematik dina basa diaksés.
  2. Artikel ti Microsoft ngeunaan LRC: https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/LRC12-cheng20webpage.pdf
    Bagian 2 ngajelaskeun sacara ringkes téori teras ngabahas pangalaman sareng LRC dina prakna.
  3. Skema ganjil genap: https://people.eecs.berkeley.edu/~kubitron/courses/cs262a-F12/handouts/papers/p245-blaum.pdf
  4. Skéma STAR: https://www.usenix.org/legacy/event/fast05/tech/full_papers/huang/huang.pdf
  5. Kodeu piramida: https://www.microsoft.com/en-us/research/publication/pyramid-codes-flexible-schemes-to-trade-space-for-access-efficiency-in-reliable-data-storage-systems/
  6. Kodeu redundansi dina MDS: https://habr.com/ru/company/yandex/blog/311806
  7. Kodeu redundansi dina YT: https://habr.com/ru/company/yandex/blog/311104/
  8. Kodeu redundansi dina YDB: https://www.youtube.com/watch?v=dCpfGJ35kK8

sumber: www.habr.com

Tambahkeun komentar