Это совместное использование в основном включает в себя четыре аспекта:
Статус хранилища
1
Структура хранения:В основном он разделен на слои хранилища сверху вниз.、Уровень планирования、Уровень вычислительного механизма и уровень управления платформой.
2
Размер хранилища:хранилище Размер кластера – тысячи единиц.,Масштаб храненияоколо сотен PB, количество файлов около нескольких миллиардов, самый большой QPS Около сотен тысяч.
ускорение хранения данных
1
Presto оптимизирует и ускоряет запросы;
2
Для решения проблем решения Alluxio+Presto была разработана архитектура Cache Manager;
3
Отображение эффекта: Alluxio в настоящее время находится в сети, и сбор данных не завершен. Однако из существующих тестовых данных видно, что чтение всех данных из Alluxio может обеспечить максимальное улучшение на 55,51% по сравнению со всеми запросами из HDFS.
Хранение как услуга
1
Болевые точки бизнеса: 1) Большая часть бизнес-данных хранится в HDFS. 2) Разные компании используют разные языки разработки. 3) Текущий клиент HDFS, отличный от JAVA, несовершенен;
2
Решение: предохранитель для HDFS, S3 для HDFS;
3
Развертывание на физическом компьютере Alluxio Fuse;
4
развертывание K8s CSI Alluxio Fuse;
5
Развертывание режима коляски K8s Alluxio Fuse;
6
S3 for HDFS;
7
Отношения сопоставления прокси;
8
Внедрить аутентификацию через прокси.
один、Статус хранилища
1. Структура хранения
в настоящий момент Шопиизструктура хранения Сверху вниз он в основном делится нахранилищеслой、Уровень планирования、Уровень вычислительного механизма и уровень управления платформой,существоватьдвигательслойиметь Уровень планирования включает Spark, Flink, Presto; Хранение пряжи в основном; HDFS и Ozone,верноconnectхранилищеlayerizтакже имеет несколько приложений,Например, рекомендации, поиск и т. д.
2. Шкала хранения
Масштаб нашего кластера хранения составляет тысячи единиц, а масштаб хранилища — около сотен. PB, количество файлов около нескольких миллиардов, самый большой QPS Около сотен тысяч.
два、ускорение хранения данных
1. Presto оптимизирует и ускоряет запросы
ускорение хранения данныхчасть,Главная даниглаверно Presto, который является активным пользователем нашей системы хранения. в настоящий момент Presto Размер кластера — около тысячи экземпляров, TP90. Это занимает около двух минут, а каждый день считывается около десятков файлов. ПБ, объем запросов, вероятно, составляет сотни тысяч в день.
После длительного использования я обнаружил, что HDFS Производительность часто нестабильна, Престо. Запрос также будет иметь джиттер. Следовательно, существует необходимость как улучшить скорость запросов, так и обеспечить их стабильность. В настоящее время более распространенным методом улучшения является добавление cache,cache Более распространенный метод – использовать Alluxio。Alluxio Относительно классический подход в схеме: Presto Worker и Alluxio Worker При совместном развертывании HDFS установлен на Alluxio Справочник, Престо проходить Alluxio доступ HDFS, кэш Alluxio Управляйте этим сами.
В этом классическом решении Alluxio+Presto также есть некоторые проблемы:
1
Емкость хранилища Shopee находится на уровне ПБ, а емкость кэша — на уровне ТБ, что составляет примерно одну тысячную разницу, поэтому емкость кэша необходимо настроить так, чтобы она соответствовала некоторым требованиям для работы Presto;
2
Если данных нет в Alluxio, вам необходимо сначала импортировать данные в Alluxio. Попробовав, мы обнаружили, что первый импорт данных займет много времени.
Решение:
1
Для HMS: установите флаг, чтобы сообщить Presto, находится ли кэш в Presto или Alluxio;
2
Для Alluxio Worker: спроектируйте Cache Manger, настройте стратегию кэширования и загрузите кэш заранее;
3
После появления этого знака Presto Вы можете проверить это напрямую HDFS,ненужныйпроходить Alluxio Перейти на транзит.
2. Архитектура Cache Manager и заполнить детали
Для решения вышеуказанных проблем мы разработали систему Cache Manager. Во-первых, давайте взглянем на общую архитектуру Cache Manager:
1
Cache Manager проходить load/unload/mount выдано Alluxio,Alluxio из HDFS загрузить данные;
2
Загрузите несколько горячих таблиц в соответствии с некоторыми стратегиями кэширования;
3
увеличить некоторые API-интерфейсы, которые могут выполнять некоторый ввод и вывод;
4
выполнить Kafka из HDFS действительно был загружен из кэша с некоторыми изменениями;
5
Установите несколько флагов в HMS, чтобы механизм вычислений мог получать данные из HMS и загружать данные из Alluxio.
Посмотри дальше Cache Manager изодиннекоторыйвыполнитьдеталь。
1
счетчик тепла:проходить Presto журнал запросов, генерируемый каждый день Hive поверхность,Разделение по дате,Статистика популярности каждого стола и каждого дня,То есть время доступа.
2
стратегия кэширования
Получите взвешенные данные о наиболее частом доступе к таблице за последние семь дней из горячей таблицы и возьмите самые последние данные для каждой таблицы. m разделы, переместите эти разделы из HDFS загрузить в Alluxio , сохраните эти отношения в базе данных, а затем HMS Установить флаг. Внимание изда,Это относительно младшая версия,Мы продолжим итерации и оптимизацию в будущем.
√
HMS Логотип: принят key из Способ
Key да Cach,Value да центр обработки данных, тогда да Alluxio а также Alluxio изNameService, у нас будет несколько Alluxio из Служить.Если раздел хранитсуществовать,установитсуществовать partition атрибут, если раздел не существует, ему присваивается значение table Атрибут начальства. На рисунке справа изображено изда. Presto идти HMS Запрос, если в Alluxio Ну давай жеидти Alluxio Запрос, если не будет существовать HDFS Запрос.
Например, в примере введите tag После флага мы видим, что есть Cache Атрибут, идентифицирующий этот кэш, дасуществовать который Alluxio начальство.
√
Интерфейс: Есть много интерфейсов
наспредоставил некоторые интерфейсы, есть путь к интерфейсу и таблица к интерфейсу, а также несколько интерфейсов администратора. Пути, таблицы и интерфейсы несколько отличаются. mount, unmount, load,query,поверхностьиз load Интерфейс станет более подробным.
3. Дисплей эффектов
в настоящий момент Alluxio Он запускается онлайн, сбор данных неполный, но существующие тестовые данные можно увидеть из Alluxio Читайте больше, чем все из HDFS Максимальный запрос может достигать 55.51% из Вознесения.
4. Вклад сообщества Alluxio
три、Хранение как услуга
1. Болевые точки бизнеса
√
Большая часть бизнес-данных хранится в HDFS;
√
Разные компании используют разные языки разработки;
√
в настоящий момент HDFS из Нет JAVA Клиент не идеален.
2. Решение
Чтобы предоставить бизнес-персоналу более зрелый и удобный способ, от Хранение как Начиная с точки зрения услугаиз, присоединяйтесь к нам верно Alluxio Согласно исследованию, предусмотрены следующие два типа решений.
(1)Fuse for HDFS:существовать Fuse существуют как данные локального доступа в доступе HDFS изданных, мы предоставляем два режима развертывания: развертывание на физическом компьютере. Alluxio Fuse сервис, а также Kubernetes развертывать Alluxio Fuse Служить.
(2)S3 for HDFS:проходить S3 API доступ Alluxio Служить.S3 верно Многоязычная поддержка может решить проблему языковых различий разработки и в то же время Alluxio верно S3 Совместимый интерфейс,используйте S3 интерфейсдоступ HDFS Данные очень удобны, и мы наконец решили использовать этот метод для улучшения пользовательского опыта.
3. Узнайте о предохранителе
Fuse Он принадлежит к программной системе пользовательского режима и состоит из двух частей: модуль ядра также Демон пользовательского пространства. Предохранитель Это приносит большое удобство пользователям и разработчикам. Модуль ядра существует без поддержки, разработчикам нужно только восстановить стандартные POSIX Интерфейс протокола позволяет вам иметь собственную файловую систему.
Изображение справа представляет собой Fuse Схема архитектуры службы: когда существующий пользователь монтируется в каталог для выполнения файловых операций, будет запущен системный вызов VFS. Направьте эти операции на Fuse driver,Fuse driver Создайте запрос и поместите его в очередь запросов, Fuse daemon Блочное устройство читает запрос из очереди ядра и выполняет пользовательские логические операции.
4. физическая машинаразвертывать Alluxio Fuse
Сначала посмотрите на картинку справа, Аллюксио. Fuse услуга эквивалентна упомянутой выше. Fuse демон, при запуске Alluxio Fuse из-за того, что это эквивалентно выполнению операции монтирования, он вызовет libfuse из метода, чтобы kernel идти Регистрировать точку монтирования также функция обратного вызова. существуют Выполните операцию из в каталоге монтирования и выполните логику функции обратного вызова, как описано на рисунке ls Команда, наконец, получает результат даверно mount из Alluxio Операция выполнения каталога из списка результатов.
в использовании Alluxio Fuse Прежде нам нужно установить libfuse 。в настоящий момент, когда сообщество из версии поддерживает libfuse2 из,libfuse3 Это также должно быть в процессе разработки. Есть два способа произнести слово: да. JNR-Fuse Ада JNI-Fuse。JNR-Fuse Поскольку это проект индивидуального обслуживания, любые возникающие проблемы не могут быть решены своевременно. и JNI-Fuse Да Alluxio Сообщество для поддержки и существования сценариев параллелизма JNI-Fuse Лучшая производительность. Для да мы выбрали JNI-Fuse Как мы извыполним путь.
Alluxio Fuse Предусмотрено два режима развертывания, один из которых интегрирован в worker процесс, который может сэкономить rpc вызов,Еще одно развертываниесуществовать на клиентской машине.,в настоящий Мы используем отдельный режим развертывания, потому что наш клиент пользовательского приложения не обязательно и worker существоватьтакой жеодининдивидуальныйузел,Итак, к Более гибкий выборизнезависимыйразвертыватьмодель。
Хотя Alluxio Fuse Стандарт поддержки из POSIX согласен, но даит изфокусда предоставляет услуги чтения, потому что в настоящий моментиз Основные сценарии использования да ускорение AI Тренировка, это типичный сценарий чтения. верно Ю случайно пишу изSupportв настоящий моментнедостаточно хорошо。инасиз Потребности в сервитизации могут включать не толькодачитатьпросить,Это также то, что нам нужно улучшить позже.,Лучшая поддержка потребностей пользователей.
5. K8s CSI развертывать Alluxio Fuse
существуют После введения развертывания физической машины давайте посмотрим, как существуют K8s кластерразвертывать。использовать K8sиз CSI может быть Alluxio Fuse Служитьразвертыватьприезжать K8s да, CSI даа контейнер из стандартного интерфейса хранилища. С помощью CSI из возможностей оркестрации контейнеров, мы можем быть Любая система хранения подвергается воздействию контейнера, тем самым используя эти хранилища Служить. Alluxio Как использовать CSI из Принципиальная схема. Мы видим, что основная часть вышеизложенного CSI часть, Чтосерединаодинчасть Да K8s Сообщество поддерживает компоненты (правая часть), и они нам нужны больше. наизда. Левая часть требует от разработчиков определить часть, которая в основном включает в себя CSI Controller и CSI NodeServer。Controller В качестве управляющей стороны он реализует такие функции, как создание, удаление, монтирование и деинсталляция. и NodeServer Конец да выполнить конкретные из mount действоватьизузел。существовать Alluxio из CSI Среди них NodeServer к daemonset Шаблон развернуть в каждый Node узелначальство.
Чтобы использовать четко определенные из Alluxio Fuse из службы, просто пользователь существует определение PV если указано, используйте Alluxio CSI Этот вид услуги может предоставлять услугу монтирования данных, и ее необходимо указать. В качестве точки монтирования используется бизнес-каталог в сервисной системе Alluxio. Затем существовать создать бизнес POD со временем оно будет существовать Запустите его на NodeServer Alluxio Fuse услуги, бизнес POD Просто кдоступустановлен на Alluxio Какой из каталога. В этом режиме NodeServer Может быть несколько Fuse процесс, который может сэкономить ресурсы. Но да, у этого есть недостаток. NodeServer Возникает исключение, затем запустите несколько Fuse это повлияет на службы, вам следует использовать это Fuse Услуга Container это повлияет, и мы должны перезапустить все предприятия POD К нормальному доступу к файлу.
6. K8s sidecar модельразвертывать Alluxio Fuse
во избежание NodeServer После того как зависание подействует, вводим еще один режим. Просто да K8s из режим коляски,sidecar Режим дасуществовать пользовательскую конфигурацию бизнес Container изYAML-файл, Alluxio Fuse из Служить. Эквивалентно существованию, начиная бизнес. Container из, дополнительный Alluxio Fuse Container . этот Alluxio Fuse Container В основном используется для монтажа Alluxio В каталоге используется из, и эти два Container Вы можете делиться ресурсами, такими как Интернет. Такой бизнес-контейнер Просто кдоступAlluxio Fuse монтирует каталог из. В этом режиме каждый POD Каждый может иметь один Контейнер, конфигурация развертывания более гибкая, и каждый контейнер не влияет друг на друга. Но потому что каждый Fuse Каждый процесс будет занимать контейнер, который будет потреблять дополнительные ресурсы.
развертыватьмодель Подвести итог:
Давайте кратко рассмотрим характеристики этих трех режимов:
√
верно Вфизическая машинаразвертывать,Потому что да хочется развернуть пользователю с каждой клиентской машины,Клиенты относительно разбросаны,Итак, кэтоизразвертывать Стоимость вышеодиннекоторый。
√
верно В K8S режим так как даразвертыватьсуществовать каждый узел Напротив, затраты на эксплуатацию и техническое обслуживание будут немного ниже. И, конечно, используется для ресурсов, потому что развертывание на физической машине просто запускает процесс, и K8S из режима откроется NodeServer Или открыть отдельный из Container идтиразвертывать这индивидуальный Служить,Итак, кзайметодиннекоторый额外изресурс。
√
режим коляски, потому что верно каждое дело Container позволит один Alluxio Fuse из сервиса, который занимает больше ресурсов, чем CSI Режим будет выше.
независимость,Развертывание физической машины из-за использования независимого развертывания изда,не приму worker из влияет и не повлияет рабочий. Каждое предприятие использует из Службы-предохранители также не влияют друг на друга. К8С CSI Режим, потому что дасуществоватьNodeServer На сайте их много Fuse процесс, поэтому на к может влиять NodeServer из Влияние. К8С sidecar Этот режим также является независимым для развертывания и не окажет никакого влияния.
7. Понял S3
В дополнение к способу монтажа,Мы также предлагаем другой сервис-ориентированный подход,Просто используй это S3 SDK。S3 даAmazon — это открытая система обслуживания облачных хранилищ, в которой используется дахранилищевернно Elephant. Его функции обеспечивают богатый клиент SDK, нам нужно использовать эти богатые SDK Приходитьвыполнитьверно Alluxio Среди файлов издоступ.
Здесь мы также представляем S3 некоторые основные понятия. Ведро да S3 используется в хранилищеверно слон из объекта-контейнера; да S3 серединахранилищеиз Базовая сущность; дахранилище ствола верно из уникального идентификатора региона; существовать S3 В сервисе вы можете выбрать территорию для S3 хранилище создать из бочки. Давайте посмотрим, как мы даиспользовать S3 из SDK предоставитьхранилище Услуга 。
8. S3 for HDFS
использовать S3 из SDK Доступ к данным в основном зависит от нескольких моментов: Alluxio можно установить HDFS данные. Аллюксио обеспечивает Proxy из Сервис, Прокси Сервис совместим S3 API из-за того, что вы можете поддерживать больше пользователей, используйте больше языков, используйте S3 SDK Приходитьпроходитьотправлятьпроситьприезжать Alluxio Прокси, разобранный на верно Alluxio спросить и таким образом получить доступ к данным.
9. Отношения сопоставления прокси
Изображение слева выполнено изда mount инструкция. Воля HDFS Среди них projects Каталог, смонтированный в AlluxioСреди них projects Оглавление. да соответственно ниже HDFS середина пути также Alluxio Среди нихпуть,У них соответствующие отношения.
Proxy Когда служба существует и выполняет анализ, поставьте Alluxio из Каталог первого уровня выглядит так: bucket Для выполнения сопоставления его подкаталоги и файлы состоят из ключ, эквивалентный bucket и key мы можем получить один object правда слон. Картинка справа просто да S3 из Java SDK просить Proxy Услуга demo, вы можете видеть, что его сегмент установлен как каталог первого уровня, а остальная часть каталога установлена как key Этот верный значок можно получить.
10. Внедрить прокси-аутентификацию
Существующее в настоящее время сообщество предоставляет услугу прокси, но не предоставляет S3 Благодаря функции сертификации мы сами Proxy В сервис добавлен функционал аутентификации.
S3 из SDK Когда просит активирован, просит будет преобразован в REST просить, и существовать клиентом по желанию пользователя ID а также secret ,Плюспросить Среди импросить информацию,сгенерировать подпись,Тогда поставь эту подпись в просить.
нассуществовать Proxy В сервис добавлен метод парсинга аутентификации, проситьи верификации аутентификации. Потому что существованиепросить содержит ID Информация, мы можем ее хранить ID идти secret manager вынь это secret информация,Повторно сгенерировать новые подписи на прокси-сервере.,Принесите из подписи в запросить для сравнения,Определить, проводится ли данная сертификация.
На рисунке справа показаны этапы расчета на официальном сайте Amazon.,насможно увидетьэто Сразудаанализировать request проситьи Вычисление подписи процесса. Используется алгоритм шифрования. После многократного шифрования получаются три поля, а затем выполняется окончательное кодирование. Также код шифрования для получения подписи.
11. Архитектура сервиса
Давайте посмотрим на всю нашу сервисную архитектура. Правая половина рисунка представляет собой кластер с серверной HDFS. изданные. Мы только что представили существующую модель обслуживания и продемонстрировали ее на этой картинке. Вы можете видеть три оранжевых клиента, используется тот, что выше. S3 из SDK из клиента он использует балансировщик нагрузки, отправляет запрос определенному Proxy сервис, отправленный по сети на Alluxio После анализа кластера данные возвращаются клиенту.
Следующий клиент использует режим развертывания издасуществовать на физическом компьютере,существует локальная физическая машина, требующая развертывания Alluxio Fuse,пользовательпроходитьдоступ Alluxio Fuse Смонтируйте каталог из и получите Alluxio Среди нихданные。
Нижний K8s кластер. Есть один в кластере да справа. под. Вот этот sidecar режим, клиент и Alluxio Fuse из Контейнер, общее хранилище между ними. потому что K8s да имеет собственное определение сетевой службы, следовательно, эта сеть подключена к внешним сетевым службам и, таким образом, может быть получена Alluxio Среда из данных.
12. Вклад сообщества Alluxio
Мы в использовании Alluxio Услугапроцесссередина Также найденоодиннекоторый问题,и активная обратная связь с сообществом,основнойда proxy и fuse Сопутствующие вопросы.
4. Планирование на будущее
планы на будущееосновнойсуществоватьк Следующие два аспекта:
1
существоватьускорение хранения данныхаспект:настакже будет Spark и Hive Доступ Alluxio;CacheManager Добавить адаптивную изстратегию кэширования, чтобы добиться лучшего использования кэша;
2
существовать Хранение как услугааспект:нас Такжеверно CSI Для оптимизации, Fuse независимый от nodeserver Сервис; верно Fuse Услуги, потому что мы предоставляем сценарии, а не просто чтение, поэтому нам необходимо совершенствоваться в соответствии с потребностями бизнеса. POSIX Поддержка интерфейса.
Эта статья воспроизведена из учетной записи службы Ding Tianbao/Sun Haoning Alluxio, исходная ссылка: https://mp.weixin.qq.com/s/35gFO9MEj1wRMaZlFY9WYw.