Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Iki kaya redundansi

Kode redundansi * digunakake akeh ing sistem komputer kanggo nambah linuwih panyimpenan data. Ing Yandex digunakake ing akeh proyek. Contone, nggunakake kode redundansi tinimbang replikasi ing panyimpenan obyek internal kita ngirit mayuta-yuta tanpa ngorbanake linuwih. Nanging sanajan nggunakake nyebar, katrangan sing jelas babagan cara kerja kode redundansi arang banget. Sing pengin ngerti bakal ngadhepi kira-kira ing ngisor iki (saka Wikipedia):

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Jenengku Vadim, ing Yandex aku ngembangake MDS panyimpenan obyek internal. Ing artikel iki, aku bakal njlèntrèhaké ing tembung prasaja dhasar teori saka redundansi kode (Reed-Solomon lan LRC kode). Aku bakal pitutur marang kowe cara kerjane, tanpa matematika rumit lan istilah langka. Ing pungkasan aku bakal menehi conto nggunakake kode redundansi ing Yandex.

Aku ora bakal nimbang sawetara rincian matematika ing rinci, nanging aku bakal nyedhiyani pranala kanggo wong-wong sing pengin nyilem luwih jero. Aku uga bakal Wigati sing sawetara definisi matématika bisa uga ora ketat, amarga artikel iki ora dimaksudaké kanggo matématikawan, nanging kanggo engineers sing pengin ngerti inti saka masalah.

* Ing literatur basa Inggris, kode redundansi asring diarani kode erasure.

1. Inti saka kode redundansi

Inti saka kabeh kode redundansi gampang banget: nyimpen (utawa ngirim) data supaya ora ilang nalika ana kesalahan (gagal disk, kesalahan transfer data, lsp.).

Ing paling * kode redundansi, data dipérang dadi n pamblokiran data, kang m blok kode redundansi diitung, asil ing total n + m pamblokiran. Kode redundansi dibangun kanthi cara n pamblokiran data bisa mbalekake mung nggunakake bagean saka n + m pamblokiran. Sabanjure, kita bakal nimbang mung kode redundansi blok, yaiku, sing data dipérang dadi blok.

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Kanggo mbalekake kabeh n blok data, sampeyan kudu paling sethithik n saka n + m blok, amarga sampeyan ora bisa njaluk n pamblokiran kanthi mung n-1 blok (ing kasus iki, sampeyan kudu njupuk 1 blok "saka tipis hawa”). Apa n pamblokiran acak n + m pamblokiran cukup kanggo waras kabeh data? Iki gumantung ing jinis kode redundansi, contone, Reed-Solomon kode ngijini sampeyan kanggo waras kabeh data nggunakake kasepakatan n pamblokiran, nanging kode redundansi LRC ora tansah.

Panyimpenan data

Ing sistem panyimpenan data, minangka aturan, saben blok data lan blok kode redundansi ditulis ing disk sing kapisah. Banjur, yen disk sembarang gagal, data asli isih bisa dibalèkaké lan diwaca. Data bisa dibalekake sanajan sawetara disk gagal ing wektu sing padha.

Transfer data

Kode redundansi bisa digunakake kanggo ngirim data kanthi dipercaya liwat jaringan sing ora bisa dipercaya. Data sing dikirim dipérang dadi blok, lan kode redundansi diwilang kanggo wong-wong mau. Blok data lan blok kode redundansi dikirim liwat jaringan. Yen ana kesalahan ing blok sing sewenang-wenang (nganti sawetara blok), data isih bisa dikirim liwat jaringan tanpa kesalahan. Kode Reed-Solomon, contone, digunakake kanggo ngirim data liwat jalur komunikasi optik lan komunikasi satelit.

* Ana uga kode redundansi sing data ora dipérang dadi blok, kayata kode Hamming lan kode CRC, sing umum digunakake kanggo transmisi data ing jaringan Ethernet. Iki minangka kode kanggo coding kesalahan-mbenerake, dirancang kanggo ndeteksi kesalahan, lan ora kanggo mbenerake (kode Hamming uga ngidini koreksi sebagian kesalahan).

2. Kode Reed-Solomon

Kode Reed-Solomon minangka salah sawijining kode redundansi sing paling akeh digunakake, diciptakake ing taun 1960-an lan pisanan digunakake ing taun 1980-an kanggo produksi massal cakram kompak.

Ana rong pitakonan kunci kanggo mangerteni kode Reed-Solomon: 1) carane nggawe blok kode redundansi; 2) carane mbalekake data nggunakake blok kode redundansi. Ayo goleki jawaban kanggo wong-wong mau.
Kanggo gamblang, kita bakal luwih nganggep n = 6 lan m = 4. Skema liyane dianggep kanthi analogi.

