Розподілена файлова система Quantcast File System та її невеликий огляд
З розвитком інформаційних технологій зростає потреба у зберіганні та обробці великого обсягу інформації. Для зберігання великого обсягу даних використовуються розподілені файлові системи. Про одну з таких файлових систем і йтиметься у цій статті. Працюючи над проектом, я зіткнувся із потребою у зберіганні великого обсягу даних. Одна із програм проекту, написана на c++, генерує великий обсяг статистики, яку потрібно десь далі зберігати. Працюючи автономно на сервері, така програма генерує сотні гігабайт інформації, а надалі прогнозується лише зростання обсягу інформації, що генерується.
Відповідно, виникає питання – де зберігати всі ці дані? Якщо зберігати дані на півночі, на якій запущено програму, то місце на диску дуже скоро вичерпається. Стало ясно, що для зберігання даних необхідно використовувати розподілену файлову систему, але яку? Гуляючи в Інтернеті знаходимо різні розподілені файлові системи, але погляд мимоволі зупиняється на новій розподіленій файловій системі QFS (Quantcast File System). Давайте зрозуміємо, чому. Не плутайте із QFS (Quick File System) – файловою системою від Sun Microsystems.
Що таке QFS (Quantcast File System)
Quantcast File System (QFS) є високопродуктивною, відмовостійкою, розподіленою файловою системою, розробленою для підтримки технології MapReduce та інших програм, що здійснюють послідовне читання та запис великих файлів.
Трохи про компанію Quantcast з Вікіпедії:
Архітектура QFS

- Metaserver Центральний сервер метаданих, який управляє структурою каталогів файлової системи та відображенням файлів у фізичне сховище.
- Chunk Server Сервер, який зберігає дані.
- Client Library Бібліотека, яка надає API файлової системи, щоб дозволити програмам взаємодіяти з QFS
Можливості QFS
- Масштабованість Ви можете в будь-який час додати до системи ще один Chunk Server. Коли його буде додано, Chunk Server встановить з'єднання з Metaserver і стане частиною системи. Вам не потрібно буде перезавантажувати Metaserver
- Балансування При розміщенні даних Metaserver намагається зберегти дані збалансованим у всіх вузлах системи
- Перебалансування Metaserver перебалансуватиме дані між вузлами в системі, коли сервер виявляє, що деякі вузли недостатньо використовуються (наприклад, chunk server використовує менше 20% простору диска), а інші вузли перевантажені (наприклад, chunk server використовує більше 80% простору диска ).
- Стійкий до падінь Стійкість до зникнення даних це одна з найважливіших властивостей розподіленої файлової системи. QFS підтримує покусочну реплікацію (тобто зберігання кількох копій кожного шматка) ікодування Ріда — Соломона 6+3, недвійковий циклічний код, що дозволяють виправляти помилки в блоках даних — тим самим при такому ж ступені відмовостійкості як при класичної реплікації, загальний обсяг інформації, що зберігається менше! Приклад, якщо в HDFS для зберігання 100 терабайт даних з реплікацією на 3-х серверах потрібно 300 терабайт вільного місця, то для зберігання в QFS із забезпеченням такої ж стійкості до відмови потрібно тільки 150 терабайт.
- Ре-плікація Якщо ступінь реплікації файлу впаде нижче встановленого значення (наприклад, через тривале відключення chunk сервера), Metaserver автоматично виконує реплікацію недоступних шматків файлу. Данапроцедура виконується у фоновому режимі без перевантаження системи.
- Цілісність даних Щоб впоратися з пошкодженням на дисках блоків даних, розраховується контрольна сума кожного блоку. Щоразу при читанні перевіряється контрольна сума блоку і якщо блок пошкоджений, то використовується механізм ре-плікації для його відновлення.
- Кешування метаінформації на стороні клієнта Бібліотека QFS клієнт кешує пов'язані з каталогом метадані, щоб уникнути повторного пошуку сервера під час перетворення шляхів. Ця інформація очищається з кешу після 30 сек.
- Запис у файл Клієнтська бібліотека QFS використовує кеш зі зворотним записом. Як тільки кеш переповнюється, дані надсилаються серверам chunk. Програма може вручну скинути дані на сервер chunk, використовуючи метод sync()
- Керування версіями Куски даних мають версію, щоб виявити застарілі дані. Розглянемо наступний сценарій:
- Припустимо, що chunk сервери s1, s2 та s3 зберігають версію V шматка C
- Припустимо, що сервер s1 впав і поки сервер s1 лежить клієнт почав запис у C
- Запис буде виконано на сервері s2 та s3. Версія шматка буде змінена на версію V2
- Коли s1 запуститься, він запросить метасервер версії всіх шматків, які він зберігає. Метасервер помітить, що сервер s1 зберігає застарілу версію шматка C і повідомить про це сервер s1
- Сервер s1 видалить застарілий шматок C
Відомі проблеми та обмеження
Швидкий старт
Відомі граблі
Цікаві посилання (англійська мова)
Висновок
Суть даного посту не в огляді різних розподілених файлових систем, і не в порівнянні з можливостями QFS, наприклад з HDFS Hadoop. Мета цієї посади звернути увагу вітчизняної IT-спільноти на нову, цікаву на тлі інших, розподілену файлову систему QFS (Quancast File System). Нехай ще молоду і не позбавлену деяких недоліків, але, безумовно, готову зайняти найближчим часом своє місце в екосистемі DFS.
Хардкорна конфа за С++. Ми запрошуємо лише профі.