Создали озеро данных для одной из самых больших в мире гидрогенерирующих компаний за 7,5 месяцев командой из 11 человек

Мы в SATORI успешно спроектировали и внедрили озеро данных в компанию РусГидро Ит Сервис (РГИТС) в рамках развития единой информационной платформы (ЕИП). Какие решения не сработали, как мы перестроились и почему это крутой кейс как для нас, так и для рынка data-решений в России.

Создали озеро данных для одной из самых больших в мире гидрогенерирующих компаний за 7,5 месяцев командой из 11 человек
Константин Могилевкин
основатель IT-компании Satori (сайт, телеграм-канал)

Привет! Я основатель IT-компании Satori. Мы работаем в двух направлениях:

  • создаем, развиваем и поддерживаем сложные проекты компаний как IT-компания полного цикла;
  • предоставляем компаниям систему DLH, которая автоматизирует весь жизненный цикл управления данными: сбор, обработку, хранение и использование.

О внедрении озера данных и развитии ЕИП задумываются компании, в которых много ИТ-систем в ландшафте. В таком случае часто приходится строить управленческие отчеты по всем филиалам и разбираться, например, в том, какие данные «гуляют» между системами. С помощью ЕИП можно получить ответы в виде понятного графа.

В кейсе покажу, как мы настроили ЕИП — подробно, с техническими деталями. Узнаете, какие решения оказались неудачными, и что помогло нам быстро перестроиться.

Какие проблемы предстояло решить в «РГИТС»

Весной 2023 года мы победили на площадке «Росэлторг» в открытом конкурсе и заключили контракт по созданию ЕИП с «РГИТС». Вот какие проблемы мы должны были решить в рамках проекта:

❌ Нет правильно выстроенного единого хранилища данных. А значит, нужно собирать данные из разных источников. На это уходит куча времени, и могут быть ошибки.

Когда есть единое хранилище, то можно сразу создавать на его основе отчеты и отслеживать, чтобы данные в разных системах не противоречили друг другу.

За время работы в «РГИТС» накопилось 80 миллионов записей холодных исторических данных, и в них не было порядка.

❌ Нет понимания атрибутивного состава сообщений, передаваемых между системами. У каждого сообщения, которое «гуляет» между системами, есть определенный набор данных: сами данные и их атрибуты. Без атрибутивного состава не понятно, какие параметры данных каким системам нужны, и почему.

Понимание того, какие данные «гуляют» между системами, позволяет:

  • не дублировать информацию;
  • понимать, каких данных может не хватать слету;
  • понимать, где в общем большом ИТ-ландшафте есть узкие места или, наоборот, все сделано оптимально.

Аналитики «РГИТС» не знали весь атрибутивный состав, который мог передаваться по потоку в сообщениях формата XML и JSON. Даже если он где-то фиксировался, то единого каталога метаданных с бизнесовым описанием не было. Когда в каталоге есть метаданные, то по ним проще искать информацию. Например, добавить метатег «пользователь» и собирать данные о всех пользователях из разных систем.

❌ Строят отчеты и визуализацию данных вручную. Аналитики компании раз в месяц сами строили отчет и визуализацию данных, хранящихся в PostgreSQL. Хотели автоматизировать сбор данных и мониторить потоки в реальном времени в виде графа.

❌ Негибкая ЕИП. Старая ЕИП не позволяет удалять системы или добавлять их в нее — требуется разработка. Новую ЕИП можно настроить так, чтобы системы добавлялись и обменивались между собой данными автоматически.

В РГИТС скептически относились к нашей команде — боялись, что мы не справимся со сложной задачей. Тем более, у заказчика нет компетенций полностью согласовать техническое решение.

Какие задачи ставили