Carane nggawe blok kode redundansi

Saben blok kode redundansi diitung kanthi bebas saka liyane. Kabeh blok data n digunakake kanggo ngetung saben blok. Ing diagram ing ngisor iki, X1-X6 minangka blok data, P1-P4 minangka blok kode redundansi.

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Kabeh blok data kudu ukuran sing padha, lan nol bit bisa digunakake kanggo alignment. Pamblokiran kode redundansi sing diasilake bakal padha karo pamblokiran data. Kabeh blok data dipérang dadi tembung (contone, 16 bit). Contone, kita pamisah blok data dadi tembung k. Banjur kabeh blok kode redundansi uga bakal dipérang dadi k tembung.

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Kanggo ngetung tembung i-th saben blok redundansi, tembung i-th saka kabeh blok data bakal digunakake. Dheweke bakal diitung miturut rumus ing ngisor iki:

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Ing kene nilai x minangka tembung blok data, p minangka tembung blok kode redundansi, kabeh alpha, beta, gamma lan delta minangka nomer sing dipilih khusus sing padha kanggo kabeh i. Sampeyan kudu langsung ngomong yen kabeh nilai kasebut dudu angka biasa, nanging unsur lapangan Galois; operasi +, -, *, / ora operasi sing akrab karo kita kabeh, nanging operasi khusus sing dikenalake ing unsur Galois. lapangan.

Napa lapangan Galois dibutuhake?

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Iku bakal katon yen kabeh iku prasaja: kita dibagi data menyang pamblokiran, pamblokiran menyang tembung, nggunakake tembung saka pamblokiran data kita count tembung saka blok kode redundansi - kita njaluk pamblokiran kode redundansi. Umumé, iki cara kerjane, nanging setan ana ing rincian:

  1. Kaya kasebut ing ndhuwur, ukuran tembung tetep, ing conto kita 16 bit. Rumus ing ndhuwur kanggo kode Reed-Solomon kayadene nalika nggunakake integer biasa, asil ngitung p bisa uga ora bisa diwakili nggunakake tembung kanthi ukuran sing bener.
  2. Nalika mbalekake data, rumus ing ndhuwur bakal dianggep minangka sistem persamaan sing kudu ditanggulangi kanggo mbalekake data kasebut. Sajrone proses solusi, bisa uga kudu dibagi integer saben liyane, nyebabake nomer nyata sing ora bisa dituduhake kanthi akurat ing memori komputer.

Masalah kasebut nyegah panggunaan integer kanggo kode Reed-Solomon. Solusi kanggo masalah iku asli, bisa diterangake ing ngisor iki: ayo kang teka munggah karo nomer khusus sing bisa dituduhake nggunakake tembung saka dawa dibutuhake (contone, 16 bit), lan asil saka nindakake kabeh operasi kang (tambahan). , subtraction, multiplication, division) uga bakal diwenehi ing memori komputer nggunakake tembung saka dawa dibutuhake.

Angka-angka "khusus" kasebut wis ditliti ing matématika kanggo wektu sing suwe, diarani lapangan. Bidang minangka sakumpulan unsur kanthi operasi tambahan, pengurangan, perkalian lan pembagian sing ditetepake.

Kolom Galois* minangka kolom sing ana asil unik saben operasi (+, -, *, /) kanggo rong unsur lapangan. lapangan Galois bisa dibangun kanggo nomer sing daya saka 2: 2, 4, 8, 16, etc. Contone, kanggo tembung 2-bit, iki minangka lapangan sing ngemot 16 unsur, kanggo saben pasangan sing bisa nemokake asil operasi apa wae (+, -, *, /). Nilai x, p, alpha, beta, gamma, delta saka persamaan ing ndhuwur bakal dianggep minangka unsur lapangan Galois kanggo petungan.

Dadi, kita duwe sistem persamaan sing bisa nggawe blok kode redundansi kanthi nulis program komputer sing cocog. Nggunakake sistem persamaan sing padha, sampeyan bisa nindakake pemulihan data.

* Iki dudu definisi sing ketat, nanging minangka katrangan.

Carane waras data

