Управляемое чтение
OPPO — компания-производитель интеллектуальных терминалов с сотнями миллионов пользователей терминалов, ежедневно генерирующая большое количество неструктурированных данных, таких как текст, изображения, аудио и видео. При условии обеспечения подключения к данным, требований управления в режиме реального времени и безопасности данных, как в полной мере использовать ценность данных с низкими затратами и высокой эффективностью, стало серьезной проблемой для компаний с большими объемами данных. В настоящее время популярным решением в отрасли является озеро данных.Хранилище озера данных CBFS, разработанное OPPO, представленное в этой статье, может в значительной степени решить текущие проблемы.
▌Краткое введение в озеро данных
Определение озера данных: централизованный репозиторий, в котором данные хранятся в исходном формате данных, обычно в виде двоичного двоичного объекта или файла. Озеро данных обычно представляет собой единый набор данных, который включает в себя необработанные данные, а также преобразованные данные (отчеты, визуализации, расширенную аналитику и машинное обучение и т. д.).
1. Ценность хранилища данных в озере
По сравнению с традиционной архитектурой Hadoop озеро данных имеет следующие преимущества:
- Высокая гибкость: данные легко читать, записывать и обрабатывать, а все необработанные данные можно сохранить.
- Множественный анализ: поддерживает несколько рабочих нагрузок, включая пакетные, потоковые вычисления, интерактивные запросы, машинное обучение и т. д.
- Низкая стоимость: независимое расширение хранилища и вычислительных ресурсов, использование объектного хранилища, разделение горячего и холодного, более низкая стоимость.
- Простота управления: идеальное управление пользователями и аутентификация, соответствие требованиям и аудит, а также весь процесс «хранения и управления» данными можно отследить.
2. Комплексное решение OPPO для озера данных
OPPO в основном строит озеро данных из трех измерений: нижний уровень хранилища озера, мы используем CBFS, недорогое хранилище, которое одновременно поддерживает протоколы доступа к файлам S3, HDFS и POSIX; средний уровень — реальный. Формат хранения данных о времени, мы используем айсберг, верхний слой может поддерживать различные вычислительные движки
3. Особенности архитектуры OPPO Data Lake
Характеристики раннего хранилища больших данных заключаются в том, что потоковые и пакетные вычисления хранятся в разных системах.Обновленная архитектура имеет унифицированное управление метаданными и интегрированные пакетные и потоковые вычисления.В то же время она обеспечивает унифицированный интерактивный запрос с более удобным интерфейсом. интерфейс и секунды Высокоуровневый ответ, высокий параллелизм и поддержка операций изменения источника данных Upsert; нижний уровень использует крупномасштабное недорогое хранилище объектов в качестве единой базы данных, поддерживает совместное использование данных с несколькими механизмами и улучшает повторное использование данных возможности
4. Архитектура Data Lake Storage CBFS
Наша цель — создать хранилище озера данных, которое может поддерживать данные уровня EB и решать проблемы анализа данных с точки зрения стоимости, производительности и опыта.Все хранилище озера данных разделено на шесть подсистем:
- Уровень доступа к протоколу: поддерживает множество различных протоколов (файлы S3, HDFS, Posix), данные могут быть записаны в одном из протоколов и могут быть прочитаны напрямую двумя другими протоколами.
- Слой метаданных: иерархическое пространство имен файловой системы и плоское пространство имен объектов представлены извне.Все метаданные распределены, поддерживают сегментирование и линейно масштабируются.
- Уровень кэша метаданных: используется для управления кэшем метаданных и обеспечения возможности ускорения доступа к метаданным.
- Уровень управления ресурсами: главный узел на рисунке отвечает за управление физическими ресурсами (узлы данных, узлы метаданных) и логическими ресурсами (тома/сегменты, осколки данных, осколки метаданных).
- Слой с несколькими копиями: поддерживает добавление записи и случайную запись, а также удобен как для больших, так и для маленьких объектов. Одной из функций этой подсистемы является постоянное хранилище с несколькими копиями, другой функцией является уровень кэширования данных, который поддерживает эластичные копии, ускоряет доступ к озеру данных и расширяет его позже.
- Уровень хранения кода стирания: может значительно снизить затраты на хранение, поддерживает развертывание зон с несколькими доступными зонами, поддерживает различные модели кода стирания и легко поддерживает масштабирование хранилища на уровне EB.
Далее я сосредоточусь на том, чтобы поделиться ключевыми технологиями, используемыми CBFS, включая высокопроизводительное управление метаданными, хранилище кода стирания и ускорение озера.
▌Ключевая технология CBFS
1. Управление метаданными
Файловая система обеспечивает иерархическое представление пространства имен. Логическое дерево каталогов всей файловой системы разделено на несколько слоев. Как показано на рисунке справа, каждый узел метаданных (MetaNode) содержит сотни или тысячи разделов метаданных (MetaPartition). Каждый сегмент состоит из InodeTree (BTree) и DentryTree (BTree), каждый dentry представляет собой запись в каталоге, а dentry состоит из parentId и имени. В DentryTree индекс состоит из PartentId и имени для хранения и извлечения; в InodeTree он индексируется по идентификатору инода. Протокол multiRaft используется для обеспечения высокой доступности и репликации согласованности данных, и каждый набор узлов будет содержать большое количество групп осколков, каждая группа осколков соответствует группе raft, каждая группа осколков принадлежит тому, каждая группа осколков является диапазон метаданных тома (сегмент идентификатора inode); подсистема метаданных завершает динамическое расширение путем разделения; когда ресурс сегментированной группы (производительность, емкость) непосредственно примыкает к значению, служба диспетчера ресурсов оценит конечную точку и уведомить эту группу узловых устройств, чтобы они обслуживали данные только до этого момента, и в то же время будет выбрана и динамически добавлена в текущую бизнес-систему новая группа узлов. Один каталог поддерживает емкость до миллиона уровней, а метаданные полностью хранятся в памяти, что обеспечивает превосходную производительность чтения и записи. Осколки метаданных памяти сохраняются на диске с помощью моментальных снимков для резервного копирования и восстановления.Хранилище объектов предоставляет плоское пространство имен; например, чтобы получить доступ к объекту, объектный ключ которого /bucket/a/b/c, начните с корневого каталога, проанализируйте разделитель «/» слой за слоем и найдите последний слой каталога. (/bucket /a/b) Dentry, и, наконец, нашел /bucket/a/b/c для Inode, этот процесс предполагает множественные взаимодействия между узлами, чем глубже уровень, тем хуже производительность, поэтому вводим модуль PathCache Для ускорения разбора ObjectKey простым способом является кэширование Dentry родительского каталога (/bucket/a/b) ObjectKey в PathCache, анализируя онлайн-кластер, мы обнаружили, что средний размер каталога составляет около 100. Это составляет всего 1 миллиард, а эффективность кеша одной машины очень высока. В то же время производительность чтения может быть улучшена с помощью разных узлов. Он поддерживает дизайн «плоского» и «иерархического» управления пространством имен одновременно , По сравнению с другими системами в отрасли, CBFS может обеспечить более высокую производительность.Проще и эффективнее, часть данных может быть легко реализована без какого-либо преобразования, доступ к нескольким протоколам и совместимость, и нет проблем с согласованностью данных.
2. Хранение кода стирания
Одной из ключевых технологий для снижения затрат на хранение является код стирания (EC), краткое введение в принцип кода стирания: k копий исходных данных вычисляются путем кодирования для получения новых m копий данных, когда k+m копий данных При потере не более m копий исходные данные можно восстановить декодированием (принцип немного напоминает дисковый рейд), по сравнению с традиционным многокопийным хранилищем EC имеет меньшую избыточность данных, но более высокую устойчивость данных Высокая; есть много разных способов реализовать это, большинство из них основаны на операции XOR или кодировании Рида-Соломона (RS), наша CBFS также использует кодирование RSэтапы расчета: 1. Матрица кодирования, верхние n строк — единичная матрица I, а нижние m строк — матрица кодирования, вектор, состоящий из k+m блоков данных, включая исходный блок данных и m контрольных блоков 2. Когда блок потерян: удалите строку, соответствующую блоку, из матрицы B, чтобы получить новую матрицу B', а затем умножьте обратную матрицу B' слева, чтобы восстановить потерянный блок. Подробный процесс расчета можно читать оффлайн Актуальная информацияЕсть некоторые проблемы с обычным кодированием RS: приведенное выше изображение взято в качестве примера, предполагая, что X1~X6, Y1~Y6 являются блоками данных, P1 и P2 являются контрольными блоками, если какой-либо из них потерян, оставшиеся 12 блоков для чтения для восстановления данных. Потери ввода-вывода велики, а полоса пропускания, необходимая для восстановления данных, высока. Проблема особенно очевидна, когда развернуто несколько зон доступности; Код LRC, предложенный Microsoft, решает эту проблему, вводя локальный блок проверки.Как показано на рисунке, на основе исходных глобальных блоков проверки P1 и P2 добавляются два новых блока локальной проверки PX и PY, предполагая, что X1 повреждены, данные можно восстановить, только прочитав 6 блоков, связанных с X1~X6. Статистика показывает, что в центре обработки данных вероятность отказа одного диска в страйпе за определенный период времени составляет 98%, а вероятность одновременного повреждения двух дисков — 1%. эффективность восстановления данных в большинстве сценариев, но ее недостатки. Это кодирование с разделением на не максимальное расстояние, которое нельзя использовать для восстановления любых потерянных данных, таких как глобальное кодирование RS.
тип ЕС
1. Offline EC: после того, как вся полоса заполнена k единицами данных, общий расчет генерирует m контрольных блоков. 2. Онлайн-EC: после получения данных синхронно разделите их и вычислите контрольный блок в режиме реального времени, а также запишите k блоков данных и m контрольных блоков одновременно.
CBFS Мультимодальный онлайн EC по всей Аризоне
CBFS поддерживает онлайн-хранилище EC в многорежимных полосах AZ.Для разных условий машинного зала (1/2/3AZ), объектов разного размера, разной доступности сервисов и требований к долговечности данных система может гибко настраивать разные режимы кодирования На примере режима «1AZ-RS» на рисунке в одной AZ развернуто 6 блоков данных и 3 контрольных блока, в режиме 2AZ-RS используется 6 блоков данных и 10 контрольных блоков для развертывания 2AZ с резервированием данных. Это 16/6=2,67; режим 3AZ-LRC, использующий 6 блоков данных, 6 глобальных контрольных блоков плюс 3 локальных контрольных блока; один и тот же кластер одновременно поддерживает разные режимы кодирования.
Архитектура онлайн-хранилища EC
Содержит несколько модулей Доступ: уровень доступа к данным, предоставляющий возможности кодека EC. CM: Уровень управления кластером, узлы управления, диски, тома и другие ресурсы также отвечают за задачи миграции, восстановления, балансировки и проверки.Один и тот же кластер поддерживает сосуществование разных режимов кодирования EC. Распределитель: отвечает за выделение пространства тома EC-Node: автономный механизм хранения, отвечающий за фактическое хранение данных.
стирающее кодирование
1. Потоковые данные 2. Создайте несколько блоков данных для срезов данных и одновременно вычислите контрольные блоки. 3. Подать заявку на объем хранилища 4. Одновременно распределите блоки данных или проверочные блоки на каждый узел хранения. Запись данных использует простой протокол NRW для обеспечения минимального количества записываемых копий, так что в случае нормального отказа узла и сети запрос не будет заблокирован, гарантируя доступность; приняты прием данных, сегментация и контрольное блочное кодирование. Метод асинхронного конвейера также обеспечивает высокую пропускную способность и низкую задержку.
Код стирания прочитан
Чтение данных также принимает модель NRW.В качестве примера возьмем режим кодирования k=m=2, если 2 блока (будь то блок данных или контрольный блок) считаны правильно, исходные данные могут быть получены путем быстрое вычисление декодирования RS; чтобы повысить доступность и уменьшить задержку, Access будет предпочтительно читать соседний или малонагруженный узел хранения EC-Node Видно, что онлайн-EC в сочетании с протоколом NRW обеспечивает высокую согласованность данных и обеспечивает высокую пропускную способность и низкую задержку, что очень подходит для бизнес-модели больших данных.
3. Ускорение доступа к озеру данных
Одним из существенных преимуществ архитектуры озера данных является экономия средств, но архитектура с разделением ресурсов хранения и вычислений также сталкивается с узкими местами пропускной способности и проблемами с производительностью, поэтому мы также предлагаем ряд технологий ускорения доступа: Во-первых, это возможность многоуровневого кэширования: 1. Кэш первого уровня: локальный кеш, который развернут на той же машине, что и вычислительный узел, поддерживает метаданные и кеш данных, а также поддерживает различные типы носителей, такие как память, PMem, NVme и жесткий диск. низкая задержка доступа, но небольшая емкость. 2. Кэш второго уровня: распределенный кеш, гибкое и переменное количество копий, обеспечение осведомленности о местоположении, поддержка активного предварительного нагрева и пассивного кэширования на уровне пользователя/корзины/объекта, а также настраиваемые политики удаления данных. Стратегия многоуровневого кэширования дает хороший эффект ускорения в наших сценариях обучения машинному обучению. Кроме того, уровень данных хранилища также поддерживает операцию проталкивания предикатов, что позволяет значительно сократить поток больших объемов данных между узлами хранения и вычислительными узлами, снизить нагрузку на ресурсы и повысить производительность вычислений; Предстоит еще много детальной работы по ускорению озера данных, и мы также находимся в процессе постоянного улучшения.
▌Взгляд в будущее
В настоящее время версия CBFS-2.x имеет открытый исходный код, а версия 3.0, которая поддерживает ключевые функции, такие как онлайн-EC, ускорение озера и многопротокольный доступ, как ожидается, будет открыта в октябре 2021 года; В последующем CBFS будут добавлены такие функции, как прямое монтирование существующих кластеров HDFS (без перемещения данных), интеллектуальная стратификация горячих и холодных данных и другие функции для поддержки плавного ввода существующих данных в озеро в соответствии с исходной архитектурой больших данных и ИИ. .
Об авторе:
Сяочунь Архитектор системы хранения данных OPPO
Для получения более интересного контента, пожалуйста, обратите внимание на общедоступную учетную запись [OPPO Digital Intelligence Technology].