Платформа данных в Леруа Мерлен – 2 года, сотни источников и более 2.000 пользователей

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Всем привет!

На сегодняшний день данные и всё связанное с ними (ML, AI, DataMining, etc) это самый хайповый тренд в IT-индустрии. Все - от ритейлеров до компаний Илона Маска работают (или пытаются работать) с данными. Нас в Леруа Мерлен эта волна не обошла стороной - data-driven подход к принятию решений является одним из основных в компании. Следуя ему, мы создали свою платформу данных, которой на данный момент пользуется около 2 тыс.человек, а в минуту обрабатывается примерно 1800 запросов. В этой статье мы (Data-команда Леруа Мерлен Россия) расскажем, как за 2 года построили платформу данных в компании с большим количеством оффлайн-процессов, об ее архитектуре и опыте, который мы получили в процессе создания.


С чего все начиналось

В 2016 году, задолго до появления платформы, был нужен инструмент, чтобы строить отчеты, проводить аналитику и рисовать графики. Тогда решили просто связать DB-link’ами все основные базы данных компании. Решение оказалось не масштабируемым, при этом потребность в аналитических отчетах росла, как и требования к ним, при этом влияли они на все бизнес-процессы компании. 

В 2017 мы решили пойти к большому вендору: купить у него один или два шкафа железа, точно также залить туда свои данные и продолжать строить отчеты. Но это оказалось тоже проблемно с точки зрения масштабируемости, так как место заканчивается, и нужно снова идти к вендору, покупать новый шкаф и платить за него кучу денег. Прежде чем отдавать эти деньги, хотелось посмотреть, а что вообще в мире делают большие data-driven компании, которые не только принимают основанные на данных решения, но и занимаются предсказанием. Посмотрев на них, компания приняла решение о создании своей платформы данных. 

Первые шаги к своей платформе

Чтобы это сделать, нужно было сначала собрать все данные в единое хранилище и пустить в него дата-инженеров, дата-аналитиков и дата-сайентистов, чтобы они смогли построить в нем свои модели, обучить их, нарисовать витрины, построить и написать сервисы для работы с данными. Короче говоря, извлечь пользу для наших пользователей (= сотрудников компании).

Мы ожидали, что это будет стоить очень дорого. Чтобы избежать очередной покупки нового железа, нам нужно было разработать стратегию наших действий и понять, как мы будем двигаться дальше.

Прежде всего мы выработали 3 основных принципа работы над нашей будущей платформой:

  • Экспертиза внутри компании. Все знания, полученные при создании платформы, должны консолидироваться у команды Леруа Мерлен;

  • Использование opensource. По максимуму использовать наработки сообщества и развивать их, а не тратиться на проприетарные продукты;

  • Cloud native & cloud agnostic. Мы должны строить платформу, которую можно разворачивать в облаках, но не завязываться на конкретное облачное решение.

Тут можно долго дискутировать и обсуждать тезисы из каждого пункта, но мы – технари, а бизнес нам дал руль и позволил полностью управлять процессом создания платформы. И нам, как техническим специалистам, было ясно, что, придерживаясь этих правил, мы можем сами создавать и развивать платформу с той скоростью, которая нам необходима:

  • Мы не завязаны на вендорах - если нам что-то нужно, мы можем сами это написать и законтрибьютить.

  • Мы не завязаны на подрядчиков – мы сами знаем, что, как и где писать.

  • Мы не завязаны на инфраструктуру – не нужно заказывать оборудование и ждать по полгода, пока его привезут и установят.

Платформа данных за 2 года

Так в 2019 году мы начали работать над созданием платформы данных.

Для начала нужно было определиться с хранилищем. Если вы еще на этапе выбора хранилища, можем вам посоветовать посмотреть доклад от Максима Стаценко из Я.Go (Обзор технологий хранения больших данных).