Restorasi dibutuhake nalika sawetara saka n + m pamblokiran ilang. Iki bisa dadi blok data lan blok kode redundansi. Ora ana pamblokiran data lan / utawa blok kode redundansi tegese variabel x lan / utawa p sing cocog ora dingerteni ing persamaan ing ndhuwur.

Persamaan kanggo kode Reed-Solomon bisa dideleng minangka sistem persamaan sing kabeh nilai alpha, beta, gamma, delta minangka konstanta, kabeh x lan p sing cocog karo blok sing kasedhiya dikenal variabel, lan x lan p sing isih ana. ora dingerteni.

Contone, supaya blok data 1, 2, 3 lan blok kode redundansi 2 ora kasedhiya, banjur kanggo klompok tembung i-th bakal ana sistem persamaan ing ngisor iki (ora dingerteni ditandhani kanthi abang):

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Kita duwe sistem 4 persamaan karo 4 sing ora dingerteni, tegese kita bisa ngatasi lan mulihake data kasebut!

Saka sistem persamaan iki, ana sawetara kesimpulan babagan pemulihan data kanggo kode Reed-Solomon (n blok data, m blok kode redundansi):

  • Data bisa dibalekake yen ana m blok utawa kurang sing ilang. Yen m + 1 utawa luwih pamblokiran ilang, data ora bisa dibalèkaké: iku mokal kanggo ngatasi sistem m podo karo m + 1 dingerteni.
  • Kanggo waras malah siji pemblokiran data, sampeyan kudu nggunakake sembarang n saka pamblokiran isih, lan sampeyan bisa nggunakake sembarang kode redundansi.

Apa maneh sampeyan kudu ngerti

Ing katrangan ing ndhuwur, aku ngindhari sawetara masalah penting sing mbutuhake nyilem luwih jero menyang matematika. Utamane, aku ora ngomong apa-apa babagan ing ngisor iki:

  • Sistem persamaan kanggo kode Reed-Solomon kudu duwe solusi (unik) kanggo kombinasi sing ora dingerteni (ora luwih saka m sing ora dingerteni). Adhedhasar syarat iki, nilai alpha, beta, gamma lan delta dipilih.
  • Sistem persamaan kudu bisa dibangun kanthi otomatis (gumantung saka blok sing ora kasedhiya) lan ditanggulangi.
  • Kita kudu mbangun lapangan Galois: kanggo ukuran tembung tartamtu, bisa nemokake asil operasi apa wae (+, -, *, /) kanggo rong unsur.

Ing pungkasan artikel kasebut ana referensi sastra babagan masalah penting kasebut.

Pilihan saka n lan m

Carane milih n lan m ing laku? Ing praktik, ing sistem panyimpenan data, kode redundansi digunakake kanggo ngirit papan, mula m tansah dipilih kurang saka n. Nilai spesifik kasebut gumantung saka sawetara faktor, kalebu:

  • Reliabilitas panyimpenan data. M luwih gedhe, luwih akeh kegagalan disk sing bisa slamet, yaiku, luwih linuwih.
  • panyimpenan keluwih. Sing luwih dhuwur rasio m / n, sing luwih dhuwur redundansi panyimpenan bakal, lan sistem bakal luwih larang.
  • Panjaluk wektu pangolahan. Sing luwih gedhe jumlah n + m, luwih suwe wektu nanggepi panjalukan. Wiwit data maca (sajrone Recovery) mbutuhake maca n pamblokiran disimpen ing n disk beda, wektu maca bakal ditemtokake dening disk slowest.

Kajaba iku, nyimpen data ing sawetara DCs watesan tambahan ing pilihan saka n lan m: yen 1 DC dipateni, data kudu isih kasedhiya kanggo maca. Contone, nalika nyimpen data ing 3 DC, kondisi ing ngisor iki kudu ketemu: m > = n / 2, yen bisa uga ana kahanan sing data ora kasedhiya kanggo maca nalika 1 DC dipateni.

3. LRC - Kode Rekonstruksi Lokal

Kanggo mbalekake data nggunakake kode Reed-Solomon, sampeyan kudu nggunakake n pamblokiran data kasepakatan. Iki minangka kerugian sing signifikan kanggo sistem panyimpenan data sing disebarake, amarga kanggo mulihake data ing siji disk sing rusak, sampeyan kudu maca data saka umume liyane, nggawe beban tambahan gedhe ing disk lan jaringan.

