Кодування: від блоків даних до полінома
Reed-Solomon кодування розглядає фрагмент k символів даних не як необхідні біти, а як коефіцієнти або точки оцінки полінома ступеня меншого ніж k, працюючи над кінцевим полем, зазвичай над полем Галуа GF(2 до 8 степенів), щоб кожен символ вміщувався в байт. Для виробництва m парних символів, кодувальник оцінює цей поліном у m додаткових, відмінних точках поза k, що використовувалися для представлення оригінальних даних, або еквівалентно множить вектор даних на спеціально сконструйовану генераторну матрицю, рядки якої відповідають точкам оцінки. Ключовий математичний факт, який робить це можливим, полягає в тому, що поліном ступеня меншого ніж k повністю і унікально визначений будь-якими k з його точок оцінки, безпосередній наслідок теореми про алгебру над кінцевим полем. У системах зберігання цього зазвичай реалізується як розділення великого файлу на смуги, беручи k блоків даних на смугу та обчислюючи m парні блоки на смугу, з усіма k плюс m блоками розподіленими в окремих доменах відмов, таких як окремі диски, сервери або шафи, щоб одне обладнання не могло вивести більше блоків, ніж може витримати код.
Еразійний модель проти помилкової моделі
Коди Reed-Solomon були спочатку розроблені для виправлення помилок, тобто символів, які приходять пошкодженими на невідомих позиціях, що складніше, ніж виправляти видалення, де позиції відсутніх символів відомі, але їхні значення невідомі. Розповсюджене зберігання майже завжди працює в еразійній моделі: коли диск виходить з ладу або вимикається вузол, система знає, які блоки зникли, їй потрібно лише відновити їх вміст. Це розрізнення має величезне значення для ефективності, оскільки виправлення невідомих позицій помилок потребує 2t паралітарних символів за класичними обмеженнями, тоді як виправлення відомих позицій видалень потребує лише t паралітарних символів, точно вдвічі менше навантаження. Система, яка налаштована з k рівним десяти давальним блокам і m рівним чотирьом паралітарним блокам, часто записується як схема RS(14,10), може тому відмовлятися від втрати будь-яких чотирьох блоків у смузі та все ще відновлювати все, тоді як досягнення тієї ж стійкості до помилок на невідомих місцях вимагало б подвоєного обсягу паралітарних символів.
Розшифрування: поліноміальна інтерполяція та реконструкція Лагранжа
Коли відсутніх до m блоків у смузі становить до k + m блоків, вижилі блоки є простими k або більше відомими точками оцінки початкового многочлена ступеня менше ніж k, і реконструкція стає класичною проблемою інтерполяції: за достатньою кількістю точок відновити унікальний многочлен, який проходить через них, а потім оцінити його знову на початкових позиціях даних для відновлення відсутніх символів. Лагранжева інтерполяція надає пряму формулу, яка виражає многочлен як зважену суму базисних поліномів, кожен з яких є рівним нулю в одній відомій точці і рівний 1 у всіх інших, але практичні реалізації часто інвертують підматрицю генераторної матриці, що відповідає вижилим точкам оцінки, оскільки інверсія матриць над Галузиовою полем може бути попередньо обчислена та оптимізована за допомогою табличних пошуків для обраного k і m. Усі арифметичні операції виконуються в конечному полі, де додавання є бітовим XOR, а множення використовує таблиці, специфічні для поля, тому весь процес кодування та розкодування, незважаючи на те, що він здається важкою алгеброю, насправді зводиться до швидких пошуків у таблицях і операцій XOR, які ефективно працюють навіть на звичайному обладнанні, а також все частіше на спеціалізованих інструкціях в сучасних процесорах.
RAID6, HDFS, і компроміс між витратами на зберігання та стійкістю до відмов
RAID6 є найпоширенішим реальним прикладом цієї ідеї, який використовує точно два блоки парності для виживання одночасного відключення будь-яких двох дисків у масиві, що є покращенням відносно стійкості до відмов однієї пари, яка стала необхідною з ростом розмірів дисків та збільшенням часу відновлення, під час якого друга відмова є найбільш небезпечною, розтягнутим на тривалий термін. Розповсюджені файлові системи та об’єктні сховища розвивають цю ідею далі за допомогою більших значень k і m, оптимізованих для їхніх характеристик відмов; режим erasure coding HDFS, наприклад, часто використовує схеми 6-з-9 або 10-з-14, обмінюючи більшу ймовірність одночасного недоступності блоків під час відновлення за витрати на зберігання, які становлять до 40% від розміру вихідних даних, порівняно з двомасотвідсотковими витратами на трьохстороннє реплікацію. Основний компроміс полягає у регулюванні між ефективністю зберігання та стійкістю до відмов: збільшення m підвищує кількість одночасних відмов, які може витримати смуга, але пропорційно збільшує витрати на зберігання та обчислення, а збільшення k відносно m також знижує витрати, але також підвищує кількість вузлів, які потрібно прочитати для відновлення навіть одного відсутнього блоку, що є важливим міркуванням як для математики стійкості, так і для реальної пропускної здатності ремонту.
Вартість ремонту та чому це має значення у масштабах
Зберігаюча ефективність Reed-Solomon супроводжується реальною операційною вартістю під час відновлення: реконструкція одного втраченого блоку в наївній схемі вимагає читання k виживших блоків у мережі для виконання інтерполяції, що при великому k може означати значний міжвузловий пропускну здатність та I/O лише для виправлення однієї несправності, тягар, який стає важчим зі збільшенням масштабів кластерів до тисяч вузлів, які регулярно зазнають відмов дисків. Це призвело до цілого підгалуження теорії кодування з метою зменшити пропускну здатність ремонту, включаючи коди регенерації, які обмінюються невеликою додатковою кількістю зберігання на значно дешевші ремонти шляхом відправлення вижившими вузлами малих лінійних комбінацій замість цілих блоків, і локально відновлювані коди, які додають додаткові, менші групи парності, щоб більшість одновузлових відмов можна було виправити лише читанням кількох сусідніх блоків замість повного k, необхідного для класичного Reed-Solomon. Розуміння простої реконструкції Reed-Solomon є невід'ємною основою для всіх цих удосконалень, оскільки вони всі все ще покладаються на той самий принцип, що поліном або лінійний код загалом може бути відновлений з достатньої кількості незалежних уривків доказів про його значення.
Frequently asked questions
Що означає нотація RS(k+m, k)?
Це описує схему Reed-Solomon з k даними блоками та m параітніми блоками, на стрічку загалом k+m блоків. Будь-які k блоків з k+m блоків, у будь-якій комбінації, достатньо для відновлення всього початкових даних.
Чому erasure coding дешевше за replication для такої ж стійкості?
Трійнове replication потребує 200% надлишку зберігання для виживання двох збоїв, тоді як схема Reed-Solomon, така як RS(14,10), витримує чотири збої лише з 40% надлишком. Математика поліномів дозволяє параітним блокам більш щільно кодувати надмірність, ніж повні копії.
Чому Reed-Solomon використовує арифметику над Galeyсовим полем замість звичайних цілих чисел?
Обмежене поле гарантує, що кожен ненульовий елемент має мультиплікативну обернену величину та що операції ніколи не переповнюються або не втрачають точності, що є необхідним для того, щоб кроки інтерполяції та інверсії матриць завжди досягали точного результату. GF(2^8) популярний, оскільки кожен елемент поля відносно легко відображається на один байт.
Яка практична різниця між виправленням помилок і виправленням видалень?
Видалення має відоме місцезнаходження, але невідому величину, як диск, який просто вимкнено; а похибка має невідоме місцезнаходження та невідому величину, як приховано пошкоджені дані. Виправлення видалень потребує лише половини параіту від того ж числа помилок, що й виправляє, тому системи зберігання, які точно знають, які вузли вийшли з ладу, можуть бути набагато більш ефективними з точки зору використання місця.
Чому ремонт одного втраченого блоку може бути дорогим у масштабі?
Класичне відновлення Reed-Solomon потребує читання k виживших блоків для побудови ще одного відсутнього блоку, що означає значний мережевий та дисковий ввід/вивід для великих k. Ця проблема пропускної здатності ремонту є причиною розробки таких технік, як відновлювані коди та локально відновлювані коди як удосконалень.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Reed-Solomon Erasure Coding for Distributed Storage і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Reed-Solomon Erasure Coding for Distributed Storage