Специалисты DBI провели аудит СУБД PostgreSQL для компании «Дневник.ру»

В настоящее время часто возникает вопрос импортозамещения внутри компании. Много факторов, которые влияют на принятие такого решения, начиная с отсутствия поддержки и обновлений от вендора, возникающих проблем с совместимостью с устаревшими серверными решениями, а также риск уязвимости с точки зрения информационной безопасности. После проделанной работы силами внутреннего ИТ-отдела или привлекая специальные компании, необходимо провести аудит СУБД, чтобы проверить работоспособность программного обеспечения, степень его защиты от внутренних и внешних угроз, а также эффективность работы. Однако бывает недостаточно сил ИТ-отдела компании и требуются узкоспециализированные специалисты.

В этой статье мы хотим поделиться опытом специалистов компании DBI, рассказать, как выполнили аудит СУБД и серверных мощностей по запросу от компании «Дневник.ру» — поставщика saas-решения для образования.
Итак, рассмотрим:
Наш заказчик принял решение о миграции своих СУБД с MSSQL на PostgreSQL и выполнил ее силами своего IT-отдела. После проведения миграции СУБД встал вопрос об аудите проделанной работы узкопрофильными специалистами по PostgreSQL.

Основной задачей для специалистов компании DBI стало проведение аудита инфраструктуры и СУБД с целью улучшения производительности СУБД PostgreSQL.

В дополнение к основному запросу целью аудита было:
1. Выявление наличия критичных проблем, угрожающих доступности кластера PG.
2. Выявление недостатков и упущений в организации обслуживания БД и выполнения регламентных работ и подготовка рекомендаций по их устранению.
3. Формирование рекомендаций по устранению выявленных недостатков в функционировании кластера PG.

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

Работа на уровне сервера:
1. Проверка версии PG и установленных расширений
2. Анализ конфигурации PG
3. Проверка наличия бэкапов и их менеджмент
4. Проверка crontab заданий PG
5. Проверка логов кластера PG
6. Проверка общей нагрузки на сервере

Здесь проблем обнаружено не было, нагрузка на cpu в среднем не более 50%, использование RAM так же.

Критических ошибок в логах PG кластера не выявлено. Значит необходимо более глубоко рассматривать сами СУБД и запросы в них.

Работа на уровне СУБД:
1. Проверка конфигурации autovacuum’а (в том числе операций сбора статистики)
Рекомендация по изменению параметра автовакуума для ускорения процесса и тем самым более эффективной борьбы с увеличением объема таблиц.
2. Проверка размещения файлов кластера PG на сервере
3. Проверка настроек планировщика
4. Анализ bloat таблиц и индексов
Рекомендация по реиндексу для перепаковки индексов.
5. Анализ неиспользуемых и дублирующих индексов
Составили список дублирующихся индексов и неиспользуемых объектов.
6. Составление списков самых длительных и частых запросов, занимающих наибольший процент времени работы кластера PG (по DB Time и по количеству выполнений)
7. Анализ запросов на предмет возможных оптимизаций.

На данном этапе для ускорения работы наши специалисты рассмотрели top-10 запросов максимально загружающих систему.
В зависимости от проблемы в запросе рекомендовалось: применить создание и изменение существующих индексов, учитывая специфику таблицы и самого запроса, создание MATERIALIZED VIEW, а также полное изменение структуры запроса с применением других SQL операторов.

В конечном итоге нашей работы клиент получил полный список рекомендаций по настройке своей системы. После согласования мы произвели нужные изменения, что достаточно быстро дало результат, СУБД и приложение вышло на плановые показатели скорости отклика и нагрузки.

Если вы планируете провести аудит или миграцию СУБД, специалисты нашей компании готовы проконсультировать и помочь в решении вашей проблемы. Напишите нам — будем рады ответить!

Load avarege «до»

Load avarege «после»

Корпоратив DBI 2022

Компания DBI завершила летний сезон 2022 крутым корпоративом!

Важно не только сплоченно работать вместе, а также и уметь отдыхать! Так как офисы нашей компании и сотрудники в разных городах, и многие работают удаленно — это дополнительная возможность познакомиться и пообщаться с новыми коллегами.