У нас тут выбора было не так много – Hadoop Stack (Kudu, Druid, Hive, etc), Clickhouse или Greenplum. Остальные решения (Vertica, Teradata, Exasol) не подходили из-за своей проприетарности и требованиям к железной инфраструктуре. В итоге мы остановились на GP – из-за его возможностей работать с ANSI-sql и прозрачности для пользователей – для них это просто большой Postgres, в котором все их отчеты, построенные на прежних решениях, работали сразу из коробки, а для CH и Hive пришлось бы всё переписывать. 

На первом этапе нам необходимо было проинтегрировать реляционки в платформу, чтобы дать пользователям возможность строить их отчеты не на базах источников, а у нас. Мы посчитали их и поняли, что в нашей компании более 350 реляционных баз данных. На базах-источников настроили механизм CDC и с помощью Debezium начали сгружать эти данные в Kafka, которую мы разгребали ETL-инструментом NiFi и грузили все в raw-слой GreenPlum.

MVP мы проводили на виртуалках в облаке. 

Так как MVP показал хорошие результаты, мы нащупали вектор движения. У нас оставалось ощущение, что на облака мы потратим очень много денег из-за того, что у нас огромное количество обрабатываемых данных, и оно растет каждый день. Поэтому мы закупили железные серваки и поехали в onprem.

Железные конфигурации

Какие там были конфигурации?

Там было 24 сервера HP DL380, мы воткнули в каждый сервер по 12 винтов в 2 ТБ, собрали кластер на 220 ТБ (получилось уложить в него 110 ТБ полезных данных), у него было 800 ядер CPU и больше 5 ТБ оперативки:

  • HPE DL380 Gen10 5115 Xeon-G (Intel(R) Xeon(R) Gold 5115 CPU @ 2.40GHz)

  • 256GB Memory (HPE 32GB 2Rx4 PC4-2666V-R)

  • 10TB RAID10 software array (HPE 1.8TB SAS 10K SFF SC 512e)

  • 4x10GB bonded network interfaces

Но, прежде чем запускаться, мы решили сравнить виртуалки в облаке с тем, что мы можем выжать на железе. 

Мы прогнали на 3 разных компонентах 3 теста. GreenPlum мы прогоняли тестом TPC-DS, для Kafka мы прогнали бенчмарки consumer/produser-perf-test, а Object Storage мы тестировали с помощью Warp. 

Про Object Storage

По оси X – количество потоков (сколько мы запускали тест на запись и на прочтение). По оси Y – итоговая скорость. Максимальная производительность достигается на 40 потоках при размере объектов больше 32 МБ. 

Для тестов GreenPlum по итогу мы получили около 20% прироста производительности на железе (при одинаковых конфигурациях). Также проверяли различные версии GP (6.х против 5.х), и тестировали различные системные конфигурации.

Про Greenplum

Подробнее с методикой теста и расчетом итогового score можно ознакомиться в спецификации: http://www.tpc.org/tpc_documents_current_versions/pdf/tpc-ds_v2.11.0.pdf

Выводы из тестов Greenplum мы сделали следующие:

  • Основное влияние на производительность GP оказывает скорость дисковой подсистемы, в первую очередь - IOPS

  • При установке GP в облаке нужно закладывать 20% дополнительных ресурсов (CPU, memory)

  • На виртуалках нужно ставить меньший vm.overcommit_memory (90, вместо 95), т.к. высокое потребление CPU на облачной инфре оказывает негативное влияние на сеть между сегмент-нодами (теряются пакеты, затормаживаются ответы), что может вести к выпадению сегментов из кластера

  • Производительность кластера в облаке с большим количеством маленьких вируталок выше, чем с малым количеством больших – лучше взять 18 виртуалок по 5 сегментов на каждой, чем 5 виртуалок по 18 сегментов.

Про Kafka

По Kafka мы замеряли скорость чтения/записи и получили 350 МБ на записи и 400 МБ на чтение на обычных HDD дисках. Особенность кафки – последовательная запись и чтение с диска позволяет ей работать очень быстро на бюджетном железе. Для большинства задач этих скоростей хватает за глаза.

В прод на ламбе – ожидание и реальность

