Оригинал: https://mp.weixin.qq.com/s/FVbjGTvZP97u5CAydDx7dw
предисловие
Elasticsearch (ES) — популярная в последние годы распределенная поисковая и аналитическая система с открытым исходным кодом.Благодаря простому развертыванию она может легко реализовать множество требований, таких как анализ журналов в реальном времени, полнотекстовый поиск и анализ структурированных данных, и значительно сократить стоимость майнинга значения данных.
У ES есть множество крупномасштабных сценариев внедрения внутри Tencent и среди пользователей Tencent Cloud, и они продолжают продвигать оптимизацию собственного ES в направлении высокой доступности, высокой производительности и низкой стоимости. В этой статье будут представлены проблемы, идеи оптимизации, результаты оптимизации и будущие направления исследований, с которыми Tencent столкнулась в процессе применения ES, в надежде предоставить разработчикам справочную информацию.
1. Сценарии применения ЭС
1.Сценарии внутренних приложений Tencent
Оперативный журнал:Например, медленный журнал, журнал исключений (используется для обнаружения бизнес-проблем);
Бизнес журнал:Например, клики пользователей, журналы доступа (используются для анализа поведения пользователей);
Журнал аудита:Может использоваться для анализа безопасности.
Экосистема Elastic завершена:Любой разработчик может создать полную систему анализа журналов в реальном времени, просто развернув готовые компоненты.
Высокая своевременность:Время, необходимое для создания журнала до того, как он станет доступным, обычно находится на уровне 10 с. По сравнению с традиционными решениями для работы с большими данными, которые занимают от десятков минут до нескольких часов, своевременность повышается в сотни раз.
Гибкие возможности анализа поиска:Благодаря поддержке таких структур данных, как инвертированные индексы и хранилище столбцов, ES обладает очень гибкими возможностями поиска и анализа.
Короткое время отклика поиска:ES поддерживает интерактивный анализ, а время отклика при поиске составляет секунды даже при триллионах журналов.
2.【Сценарии службы поиска】
Типичный сценарий выглядит следующим образом:
поиск продукта:То есть поиск товаров на основных платформах электронной коммерции;
высокая производительность:Одна служба может достигать максимум 10w+ запросов в секунду, среднее время отклика составляет около 20 мс, а задержка P95 составляет менее 100 мс.
Сильная корреляция: Опыт поиска в основном зависит от соответствия между «результатами поиска» и «намерениями пользователя», которые можно оценить с помощью таких показателей, как уровень точности и уровень отзыва.
Высокая доступность: Сценарии поиска обычно требуют наличия четырех девяток и поддерживают восстановление после сбоя в одной комнате.
3.【Сценарии анализа данных временных рядов】
Метрики:То есть традиционный мониторинг серверов.
АРМ:Мониторинг производительности приложений.
Данные датчика:Генерируется данными Интернета вещей, интеллектуальным оборудованием, промышленным Интернетом вещей и т. д.
Высокий параллелизм пишет:Максимальный масштаб одного онлайн-кластера — до 600+ узлов, а скорость записи — 1000 Вт/с.
Высокая производительность запросов:Задержка запроса одной кривой или одной временной шкалы должна быть на уровне 10 мс.
Многомерный анализ:Требуются гибкие и многомерные возможности статистического анализа.Например, при просмотре и мониторинге статистический анализ может выполняться по различным измерениям, таким как регионы и бизнес-модули.
2. Сценарии отраслевого применения
В отрасли основные сценарии применения ES чаще встречаются на платформах электронной коммерции, таких как поиск продуктов, этикеток и магазинов.
Типичным примером является веб-сайт электронной коммерции M с годовой GMV 20 млрд. Сценарии его применения в ES также очень обширны, включая рекомендации по поиску продуктов, анализ и мониторинг журналов, а также статистический анализ. Его бизнес-команда управляет десятками кластеров ES и растет в размерах.
2. Возникшие проблемы
1.Проблемы Tencent
Высокая доступность:Возьмем в качестве примеров поиск в электронной коммерции, поиск приложений и поиск на месте. Они придают большое значение доступности, а соглашение об уровне обслуживания составляет более 4 9. Сценарии аварийного восстановления, такие как сбой одного компьютера и сбой сети в одной комнате, должны рассматриваться.
высокая производительность:Они имеют чрезвычайно высокие стандарты производительности, такие как 20 Вт QPS, плоский звук 20 мс, задержка P95 100 мс.
Сценарии временных рядов включают журналы, метрики, APM и т. д. По сравнению со службами поиска, ориентированными на высокую доступность и высокую производительность, службы временных рядов будут более эффективными.Сосредоточьтесь на стоимости, производительности.
2. Проблемы, с которыми сталкивается отрасль
3. Практика оптимизации ЭУ
1 Надежность системы:Относится к надежности самого ядра ES, что также является распространенной проблемой, с которой сталкиваются распределенные системы. Например:
2. План аварийного восстановления:Например, выстраивая систему управления и контроля, она может обеспечить быстрое восстановление услуг в случае сетевых сбоев в машинном зале, предотвратить потерю данных при стихийных бедствиях, а также быстро откатиться после неправильной эксплуатации.
3. Дефекты системы:Это неизбежная проблема при разработке любой системы, такая как блокировка главного узла, распределенная взаимоблокировка, медленный последовательный перезапуск и т. д.
1. Надежность системы:
Нестабильный сервис:Благодаря ограничению тока службы он может допускать ненормальные условия, такие как сбой сети машины и ненормальный запрос.
Проблемы с масштабируемостью кластера:Благодаря оптимизации логики управления и контроля метаданных кластера возможности расширения кластера были улучшены в 10 раз, и он поддерживает тысячи кластеров узлов и миллионы сегментов;
Проблема баланса кластера:Благодаря оптимизации баланса сегментов между узлами и несколькими жесткими дисками обеспечивается баланс давления крупномасштабных кластеров.
2. План аварийного восстановления:
Данные можно восстановить:
Расширяя подключаемый механизм ES, он поддерживает резервное копирование и резервное копирование, а также резервное копирование данных ES в дешевое хранилище для обеспечения возможности восстановления данных;
Отказоустойчивость:
Tencent Cloud ES поддерживает аварийное восстановление между зонами доступности. Пользователи могут развертывать несколько зон доступности по требованию, чтобы избежать сбоев в одной комнате.
Кроме того, Tencent Cloud ES также поддерживает функцию резервного копирования COS.Пользователи могут напрямую создавать резервные копии базовых файлов данных в COS Tencent Cloud Object Storage, используя ES API, реализуя недорогую и простую в эксплуатации функцию резервного копирования данных.
Аномальное восстановление:
Благодаря механизму корзины гарантируется, что кластер может быть быстро восстановлен в таких сценариях, как задолженность и неправильная работа.
3. Дефекты системы:
В части ограничения тока службы Tencent выполнила 4 уровня работы по ограничению тока:
Уровень разрешения:После оптимизации ES поддерживает XPack и собственные разрешения для предотвращения атак и неправильных операций;
Уровень очереди:Оптимизируя детали скорости выполнения задач, повторения, приоритета и т. д., он решает проблемы накопления очереди основных задач и голодания задач, с которыми часто сталкиваются пользователи;
Иерархия памяти:Начиная с ES 6.x поддерживается ограничение тока памяти на всем канале (включая HTTP-запись, узел координации, узел данных и т. д.): при этом для точного контроля используется память JVM, статистика градиента и т. д.;
Уровень мультиарендности:Используйте схему CVM/Cgroups, чтобы обеспечить изоляцию ресурсов между несколькими арендаторами.
Вот введение в проблему ограничения тока в сценариях агрегации Когда пользователи используют ES для анализа агрегации, они часто взрывают память из-за слишком большого количества сегментов агрегации. Официально в ES 6.8 предусмотрен параметр max_buckets для управления максимальным количеством бакетов для агрегации, но этот метод очень ограничен: будет ли память разрываться, зависит от размера одного бакета (в некоторых сценариях пользователь устанавливает 200 000 бакетов). buckets) Разбиение может нормально работать, но в других сценариях может быть исчерпана память на 100 000 Buckets), поэтому пользователь не может точно понять, сколько должен быть установлен этот параметр. В настоящее время Tencent использует алгоритм градиента для оптимизации и проверяет память JVM каждые 1000 выделенных сегментов.Когда памяти недостаточно, запрос прерывается вовремя, чтобы обеспечить высокую доступность кластера ES.
Основываясь на анализе этих узких мест и характеристиках доступа к данным, можно предложить следующие оптимизированные по стоимости решения:
(1) Принять архитектуру холодного и горячего разделения и использовать гибридное решение для хранения, чтобы сбалансировать стоимость и производительность;
(2) Поскольку исторические данные обычно доступны для статистической информации, хранение и производительность заменяются предварительными вычислениями;
(3) Если исторические данные вообще не используются, их можно скопировать в более дешевую систему хранения;
(4) В зависимости от характеристик доступа к данным временных рядов затраты памяти можно оптимизировать с помощью кэша.
(5) Другие методы оптимизации: такие как сокращение объема памяти, управление жизненным циклом и т. д.
Разверните раздел Rollup здесь. Rollup похож на кубы и материализованные представления в сценариях с большими данными. Его основная идея заключается в том, чтобы заранее генерировать статистическую информацию посредством предварительных вычислений для выпуска исходных гранулярных данных, тем самым снижая затраты на хранение и повышая производительность запросов. Вот простой пример: в сценарии мониторинга машин исходная степень детализации данных мониторинга составляет 10 секунд, в то время как данные мониторинга месячной давности обычно нужно просматривать только с почасовой детализацией, что является сценарием приложения Rollup. Официальный запуск Rollup из ES 6.x, на самом деле Tencent начала исследования в 5.x.
Как упоминалось выше, когда многие пользователи используют большие модели хранения, приоритет памяти становится узким местом, и жесткий диск не может быть полностью загружен.Основным узким местом таких проблем является то, что индекс занимает большой объем памяти. Учитывая, что исторические данные редко используются в сценариях временных рядов, а некоторые поля практически не используются в некоторых сценариях, Tencent представила кэш для повышения эффективности использования памяти.
(1) Оптимизация записи:Для сценария дедупликации первичного ключа индекс используется для сокращения, чтобы ускорить процесс дедупликации первичного ключа и повысить производительность записи на 45%. Кроме того, одним из направлений исследований Tencent является оптимизация производительности записи за счет векторизованного выполнения и уменьшения числа переходов и пропусков инструкций, и ожидается, что производительность удвоится.
(2) Оптимизация использования ЦП:Для проблемы, связанной с тем, что ЦП не может быть полностью использован в некоторых сценариях стресс-тестов, производительность улучшена на 20% за счет оптимизации вытеснения ресурсов, когда ES обновляет Translog.
(3) Оптимизация запросов:Повысьте производительность запросов, оптимизировав стратегию слияния. Сокращение запросов на основе минимального/максимального индекса каждой записи сегмента повышает производительность запросов на 30 %. Благодаря стратегии CBO операция кэширования запросов позволяет избежать более чем 10-кратного сбоя, связанного с запросом, который отнимает много времени. Кроме того, оптимизация производительности с помощью нового оборудования (например, Intel AEP, Optane, QAT и т. д.) также является хорошим направлением для изучения.
Далее давайте подробно поговорим об оптимизации стратегии слияния: родная стратегия слияния ES в основном фокусируется на сходстве размеров (попробуйте выбрать сегменты одинакового размера при объединении) и максимальном верхнем пределе (рассмотрите возможность попытки собрать сегменты вместе до 5 ГБ). . Тогда возможно, что сегмент содержит данные за весь месяц января и 1 марта.Когда пользователь запрашивает данные за определенный час 1 марта, необходимо сканировать большое количество бесполезных данных, что приводит к серьезной потере производительности.
4. Будущее планирование и вклад в открытый исходный код
Взяв за идею карту больших данных, все поле больших данных можно разделить на три части в соответствии с характеристиками объема данных и требованиями к задержке:
(1) DataEngineering, включая знакомые пакетные вычисления и потоковые вычисления;
(2) обнаружение данных, включая интерактивный анализ, поиск и т. д.;
(3) DataApps, в основном используемые для поддержки онлайн-сервисов.
Хотя ES считается технологией в области поиска, ES также поддерживает такие сценарии, как онлайн-поиск и службы документов; кроме того, существует множество зрелых систем OLAP, которые также основаны на технологических стеках, таких как инвертированный индекс и смешанные строки и столбцы. место хранения. Из этого видно, что возможность развития ЭС в этих двух областях очень высока. Поэтому Tencent сосредоточится на изучении технологии ES в направлении «онлайн-сервисов» и «OLAP-анализа».
Наконец
Приглашаю всех обратить внимание на мой официальный аккаунт [Программист в погоне за ветром].В 2019 году многие компании собрали более 1000 400-страничных pdf-документов для вопросов на собеседовании по java.
Если вам понравилась статья, не забудьте подписаться на меня и поставить лайк, спасибо за вашу поддержку!