Сделать решение на Open Source компонентах. В «РГИТС» хотели, чтобы система попала в реестр отечественного ПО и не зависела от платных вендорских решений. Поэтому концепция использования свободно распространяемого ПО была единственно верным решением. Еще было важно, чтобы используемое ПО не было запрещено Минцифрой, а версии каждого компонента, в идеале, были до 24 февраля 2022 года.

Создать надежную и отказоустойчивую систему:

  • доступность для пользователей которых выше 99% процентов от времени его работы,
  • в которых есть резервируемые компоненты,
  • на которые не влияет отключение сети и другие форс-мажоры.

Попробовать Hadoop-стек. Наш проект был пилотным — в «РГИТС» хотели проверить гипотезу и убедиться, что бизнес будет пользоваться ЕИП и потратит деньги не зря. В перспективе в компании хотели не просто сделать пилот, но еще в рамках него протестировать разные технологии BigData. В том числе самую распространенную.

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

Создали озеро данных для одной из самых больших в мире гидрогенерирующих компаний за 7,5 месяцев командой из 11 человек

У нас была Kafka, 80 млн исторических данных в одной таблице в PostgreSQL, Apache Nifi, Clickhouse, Apache HDFS, Hive, Spark, Superset и OpenMetaData. Не то чтобы это был необходимый запас для построения озера данных, но раз уж начал использовать apache, то сложно остановиться.

Предупреждаю: дальше много технических деталей, без которых не описать работу по проекту. Если вы здесь не за ними — листайте сразу до выводов и результатов.

Предложили Lambda-архитектуру и распределили данные по слоям

Lambda-архитектура позволяет распределять данные по разным слоям в зависимости от частоты их использованиям и требованиями к отклику после запроса.

  • Например, исторические данные требуются раз в год — их можно положить на «холодный» слой. Для них мы определили хранилище Stage0. Данные из Kafka попадают в HDFS и хранятся просто как файлики.
  • Данные, которые нужны раз в неделю — в «теплый слой». Для них мы выделили хранилище Stage1. В нем происходит потоковая обработка данных: данные из Kafka разделяются на атрибуты и Payload и сохраняются в Apache Hive для последующей обработки. В этом же слое можно извлекать метаданные из Payload и структурировать их с помощью OpenMetaData.
  • А данные, которые нужны каждый день, и к которым обращаются по 100 раз в день — переложить в «горячий» слой, Stage2. Здесь определяются идентификаторы потоков данных и строятся количественные агрегаты по этим потокам — это нужно для визуализации и построения отчетов.
Первоначальная техническая архитектура озера данных
Первоначальная техническая архитектура озера данных

Дополнительно к слоям добавили:

  • справочники;
  • извлечение метаданных и их сохранение в OpenMetaData;
  • разовую обработку исторических данных из PostgreSQL.

После первых испытаний на тестовой среде отказались от Hadoop и Apache Hive, перешли на Clickhouse

Для Hadoop потребовалось больше аппаратных ресурсов и оперативной памяти, чем мы закладывали. В ходе обсуждения решили, что не хотим разворачивать, использовать и поддерживать гигантский Hadoop-кластер.

Примерно так Hive сжирал всю оперативную память (RAM)
Примерно так Hive сжирал всю оперативную память (RAM)

Вместо Hadoop решили использовать Clickhouse так:

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

Отказаться от Stage0 в первоначальном виде. Вместо него использовать Clickhouse TTL с подключенными внешними томами. Тут пригождается уже развернутый HDFS:

  • Таблица содержит все данные. Актуальные данные хранятся на томах самого Clickhouse.
  • Исторические данные отправляются в HDFS.
  • Дополнительно Clickhouse кеширует горячие исторические данные.
  • Stage1 по-прежнему обрабатывает потоковые данные из Kafka.
  • Stage2 по-прежнему строит агрегаты.
Архитектура озера данных после перестройки
Архитектура озера данных после перестройки

То есть, от Apache Hive пришлось полностью отказаться.

Чему мы научились в ходе проекта