Kesalahan sing paling umum yaiku ora bisa diakses siji blok data amarga gagal utawa kakehan siji disk. Apa bisa ngurangi beban keluwihan kanggo pemulihan data ing kasus iki (paling umum)? Pranyata sampeyan bisa: ana kode redundansi LRC khusus kanggo tujuan iki.

LRC (Kode Rekonstruksi Lokal) minangka kode redundansi sing diciptakake dening Microsoft kanggo digunakake ing Windows Azure Storage. Gagasan LRC pancen gampang: dibagi kabeh blok data dadi rong (utawa luwih) klompok lan maca bagean saka blok kode redundansi kanggo saben klompok kanthi kapisah. Banjur sawetara blok kode redundansi bakal diitung nggunakake kabeh blok data (ing LRC diarani kode redundansi global), lan sawetara - nggunakake salah siji saka rong klompok blok data (disebut kode redundansi lokal).

LRC dilambangake kanthi telung nomer: nrl, ing ngendi n minangka jumlah blok data, r minangka jumlah blok kode redundansi global, l minangka jumlah blok kode redundansi lokal. Kanggo maca data nalika siji pamblokiran data ora kasedhiya, sampeyan kudu maca mung n / l pamblokiran - iki l kaping kurang saka kode Reed-Solomon.

Contone, nimbang skema LRC 6-2-2. X1–X6 — 6 blok data, P1, P2 — 2 blok redundansi global, P3, P4 — 2 blok redundansi lokal.

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Blok kode redundansi P1, P2 diitung nggunakake kabeh blok data. Blok kode redundansi P3 - nggunakake blok data X1-X3, blok kode redundansi P4 - nggunakake blok data X4-X6.

Liyane ditindakake ing LRC kanthi analogi karo kode Reed-Solomon. Persamaan kanggo ngetung tembung blok kode redundansi yaiku:

Kode redundansi: kanthi tembung prasaja babagan cara nyimpen data kanthi andal lan murah

Kanggo milih nomer alpha, beta, gamma, delta, sawetara syarat kudu ditemoni kanggo njamin kemungkinan pemulihan data (yaiku, ngrampungake sistem persamaan). Sampeyan bisa maca liyane babagan ing artikel.
Uga ing praktik, operasi XOR digunakake kanggo ngitung kode redundansi lokal P3, P4.

Sejumlah kesimpulan saka sistem persamaan kanggo LRC:

  • Kanggo mbalekake 1 blok data, cukup maca blok n / l (n / 2 ing conto kita).
  • Yen pamblokiran r + l ora kasedhiya, lan kabeh pamblokiran kalebu ing siji klompok, banjur data ora bisa dibalèkaké. Iki gampang diterangake kanthi conto. Ayo blok X1–X3 lan P3 ora kasedhiya: iki minangka blok r + l saka grup sing padha, 4 ing kasus kita. Banjur kita duwe sistem 3 persamaan karo 4 sing ora dingerteni sing ora bisa ditanggulangi.
  • Ing kabeh kasus liyane saka unavailability saka r + l pamblokiran (nalika paling siji pamblokiran kasedhiya saka saben klompok), data ing LRC bisa dibalèkaké.

Mangkono, LRC ngluwihi kode Reed-Solomon ing mbalekake data sawise kesalahan siji. Ing kode Reed-Solomon, kanggo mbalekake siji blok data, sampeyan kudu nggunakake n blok, lan ing LRC, kanggo mbalekake siji blok data, cukup nggunakake blok n / l (n / 2 ing conto kita). Ing sisih liya, LRC luwih cendhek tinimbang kode Reed-Solomon babagan jumlah maksimum kesalahan sing diidini. Ing conto ing ndhuwur, kode Reed-Solomon bisa mbalekake data kanggo 4 kasalahan, lan kanggo LRC ana 2 kombinasi 4 kasalahan nalika data ora bisa mbalekake.

Apa sing luwih penting gumantung ing kahanan tartamtu, nanging asring tabungan ing keluwihan beban sing diwenehake LRC luwih gedhe tinimbang panyimpenan sing rada kurang dipercaya.

4. Kode redundansi liyane