После наших тестов мы радостно взяли все и побежали на железный кластер. Мы подумали, что все будет быстро и просто. Но тут начались проблемы.

Оказалось, что нельзя просто так взять и переехать на железо. Начались проблемы: диски вылетали из крутых брендированных серверов (хотя вендор их быстро менял, все равно производительность и отказоустойчивость деградировали). Также мы испытывали проблемы со специфичными настройками сети для GreenPlum. Столкнулись с багами в bios у HP, ноды рандомно перезагружались – пришлось обновлять bios. Также мы заметили, что HP по умолчанию включает зеленый режим у CPU, и при большой нагрузке наш кластер троттллился, и производительность не была максимальной.

А в параллели с этим, пока команда занималась стабилизацией прода, наш бэклог рос, и, вместо того чтобы развивать сам продукт, мы тратили много времени на сами железки. При этом бизнес требовал SLA и хотел, чтобы их запросы выполнялись всегда быстро. 

Двойной ETL

Тогда мы задумались, как обеспечить продолжительность бизнеса, даже если на наш дата центр упадет метеорит.

Единственным решением в данном случае было иметь dual ETL – двойная инфраструктура, двойные данные, два раза проливать. Встал вопрос о покупке еще одного шкафа железа. И тогда мы поняли, что нужно идти обратно в облака.

Надо отметить, что пока мы занимались развитием железа, в вопросе облаков мы тоже не стояли на месте, разворачивали большое количество виртуальных машин для наших тестовых и стейджевых окружений, для инкубационных окружений. 

Мы развернули кучу managed-сервисов в облаке. Все это мы делали с помощью швейцарского ножа devops’а – Terraform (IaC), Ansible, Jenkins. Также мы выработали системный подход к работе с инфраструктурой (железной / облачной / виртуальной) – мы используем ELK для сбора логов, Consul как сервис дискавери, в Prometheus собираем метрики, в Grafana их отображаем. 

Итого

  • Мы начали трансформацию всей нашей компании  в data-driven. На данный момент мы еще на самом старте, но уже сейчас мы видим, что продукты, основанные на данных  приносят немалую прибыль

  • Мы построили нашу платформу полностью на open-source решениях

  • Облачные провайдеры помогают в осуществлении быстрого старта для новых продуктов. Но необходимо иметь ввиду, что нельзя бездумно пользоваться всеми облачными сервисами, особенно managed, особенно специфическими и которых нет в других облаках, т.к. есть вероятность получить cloud lock. Проще говоря, нужно быть cloud-agnostic

  • Гибридные облака - это современный тренд, который позволяет компаниям выбирать облако в зависимости от задач и критериев (цена, доступность, удобство, безопасность). А использование IaC (Infrastructure as Code) упрощает эту задачу

В следующей статье мы расскажем подробнее о текущей архитектуре нашей платформы, ее компонентах и open source продуктах, которыми мы пользуемся - опыте с GreenPlum, Airflow, Apache Superset, Flink и многими другими.

Источник: https://habr.com/ru/company/leroy_merlin/blog/561072/


Интересные статьи

Интересные статьи

Эта статья о следующем эволюционном шаге в развитии систем обработки данных. Тема амбициозная, поэтому расскажу сначала немного о себе. Вот уже больше 10 лет я работаю ...
Хотя технологии баз данных и другие подобные инструменты существуют много лет и в наши дни чрезвычайно развиты, им всё ещё нелегко обойти самые обычные электронные таблицы в плане уни...
В силовой полупроводниковой электронике, как и во многих других областях полупроводниковой электроники, возможности кремния, основного полупроводникового материала, оказались практиче...
Сегодня утром пришло письмо от GitLab, об изменениях соглашения по обслуживанию. Перевод этого письма будет под катом.
Привет, Хабравчане! Вот уже не в первый раз я приезжаю в гости к Владимиру Лихачеву, отцу Криса Касперски, чтобы проведать и навестить его. Во второй раз он мне не отказал и разрешил взять у н...