JDBC-коннектор
Бизнес-требования
Основные требования к фиче:
- Заменить подключение к БД в диспетчере данных на JDBC-коннектор
- Единый способ подключения к разным СУБД
- Возможность добавлять новые коннекторы к любой СУБД прямо из интерфейса системы
- Возможность управлять параметрами подключения через конфигурацию источника
- Обеспечить безопасность соединения
- Сохранить логику взаимодействия с микросервисами бэкенда, просмотр статуса подключения
- Настроить логирование всех операций с JDBC-коннекторами
- Коннектор и нагрузка на него никак не должны влиять на производительность системы, при падении драйвера не должен падать основной поток FB
- В документации требуется добавить новый раздел, посвященный добавлению JDBC-драйвером и подключению по JDBC к внешним СУБД
В базовой конфигурации должно быть настроено подключение к следующим СУБД (уточнить актуальные версии):
- ClickHouse
- PostgreSQL
- MSSQL
- MYSQL
- ORACLE
Вопросы:
- Нужны ли типы защиты SSL/SSH?
- Нужен ли валидатор драйверов? Какие поддерживаем результаты валидации (принято/отклонено или принято/предупреждение/отклонено)
- Формирование JDBC URL: строка подключения в формате jdbc:<subdb>://<host>:<port>/<database>?
- Продумать стратегию перехода с текущих коннекторов к БД на JDBC
Решение
Архитектурная схема
Сценарии использования
План работ
- Управление драйверами (бэкенд)
- Подготовить каталог для хранения jar-файлов драйверов с правами доступа только для сервисов платформы; обеспечить резервное копирование этого каталога
- Настроить валидатор драйверов: проверить наличие обязательных мета-методов (getTables, getColumns, getImportedKeys, getColumnName, getColumnType, getScale, getColumnCount); обеспечить логирование результатов валидации
- Обеспечить регистрацию драйвера в реестре: записать тип, версию, путь к файлу, хэш-сумму (?), дату загрузки, статус
- Настроить синхронизацию с Vault для лицензионных ключей проприетарных драйверов (Oracle, MSSQL); обеспечить проверку наличия лицензии при регистрации драйвера
- Управление драйверами (фронтенд)
- Реализовать интерфейс загрузки драйвера: выбор файла, ввод типа СУБД, версии, описания; обеспечить проверку файла
- Реализовать вывод списка доступных драйверов в интерфейсе настройки источников
- Конфигурация подключений (бэкенд)
- Настроить хранение учётных данных в хранилище с обратимым шифрованием; обеспечить передачу секретов микросервисам только в момент выполнения подключения
- Реализовать модуль тестирования подключения: при нажатии «Проверить» микросервисы пытаются установить соединение с внешней БД и выполнить пробный запрос; обеспечить возврат понятного сообщения об успехе или ошибке
- Реализовать поддержку параметров SSL: загрузка сертификата сервера, настройка взаимной аутентификации при необходимости; обеспечить проверку валидности сертификата при тестировании подключения
- Реализовать поддержку SSH-туннеля: ввод хоста, порта, логина, пароля или ключа; обеспечить создание туннеля перед установкой JDBC-соединения и его закрытие после завершения
- Конфигурация подключений (фронтенд)
- Реализовать форму создания источника данных: выбор драйвера из реестра, ввод JDBC URL, логина, пароля, настроек SSL/SSH; обеспечить маскировку пароля в интерфейсе
- Загрузка данных (бэкенд)
- Реализовать логику Cron: запуск загрузок по расписанию или событию; обеспечить передачу контекста выполнения в Blocker и обработку ошибок запуска
- Реализовать логику Blocker: проверка активной загрузки для того же источника; обеспечить установку и снятие блокировки, предотвращение параллельного импорта одной таблицы
- Реализовать логику Loader: чтение данных из внешней БД через JDBC-драйвер с учётом параметров подключения
- Настроить запись данных в ClickHouse
- Логирование и мониторинг (бэкенд)
- Настроить сбор логов при добавлении и валидации драйверов, создании JDBC-подключений
- Настроить алертинг: при ошибке загрузки, таймауте подключения или превышении лимита попыток отправлять уведомление
- Ролевая модель (бэкенд)
- Доступ к добавлению и валидации драйверов имеют только пользователи с ролью "Администратор системы"
- Доступ к созданию подключений имеют только пользователи с ролью "Разработчик" и выше
Архитектурная схема
Сценарии использования
| Use case | Зачем нужен |
|
Администратор взаимодействует с веб-интерфейсом
|
Точка входа для всех операций с драйверами
|
|
Интерфейс читает/записывает данные в реестр драйверов
|
Чтобы показать список доступных драйверов и сохранить новый
|
|
Интерфейс передаёт файл драйвера на валидацию
|
Проверка корректности .jar-файла перед сохранением
|
|
Валидатор сохраняет проверенный файл в хранилище
|
Физическое хранение драйверов на диске
|
|
Реестр передаёт список доступных типов драйверов во Слой 2
|
Чтобы дата-инженер видел только проверенные драйверы при создании источника
|
|
BI-разработчик запускает тест подключения
|
Проверка работоспособности настроек перед сохранением
|
|
BI-разработчик создаёт/редактирует конфигурацию подключения
|
Сохранение параметров: URL, порт, имя БД
|
|
BI-разработчик настраивает маппинг таблиц и полей
|
Определение, какие данные и как загружать из источника
|
|
Конфигурация ссылается на хранилище учётных данных
|
Пароли хранятся отдельно от конфигурации (безопасность)
|
|
Конфигурация ссылается на настройки SSL/SSH
|
Параметры защищённого соединения вынесены отдельно
|
|
Модуль тестирования вызывает микросервисы для проверки
|
Реальное подключение к БД выполняется через ETL-сервисы
|
|
Микросервисы читают параметры подключения
|
Чтобы знать, к какой БД подключаться
|
|
Микросервисы читают правила маппинга
|
Чтобы знать, какие таблицы и поля загружать
|
|
Хранилище передаёт учётные данные микросервисам
|
Логин/пароль для подключения к внешней БД
|
|
Настройки SSL/SSH передаются микросервисам
|
Для защищённого соединения с источником
|
|
Микросервисы читают данные из внешних БД через JDBC
|
Основной процесс ETL-загрузки
|
|
Микросервисы записывают данные в ClickHouse
|
Загрузка данных в БД проекта для аналитики
|
|
Микросервисы пишут логи загрузки
|
Отладка ETL-процессов, мониторинг ошибок
|
|
Валидатор пишет логи проверки драйверов
|
Аудит операций с драйверами, отладка проблем
|
Критерии приёмки
Управление драйверами
Конфигурация подключений
Загрузка данных
Логирование и мониторинг
Ролевая модель
