СИЭУиП • ОП.08 Базы данных • Занятие 27

Интерактивный рабочий лист: Исполняемый файл проекта (Этап 1)

Практическое занятие №10: конфигурация строки подключения (Connection String), расчет архитектуры пула соединений (Connection Pool), валидация связности и обработка сетевых сбоев СУБД.

Вариант 1: Десктопное приложение складского учета

PostgreSQL • config.json • Pool 5 • Ping

Инженерная ситуация: Клиентское настольное приложение товароведа подключается к локальному серверу PostgreSQL. Требуется исключить хардкод учетных данных в исходном коде, настроить пул из 5 соединений и реализовать первичную проверку доступности СУБД.

1. Файл конфигурации подключения (config.json)
Сформируйте JSON-конфигурацию с параметрами: host, port, dbname, user, password, таймаут соединения (5с) и настройки пула (min: 2, max: 5, idle_timeout: 300с).
2. Архитектура и инициализация пула соединений (Connection Pool)
Обоснуйте выбранный размер пула для складского терминала. Напишите фрагмент кода инициализации пула (на выбранном языке программирования) и опишите, почему сокеты нельзя закрывать через прямой socket.close().
3. Первичное тестирование связи (Ping / SELECT 1) и отлов сбоев
Реализуйте функцию Health Check с выполнением запроса SELECT 1;. Обеспечьте гарантированный возврат сокета в пул и обработку сбоя при выключенной СУБД (ECONNREFUSED) с выводом пользователю.

Вариант 2: Медицинская регистратура

SSL/TLS • verify-full • Сертификаты • Таймауты

Инженерная ситуация: Автоматизированное рабочее место регистратора клиники обрабатывает персональные данные пациентов (ФЗ-152). Требуется настроить криптографически защищенный канал к удаленному серверу баз данных с верификацией сертификатов и защитой от зависания при падении сети.

1. Конфигурация защищенного SSL/TLS-подключения (config.yaml)
Опишите конфигурацию в формате YAML: параметры хоста (remote-db.med.local:5432), режим sslmode=verify-full, пути к сертификатам (sslrootcert, sslcert, sslkey) и таймаут connect_timeout=3s.
2. Защита от атак Man-in-the-Middle и параметры сертификатов
Объясните разницу между режимами sslmode=require и sslmode=verify-full. Чем грозит клинике подмена сертификата злоумышленником в локальной сети?
3. Обработка ошибки таймаута связи при падении сервера СУБД
Напишите программный блок перехвата сетевого таймаута (ETIMEDOUT / TimeoutException). Какое понятное сообщение увидит сотрудник регистратуры вместо краша программы? Как зафиксировать инцидент в аудит-логе?

Вариант 3: Банковский терминал самообслуживания

HikariCP/pgBouncer • Syslog • Connection Refused

Инженерная ситуация: Банкомат / платежный терминал выполняет финансовые транзакции. Необходим строгий контроль жизненного цикла соединений через пул HikariCP или pgBouncer и автоматическое журналирование сетевых инцидентов в системный лог.

1. Параметры промышленного пула соединений (HikariCP / pgBouncer)
Сформируйте конфигурацию пула: maximumPoolSize=10, minimumIdle=2, idleTimeout=300000ms, connectionTimeout=3000ms, maxLifetime=1800000ms. Обоснуйте каждый параметр.
2. Предотвращение критической аварии Connection Leak
Продемонстрируйте безопасный шаблон кода на C# или Java с использованием using / try-with-resources. Что произойдет с банкоматом, если при ошибке в транзакции сокет не вернется в пул?
3. Перехват Connection Refused и запись в syslog
Реализуйте обработчик исключения сбоя связи (порт закрыт, сервис СУБД упал). Сформируйте точный формат записи в системный журнал /var/log/atm/db_error.log с указанием таймстемпа, кода ошибки и уровня CRITICAL.

Вариант 4: Образовательный портал колледжа

12-Factor App • .env • SELECT 1 • Latency Benchmark

Инженерная ситуация: Веб-сервер личного кабинета студента и деканата обслуживает до 500 обращений в минуту. Требуется настроить переменные окружения по стандарту 12-Factor App, провести первоначальный Health Check и замерить время установления сессии.

1. Конфигурация через переменные окружения (.env)
Составьте эталонный файл .env для образовательного портала (хост, порт, база, сервисный логин, пароль, размер пула, таймаут). Напишите фрагмент кода безопасного чтения переменных с валидацией обязательных полей.
2. Замер задержки установления сессии (Latency Benchmark)
Напишите алгоритм, замеряющий время первого подключения (TCP+TLS+Auth Handshake) в сравнении со временем аренды сокета из пула соединений. Опишите ожидаемую разницу в миллисекундах.
3. Реализация Health Check эндпоинта /api/health
Разработайте логику функции проверки здоровья сервиса: выполнение SELECT 1, возврат HTTP 200 OK при успехе или HTTP 503 Service Unavailable с описанием ошибки при сбое связи.