Saliyane kode Reed-Solomon lan LRC, ana akeh kode redundansi liyane. Kode redundansi sing beda nggunakake matematika sing beda. Ing ngisor iki sawetara kode redundansi liyane:

  • Kode redundansi nggunakake operator XOR. Operasi XOR ditindakake ing n blok data, lan 1 blok kode redundansi dipikolehi, yaiku skema n + 1 (n blok data, 1 kode redundansi). Digunakake ing RAID 5, ing ngendi blok data lan kode redundansi ditulis kanthi siklus menyang kabeh disk array.
  • Algoritma ganjil genap adhedhasar operasi XOR. Ngidini sampeyan mbangun 2 blok kode redundansi, yaiku skema n +2.
  • Algoritma STAR adhedhasar operasi XOR. Ngidini sampeyan mbangun 3 blok kode redundansi, yaiku skema n + 3.
  • Kode Pyramide minangka kode redundansi liyane saka Microsoft.

5. Gunakake ing Yandex

Sawetara proyek infrastruktur Yandex nggunakake kode redundansi kanggo panyimpenan data sing dipercaya. Ing ngisor iki sawetara conto:

  • MDS panyimpenan obyek internal, kang aku wrote bab ing awal artikel.
  • YT - Sistem MapReduce saka Yandex.
  • YDB (Yandex DataBase) - database sing disebarake newSQL.

MDS nggunakake kode redundansi LRC, skema 8-2-2. Data karo kode redundansi ditulis kanggo 12 disk beda ing server beda ing 3 DC beda: 4 server ing saben DC. Waca liyane babagan iki ing artikel.

YT nggunakake kode Reed-Solomon (Skema 6-3), sing pisanan dileksanakake, lan kode redundansi LRC (Skema 12-2-2), kanthi LRC minangka cara panyimpenan sing disenengi.

YDB nggunakake kode redundansi adhedhasar genap-ganjil (Gambar 4-2). Babagan kode redundansi ing YDB wis marang ing Highload.

Panggunaan skema kode redundansi sing beda amarga syarat sing beda kanggo sistem. Contone, ing MDS, data sing disimpen nggunakake LRC diselehake ing 3 DC bebarengan. Penting kanggo kita yen data tetep kasedhiya kanggo maca yen 1 saka DC gagal, mula pamblokiran kudu disebarake ing antarane DC supaya yen DC ora kasedhiya, jumlah blok sing ora bisa diakses ora luwih saka diijini. Ing skema 8-2-2, sampeyan bisa nyelehake 4 blok ing saben DC, banjur nalika DC dipateni, 4 blok ora kasedhiya, lan data bisa diwaca. Apa wae skema sing kita pilih nalika dilebokake ing 3 DC, ing kasus apa wae kudu ana (r + l) / n> = 0,5, yaiku redundansi panyimpenan paling sethithik 50%.

Ing YT kahanan beda: saben kluster YT tanggung dumunung ing 1 DC (kluster beda ing DC beda), supaya ora ana watesan kuwi. Skema 12-2-2 nyedhiyakake redundansi 33%, yaiku, nyimpen data luwih murah, lan uga bisa urip nganti 4 gangguan disk simultan, kaya skema MDS.

Ana akeh fitur liyane saka nggunakake kode redundansi ing panyimpenan data lan sistem pangolahan: nuansa Recovery data, impact Recovery ing wektu eksekusi query, fitur saka ngrekam data, etc. Aku arep ngomong kapisah bab iki lan fitur liyane saka nggunakake kode redundansi ing laku, yen topik bakal menarik.

6. Pranala

  1. Serangkaian artikel babagan kode Reed-Solomon lan lapangan Galois: https://habr.com/ru/company/yadro/blog/336286/
    https://habr.com/ru/company/yadro/blog/341506/
    Dheweke njupuk tampilan sing luwih jero babagan matematika ing basa sing bisa diakses.
  2. Artikel saka Microsoft babagan LRC: https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/LRC12-cheng20webpage.pdf
    Bagean 2 njlentrehake kanthi ringkes teori kasebut banjur mbahas pengalaman karo LRC ing praktik.
  3. Skema ganjil genap: https://people.eecs.berkeley.edu/~kubitron/courses/cs262a-F12/handouts/papers/p245-blaum.pdf
  4. Skema STAR: https://www.usenix.org/legacy/event/fast05/tech/full_papers/huang/huang.pdf
  5. Kode 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. Kode redundansi ing MDS: https://habr.com/ru/company/yandex/blog/311806
  7. Kode redundansi ing YT: https://habr.com/ru/company/yandex/blog/311104/
  8. Kode redundansi ing YDB: https://www.youtube.com/watch?v=dCpfGJ35kK8

Source: www.habr.com

Add a comment