Upload
vyacheslav-nikulin
View
353
Download
0
Embed Size (px)
DESCRIPTION
KRI
Citation preview
Elasticsearch: рациональный подход к созданию собственной системы аналитики
Вячеслав Никулин, ведущий серверный разработчик, Nekki
Нам нужна аналитика
Поиск готового решения
● Готово к использованию
● Технические и функциональные ограничения
● Высокая цена
РСУБД
● Знакомый SQL - путь
● Сложно масштабировать и поддерживать
● А может нам не нужна РСУБД?
NoSQL
● Документоориентированность, масштабируемость, отказоустойчивость
● Огромный спектр технологий Hadoop HBase Cassandra MongoDB Redis Riak Kafka Storm RabbitMQ ZeroMQ Spark etc
● Нет опыта - разработка может занять годы
Elasticsearch
Elasticsearch за 10 секунд
● Документо-ориентированное хранилище, не требующее описание схемы таблиц
● Распределенное, горизонтально-масштабируемое, отказоустойчивое● RESTful API (json поверх http)● Мощное поисковый движок● Написан на Java, расширяем● Активно развивается (> 15 релизов в этом году)● Разработан поверх Apache Lucene● Открытый исходный код (Apache License 2.0)● Много пользователей (StackOverflow, GitHub, TheGuardian, Bloomberg)
Чего в elasticsearch нет
● Джойны
● Транзакции
● Безопасность
Стек ELK
● Elasticsearch● Logstash
○ Inputs (file, syslog, tcp, rabbitmq, zeromq, redis)○ Filters (geoip, grok, ruby)○ Outputs (file, elasticsearch, mongodb, zabbix)
● Kibana● Marvel● Curator
Терминология
● Узел - один сервер (один инстанс elasticsearch/jvm)● Кластер - множество узлов● Документ - базовый юнит информации, который может быть
индексирован.● Индекс - коллекция документов с походими характеристиками● Тип - множество документов с одинаковым набором полей● Шард - неделимый юнит масштабирования● Реплика - копия шарда
Примерное соотвествие между понятиями РСУБД и Elasticsearch
● РСУБД ⇒ База данных/Схема⇒ Таблица ⇒ Строка ⇒ Столбец● Elasticsearch ⇒ Индекс ⇒ Тип ⇒ Документ ⇒ Поле
Разработка системы аналитики
Ключевые особенности
● Возможность играть в оффлайне
● ~1 000 000 DAU
Процессинг логов
● Генерация и сохранение логов в клиенте
● Отправка логов на сервер
● Фильтрация логов, добавление полей в события, сохранение лога на
диск
● Централизация логов
● Импорт логов в Elasticsearch
● Визуализация данных
Генерация событий в клиенте
● Эвент - это json-объект
● Проектирование перечня эвентов и их структуры
○ Список эвентов
○ Обязательные параметры эвента
○ Дополнительные параметры
Отправка логов на сервер● Http-запрос на веб-сервер
● Бэкенд на PHP
● Прореживание логов○ Каждый Nый
○ Плательщик
○ High level
○ Участник A/B теста
○ Некоторые события нужно принимать от всех юзеров
○ Стратегии можно комбинировать
○ Фильтрация читеров
Обработка логов на сервере● Фильтрация логов
● Добавление полей в событие
● Сохранение логов на диск
Централизация логов● Несколько серверов (ios, android etc) с установленным logstash
● Logstash отслеживает изменения в директории и отсылает новые данные
на сервер консолидации логов
● Logstash на центральном сервере принимает данные и отправляет их в
elasticsearch
Маппинг данных● Иногда необходим явный маппинг
○ Nested объекты
○ Timestamp в виде long
○ Специфичный настройки индексирования
● Задается шаблоном в файле или с помощью REST API
Разбиение по индексам● User-based индексы
● Timestamp-based индексы
○ /logs-2014-09-01/purchase, /logs-2014-09-02/fight_end
○ Удалять лучше индекс целиком
О чем не стоит забывать● Mapping explosion
○ Неправильно: {"1": 1} {"2": 4} {"3": 9} {"4": 16} {"5": 25}
○ Правильно: {"key": 1, "value": 1} {"key": 2, "value": 4}
● Длинные GC паузы
● Много вложенных агрегаций
● Проблема зиллиона шардов
○ Индекс одного документа приведет к OOM
Визуализация данных● Kibana
● Marvel
● Своя админка
Продакшн
Наша аналитика● Сложные гд-отчеты
● Статистика крашей
● Аналитика А/B тестов
Цифры● Один сервер
500 ГБ SSD, 4x-ядерный E3-1270 3.50GHz, 32 GB RAM
● 50 rps индексирования, в пике было 10к
● в день 3М событий, 1ГБ в elasticsearch
● 1-2% cpu load
● всего 100M документов
● Поиск < 100 мс
Команда, поддержка● Сейчас занято 1.5 человека
● Запустили в продакшн за 2 месяца силами 2.5 человек
● Геймдизайнеры осваивают инструмент и сами пишут запросы
● Большие планы на будущее: больше гд-отчетов, статистика пуш
уведомлений, внедрение в другие проекты компании
Вопросы?