Импортозамещение СУБД
- Заказчик:
- АО «Росагролизинг»
- Руководитель проекта со стороны заказчика
- Поставщик
- ООО «Нетрика»
- Год завершения проекта
- 2022
- Сроки выполнения проекта
- Август, 2022 - Декабрь, 2022
- Масштаб проекта
- 3488 человеко-часов
- Цели
С августа до конца 2022 года выполнить импортозамещение СУБД Microsoft SQL Server и Microsoft SSIS на российскую Postgres Pro и Apache Airflow для аналитической системы предприятия АО «Росагролизинг».
- Результаты
В ходе выполнения работ команда специалистов компании «Нетрика» реализовала все этапы миграции:
• провела аудит СУБД аналитической системы заказчика;
• сформировала план работ по миграции;
• предложила ряд инфраструктурных решений для обеспечения миграции;
• осуществила перенос схемы данных, таблиц, процедур и интеграционной службы с использованием скриптов автоматизации миграции собственной разработки;
• провела тестирование результатов миграции и сверку мигрированных данных;
• ввела новую версию системы в промышленную эксплуатацию.
Уникальность проекта
Система заказчика решает следующие бизнес-задачи:
1. Агрегация атомарных аналитических данных из других систем АО «Росагролизинг».2. Проведение вычислений на агрегированных данных для подготовки чистых аналитических данных о результатах деятельности АО «Росагролизинг».
3. Передача чистых аналитических данных в BI систему.
Все эти задачи решаются в СУБД в 15 ETL пакетах, которые содержат 131 процедуру размером от 500 до 12 000 строк кода каждая. Было необходимо полностью сохранить функциональность СУБД без последствий для работы и процессов предприятия.
Хранилище в этой СУБД содержит более 6 Тб данных, сгруппированных в 341 таблице, в каждой от 20 до 450 колонок, от 20 тысяч до 4 миллиардов строк.
Параллельно с импортозамещением обнаруживались и решались проблемы в коде исходной СУБД. Например:
1. Изменения в работе исходного кода, связанные с легаси функционалом системы.2. Отсутствие явного указания критерия сортировки при выборке из базы данных. Так как выборка по умолчанию по разному работает в MS SQL и PostgreSQL, приходилось для каждого запроса вносить уточнение.
3. PostgreSQL не поддерживает названия имен объектов СУБД на русском языке. А также максимальная допустимая длина названия объекта в PostgreSQL меньше, чем в MS SQL.
Основой решения проблем стало обсуждение с заказчиком каждого случая для подбора правильного решения с точки зрения бизнес-задач.
- Проект решает задачи импортозамещения
- Да
- Использованное ПО
Не потребовалось.
- Сложность реализации
В процессе выполнения работ фактически параллельно разрабатывалась новая версия системы на Postgres Pro и дорабатывалась старая версия на MS SQL Server. Происходило это из-за того, что в работе старой системы выявлялись особенности работы легаси функционала, и она использовалась как эталон для проверки правильности результатов, выдаваемых новой системой. Всё это ощутимо сказывалось на сроках, которые были фиксированные.
Поэтому значительная часть успеха проекта лежит в слаженной двусторонней работе специалистов исполнителя, которые разрабатывали Postgres версию, и заказчика, которые дорабатывали Microsoft версию.
Также благодаря разработке утилит для автоматизации миграции фактически весь код был переведен на Postgres за 2 месяца. Оставшиеся три месяца заняла отладка этого кода. Без автоматизации выполнить проект в такой срок было бы невозможно.
- Описание проекта
АО «Росагролизинг» – государственная лизинговая компания, деятельность которой направлена на техническую и технологическую модернизацию отечественного АПК посредством передачи в лизинг средств производства организациям АПК страны. Для повышения устойчивости аналитической системы предприятия было принято решение о переносе СУБД в российскую Postgres Pro и импортозамещении службы интеграции MS SSIS.
Технологическим партнером проекта стала петербургская ИТ-компания «Нетрика».
Для выполнения работ в срок командой миграции были разработаны скрипты автоматизации всей рутинной работы:
1. Скрипт переписи SQL кода процедур и базы данных с сохранением исходного форматирования кода и комментариев в нем.
2. Скрипт переноса данных из одной СУБД в другую с такой же структурой.
3. Скрипт сверки 100% соответствия данных в старой и новой версиях БД, в том числе после выполнения процедур.
4. Скрипт пошагового воссоздания SSIS пакетов путем генерации DAG файла с тем же набором step’ов и task’ов.
5. Скрипт проверки правильной работы процедур путем сравнения результатов выполнения одинаковых запросов в старой и новой версиях СУБД.
Таким образом, ручная работа заключалась только в отладке вышеуказанных проблем в исходной СУБД и решении проблем, которые автоматически решить не получалось. Например:
1. Разная логика работы одинаковых функций в PostgreSQL и MS SQL. Например, функция приведения типов данных (float -> decimal) и в операции округления. Приходилось в PostgreSQL разрабатывать функции, которые работали аналогично таким же функциям в MS SQL, чтобы не трогать бизнес-логику кода в целом.
2. Выявлялись скрытые зависимости с вызовом процедур из внешних систем. Для их корректной работы приходилось либо менять взаимодействие с этими процедурами, либо также переводить эти процедуры на PostgreSQL.
3. Итерационное выявление мест в коде, которые приводили к неверным результатам работы процедуры в целом. Диагностика этих ошибок с последующим их исправлением.
Вычислительные мощности для Postgres версии СУБД были выделены аналогичные мощностям исходной версии. Скорость выполнения всех процедур после оптимизации уступала скорости в исходной СУБД на 20-30%. Но это были допустимые показатели, поэтому было решено остановить оптимизацию на них.
Отладка производительности в Postgres версии СУБД происходила следующими способами:
1. Изучение планов выполнения по шагам и выявление деградаций.
2. Замена непроизводительных запросов. Например, замена Outer apply на оконную функцию.
3. Удаление лишних индексов, добавление нужных.
4. Ввод дополнительной статистики для планировщика запросов.
5. Тюнинг серверов Linux и Postgres. Например, параметр read-ahead-kb значительно увеличивает производительность последовательного чтения.
С января по апрель 2023 года старая и новая версии СУБД находились в параллельной эксплуатации для контроля корректной работы и производительности в Postgres версии СУБД. В мае 2023 года версия на MS SQL Server была выведена из эксплуатации, и с тех пор данная система АО «Росагролизинг» работает на российских технологиях.
- География проекта
- АО «Росагролизинг» осуществляет деятельность на территории всей Российской Федерации.
- Дополнительные презентации:
- Нетрика - Миграция баз данных.pdf