Мероприятие в формате Pool Party прошло в Embargo Villa и стало отличной возможностью насладиться последними жаркими выходными лета.

Организацией мероприятия занимался HR-отдел. Была подготовлена насыщенная программа как для взрослых, так и для детей: выездные аттракционы, которые пришлись по душе и родителям, и детям – аэрохоккей, кикер, гоночная трасса с радиоуправляемыми машинками. В течение всего дня с детьми работали аниматоры, они проводили – конкурсы и аквагрим.

На протяжении всего мероприятия ведущий создавал ненавязчивую атмосферу и радовал гостей непревзойденным чувством юмора. Мы сыграли в квиз, а победители получили памятные брендированные подарки – сумки-холодильники, портативные колонки и зарядные устройства.

Завершающим аккордом этого дня стала харизматичная группа The Hobots, которые зарядили всех своей энергией.

Конечно была и официальная часть корпоратива! Наш директор Руслан Наумов поздравил сотрудников, которые работают в компании 10 лет – их наградили памятными золотыми значками.

Основное руководство по установке Apache Superset от Дмитрия Шевченко

В настоящее время решения Open Source набирают популярность в мире и помогают компаниям решать важные задачи. Одним из главных преимуществ платформы с открытым исходным кодом является его стоимость, а также гибкость и свобода выбора разных структур, облаков и услуг. Наши специалисты всегда следят за развитием технологий в ИТ, подбирают новые подходы, разрабатывают и тестируют новые программы. Сегодня подготовили обзор про Apache Superset. Специалист по бизнес-приложениям компании DBI, Дмитрий Шевченко, расскажет, как настроить Superset, а также подробно покажет опции, которые BI-инструмент предлагает разработчикам.

Apache Superset — бесплатный BI-инструмент, в котором есть важный аналитический функционал «out of the box» с возможностью расширения.

Для ознакомления мы развернем тестовый сервер на одной из ОС семейства Linux (ОС Windows для Superset официально не поддерживаются). Есть два способа установки: через pip или развернуть docker-образ.

В случае выбора через docker у нас будет доступ к директории superset-fronend, содержащей файлы, относящиеся к инфопанелям (дашбордам) — визуализации, UI и пр. Если установим через pip все файлы будут в скомпилированном виде без возможности их редактирования.

Выберем вариант установки через pip, для ознакомления редактировать файлы фронтенда нам не понадобится.

Инструкция по установке есть здесь: https://superset.apache.org/docs/installation/installing-superset-from-scratch.

Сам процесс несложен, и мы не будем на нем останавливаться. Можно лишь отметить, что в некоторых версиях Superset случаются конфликты версий модулей, даже при корректно установленных требованиях. Однако эту проблему можно решить напрямую, переустановкой конкретной версии в pip.

Итак, наш dev-сервер запущен, и если мы выбрали опцию «установить примеры», то сразу можем наблюдать несколько симпатичных инфопанелей:

*Все скриншоты далее сделаны на основе встроенных примеров

 

Теперь рассмотрим, что собой представляет Superset «под капотом».

Перейдем из директории venv в ./lib/python3.8/site-packages/

Здесь три сотни директорий! Из них можно отметить следующие:

  • Flask_appbuilder — в основе Superset лежит Flask, а точнее Flask Appbuilder. Сравнивая их документацию, можно заметить много общего – схожий UI, гранулированный доступ, локализация через Babel, набор cli-команд и пр.
  • Jinja2 — шаблонизатор на основе python, позволяет организовать некое подобие параметров внутри отчетов.
  • Markdown — язык текстовой разметки, позволяет красиво встроить в отчет поясняющий текст, а также ссылку или изображение.

Так выглядит код для элемента markdown:

А так он отображается в отчете:

Вообще, если в отчете Superset надо настроить привлекательность, например, цвет шрифта и табличек, фон — добро пожаловать в CSS, а если нужен кастомный визуальный элемент – можно найти или создать свой в js, такой вот Web-BI получается.

  • Sqlalchemy — библиотека для работы с SQL базами, доступ к интерфейсу, которой можно получить из GUI Superset. Удобно, чтобы протестировать запрос перед его визуализацией:

  • Yaml – опции импорта-экспорта данных в Superset реализованы в виде yaml – файлов, можно в один клик экспортировать наш отчет с dev-сервера и перенести его на prod. Для более сложных манипуляций можно настроить автоматическую обработку и развертывание таких файлов через API, спецификация по которому доступна по адресу {Superset instance}/swagger/v1, в нашем случае это http://localhost:8088/swagger/v1:

