View
265
Download
13
Category
Preview:
Citation preview
BigПочтаАлексей Вовченко
Кейс из жизни
2012 год – посылка из США под новый год, с подарками всем друзьям•27 ноября - экспорт из США•25 декабря - появилась у нас на границе•30 декабря – поездка в центральный офис EMS
вызволять (5 часов)
Ответ – Матрешка
Что такое почта?
Ритейл
Логистика
Нельзя терять данные
47 тыс. отделений2 млн. новых отправлений в день200-400 млн. событий в сутки
ДанныеПочтыРоссии
Задача - Построить отказоустойчивую инфраструктуру для решения задач почты
Получение Хранение Очистка Валидация
Обработка Аналитика Экспорт
Требования
• OpenSource• Exadata + OracleBI
• уже работает, нужно лучше
Задачи на релиз 0
1. Получить данные от всех логистических систем
2. Построить модель данных (матрешка)
3. Построить отчет «Остатки» состояние на вчера
4. Предоставить доступ к отчету пользователям
Front REST(in)
Map-Reduce
Front REST(in)
Map-Reduce
Oozie
Front REST(in)
Map-Reduce
Oozie
Front REST(in)
SQL
Релиз 0
Map-Reduce
Oozie
Front REST(in)
SQL
Новые задачи • Нагрузкапользователей
• Доступ к данным по ключу
• Обработки данных не укладываются в реляционную логику
Выбор SQL движка
• Загрузка из HDFS
• Нагрузка – много пользователей
• Тяжелые OLAP запросы
Выбор SQL движка – выводы:
Все SQL движки над HDFS – медленные
Лидеры
Map-Reduce
Oozie
Front REST(in)
SQL
было
Map-Reduce
Oozie
Front REST(in)
стало
• Доступ к данным по ключу
Доступ к данным по ключу
по ID из 100млрд записей найти 10-100 нужных (pochta.ru)
• Решение key-value базы• Пробовали SparkSQL
• Пробовали Hadoop/Hive/in-memory/Vertica
• Кандидаты:
Релиз 1
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
Новые задачи
• А теперь давайте считать real-time…
Выбор streaming
Задачи:• Kafka -> Kafka
• Kafka -> Cassandra
• Kafka -> Hadoop (Hive)
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
Проблемы Spark Streaming
Producer ?? Consumer
Producer Message Message Consumer
Producer Message Consumer
At-Most-Once
At-Least-Once
Exactly-Once
Проблемы Spark Streaming
Producer Message Message Consumer
• Spark checkpoint когда изменился код• Offsets Zookeeper – медленно
• Spark Kafka Direct API
• Spark checkpoint
• Реализовали свой механизм• PostgreSQL (ключ: topic, clientid, partition id, value: offset)
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
• Данные в batch != streaming
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
было
Релиз 2
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
• Pentaho не держит нагрузку
• Прием не держит пики
• SparkThrift +Cassandra – не стабильны
• Spark Streaming -высокодоступность
Масштабируемость фронтов
Map-Reduce
Oozie
Cluster
DockerFront REST(out)
REST(in)
Высокодоступность SparkStreaming
• Ночью кластер занят на 100%
• Если streaming-job падает, он не может подняться
• Yarn очереди – жалко терять ресурсы
Map-Reduce
Sqoop
Oozie
Job1
JobN
Cluster
DockerFront REST(out)
REST(in)
Релиз 3
Map-Reduce
Oozie
Cluster
Spark SQL Thrift
Front REST(in)
Map-Reduce
Sqoop
Oozie
Job1
JobN
Cluster
DockerFront REST(out)
REST(in)
Релиз 3
Пилотирование Yandex ClickHouse
•Очень быстрая база
•ClickHouse + docker
•Универсальный загрузчик данных (Spark+Scala+local-table+paritions)
Пилотирование Yandex ClickHouse
•Провели нагрузочное тестирование• Результат – для наших задач не подходит• Под нагрузкой – 100% (3600%)CPU• Скорость сопоставима с Vertica, но очень большая
нагрузка на оборудование
Пилотирование Flink
• Flume не всегда стабилен
• Flume сложно мониторить
• Шаг влево-вправо – сложно
• Решение – Flink
• Пробовали NiFi – не понравился
Map-Reduce
Sqoop
Oozie
Job1
JobN
Cluster
DockerFront REST(out)
REST(in)
Релиз 3
Map-Reduce
Sqoop
Oozie
Job1
JobN
ClickHouse
Cluster
CH Front DockerFront REST
(out)REST
(in)
Flink
Релиз 3.5
Путь данных: Прием
data
Путь данных: Онлайн обработка
data data
Job1
data data
Путь данных: Снова онлайн обработка
data data
Job1
data data
data data
JobN
data data
JobM
Cluster
data
Путь данных: онлайн сохранение в Cassandra
Путь данных: вся онлайн обработка
data data
JobN
data data
JobM
Cluster
data
export
Путь данных: batch обработка
Oozie
data
data
data
data
Oozie
data
data
Cluster
data
ClickHouse
data
data
Путь данных: batch экспорт
Front+Docker+nginx Node
(0.5X)
DataCloud front docker (Pentaho, rest, DC services)
KafkaVerticaNode (SAS 10k)
Kafka Cluster + Vertica Cluster + ClickHouse Cluster + Spark
Streaming Cluster
Cassandra (SSD)
Cassandra (SSD)
Cassandra Cluster + HadoopControl (main ring)
DataNode (SATA)
DataNode (SATA)
DataNode (SATA)
DataNode (SATA)
DataNode (SATA)
Hadoop Cluster
DataNode (SATA)
А как же инфраструктура?
Одна инфраструктура
• DataLake (for RAW data)• Batch ETL• Real-time processing• Analytics OLAP/OLTP processing• High-load rest (export)• High-load rest (input)• DataBus• BI• ML
• Hortonworks HDP+HDF• Hadoop• Yarn• Hive(tez)• Spark (+streaming)• Flume• Kafka
• Vertica• ClickHouse• PostgreSQL• Cassandra• Pentaho BI• Docker (scalable rest)
Можно миксовать
Map-Reduce
Sqoop
Oozie
Job1
JobN
ClickHouse
Cluster
CH Front DockerFront REST
(out)REST
(in)
Flink
Нет свободной аналитики
CH Front
ClickHouse
Map-Reduce
Sqoop
Oozie
Job1
JobN
Cluster
DockerFront REST(out)
REST(in)
Flink
Streaming only, no Hadoop
Map-Reduce
Sqoop
Oozie
Flink
Job1
JobN
ClickHouse
Cluster
CH Front DockerFront REST
(out)REST
(in)
Hadoop only, no Streaming
Job1
JobN
Map-Reduce
Sqoop
OozieClickHouse
Cluster
CH Front DockerFront REST
(out)REST
(in)
Flink
Нет задач доступа по ключу
REST(out)
Cluster
Job1
JobN
Map-Reduce
Sqoop
OozieClickHouse
CH Front DockerFront REST
(in)
Flink
Hadoop only, нет задачи и BI
ClickHouse
CH Front REST(out)
Cluster
Job1
JobN
Map-Reduce
Sqoop
Oozie
DockerFront REST(in)
Flink
Что осталось?
• Flink->prod
• More data -> more nodes
• CI/CD full automatic
• Monitoring/puppet everything
• Sleep at the nights!
Что дальше?
• DataLab (Spark ML, …)
• IgNite
• Spark structured streaming
Выводы
• Не нужно останавливаться на достигнутом
• Каждую задачу должен решать свой инструмент
• Не надо бояться расширять архитектуру за счет хороших и
подходящих инструментов
BigПочта – вопросы?Алексей Вовченко
AVovchenko@luxoft.comSkype: itsneinhttps://www.linkedin.com/comm/in/alexey-vovchenko-3a1b6744
Recommended