Если строишь систему на OpenSource-компонентах, будут баги. Придется обновляться, а иногда самим патчить и бэкпортить исправления к себе.

Nifi — мощная и гибкая ETL-система, которую мы будем применять в других проектах. Nifi — это программный API для разработки кастомных процессоров по обработке данных. Мы в проекте с его помощью извлекали метаданные из тел сообщений.

Ckickhouse — мощная, быстрая и очень гибкая СУБД. Точно будем применять в проектах и ее тоже.

С OpenMetaData не все бывает гладко. Эта история тянет на отдельную статью — напишем, если эта соберет больше 30 тысяч просмотров.

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

Результаты для заказчика

✅ Выстроили единое хранилище данных. Благодаря этому:

  • Заказчик быстрее собирает отчеты.
  • Повышается реакция на важные изменения в бизнес-процессах (например, финансовые показатели).
  • Повышается управляемость.
  • Снижаются затраты на развитие IT-ландшафта.

✅ Создали единый каталог метаданных — так называемый дата-каталог.

✅ Настроили автоматическую отчетность и визуализацию данных. Теперь заказчик еще и видит качество данных, благодаря визуализации агрегатов по данным, которая показывает ошибки в исходных сообщениях.

Граф IT-систем РГИТС и информационных потоков между ними
Граф IT-систем РГИТС и информационных потоков между ними

✅ Выстроили гибкую ЕИП. В ней:

  • Высокая скорость обработки поступающих из шины сообщений — 8000 сообщений в минуту.
  • Высокая отказоустойчивость — при недоступности одного из узлов ClickHouse, запись происходит на другом узле. При восстановлении узла, данные автоматически реплицируются с работоспособного узла на восстановленный. При недоступности всех узлов Clickhouse и Nifi-pipeline, обработка данных приостанавливается без потери сообщений. При появлении хотя бы одного доступного узла Clickhouse, работа Nifi-pipeline автоматически продолжается.

А главное — от скепсиса РГИТС к концу проекта ничего не осталось. Заказчики довольны, и будут дальше использовать пилот.

Что дальше с пилотом

РГИТС планирует на основе озера данных строить управленческую отчетность для единых центров обслуживания (аналог бэк-офиса для крупных компаний). В компании много филиалов, и у каждого 1С, CRM, ERP — все как мы любим.

***

Описать задачу на создание озера данных или узнать больше о ЕИП можно у меня в Телеграме.

3636
30 комментариев

Облако, озеро... а дальше эмм... лес?)

Ответить

Случайный лес.

Random forest в машин лернинге на озере данных

2
Ответить

Дальше или болото (если озеро грязное) или отличная погода (если облаков нет)

1
Ответить

Лес уже есть (лес отношений в домене)

1
Ответить

Реально крутой кейс, Константин

1
Ответить

Спасибо, сами в шоке)

Ответить

Создали «озеро данных» для одной из самых больших в мире гидрогенерирующих компаний за 7,5 мес командой из 11 человек — Сервисы на vc.ru

• Satori успешно спроектировал и внедрил озеро данных в компанию РусГидро Ит Сервис в рамках развития единой информационной платформы.
• Внедрение озера данных и развитие ЕИП актуальны для компаний с множеством ИТ-систем в ландшафте.
• В кейсе рассказывается о настройке ЕИП с техническими деталями и решении проблем, таких как отсутствие правильно выстроенного единого хранилища данных и понимания атрибутивного состава сообщений, передаваемых между системами.
• В проекте использовались Open Source компоненты, что привело к багам и необходимости обновлений.
• В результате проекта были выстроены единое хранилище данных, единый каталог метаданных и настроена автоматическая отчетность и визуализация данных.
• Заказчику были предоставлены результаты, включая повышение управляемости, снижение затрат на развитие IT-ландшафта и создание гибкой ЕИП с высокой скоростью обработки сообщений и отказоустойчивостью.

1
Ответить