Здесь можно увидеть методы для всех наших объектов – запросов, датасетов, и даже annotaion layer, который мне пока не приходилось использовать.

Теперь перейдем в директорию superset. Здесь хранятся исходные файлы *.py, отвечающие за логику приложения. Видно, директорию examples, где лежат наши инфопанели-примеры. Сейчас нас интересует файл config.py, где прописано множество настроек для конфигурации нашего приложения. Чтобы изменить эти настройки, сам файл мы трогать не будем, а создадим новый файл superset_config.py (можно в любой директории, даже вне venv) и пропишем путь к нему через команду:

export SUPERSET_CONFIG_PATH=/{YOUR PATH}/superset_config.py

Теперь мы можем написать все нужные нам параметры в этот файл, и они перезапишут соответствующие определения в config.py.

Остановимся на некоторых интересных параметрах из config.py подробнее:

  • SQLALCHEMY_DATABASE_URI – путь ко внутренней БД Superset, хранящей все наши метаданные: дашборды, датасеты, чарты и пр. По умолчанию это БД на sqlite, но для прода рекомендуется поставить PostgreSQL или MySQL. В дальнейшем мы можем настроить подключение к этой БД в самом Superset, чтобы получить данные для self-аналитики.
  • BABEL_DEFAULT_LOCALE – локализация по умолчанию, можем выбрать русский язык. При желании, конечно, всегда можно дополнить или изменить её самому, инструкции по настройке локализации есть здесь: https://superset.apache.org/docs/contributing/translations
  • DEFAULT_FEATURE_FLAGS – параметр–словарь, в котором можно настроить много интересных опций, например:

ENABLE_TEMPLATE_PROCESSING — позволяет использовать jinja –переменные. Как их применять — тема для отдельной статьи, сейчас отметим, что можно например создать датасет и использовать в нем Jinja для выборки только данных, к которым относится текущий пользователь через {{ current_user_id() }}, либо создав свой макрос.

DASHBOARD_CROSS_FILTERS – добавляют при создании чартов (не для всех визуализаций) опция. «Emit dashboard cross filters» — позволяет нажимать на чарты, чтобы фильтровать отчет по выбранному значению, например, так:

Можем также настроить, на какие из чартов этот фильтр будет применим:

Видим, что на «Большое число» теперь кросс-фильтр не действует:

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

Важно отметить, что перезаписывать параметры в DEFAULT_FEATURE_FLAGS основного конфиг-файла нужно уже в FEATURE_FLAGS файла superset_config.py!

EXTRA_CATEGORICAL_COLOR_SCHEMES – набор цветовых схем, которые можно использовать для чарта/дашборда, можем создать собственную цветовую схему для чартов. Superset может подхватить новую схему «на лету», даже без перезагрузки сервера – достаточно сохранить изменения в superset_config.py:

Как отмечалось ранее, при развертывании через venv основные файлы фронтенда будут нам недоступны, однако кое-что мы настроить все-таки можем. Из директории superset перейдем в static/assets/images. Здесь мы видим файл superset-logo-horiz.png, отвечающий за лого нашего приложения. Заменим его на что-нибудь более интересное и перезапустим наш сервер, а также нужно очистить кэш:

Расширение функционала «out of the box» прошло успешно!

Конечно, опций по настройке Superset значительно больше – здесь есть и возможность асинхронного выполнения запросов, настройка рассылок, интеграция через Auth, конфигурация логирования и т.д. Философия Superset и Flask, лежащим в его основе, в этом плане совпадают — предоставить разработчику костяк с открытым кодом, на основе которого можно настроить и создать то, что нужно для конкретной задачи.

Если у вас остались вопросы по настройке Apache Superset, или любому из решений Open Source, мы готовы предоставить консультацию и подробно обсудить вашу проблему.  Позвоните или напишите нам – мы с удовольствием ответим на все ваши вопросы!