СИЭУиП • Дистанционный резерв • Занятие 27

Домашнее задание - Практическое занятие №10: исполняемый файл проекта, этап 1

Дисциплина: ОП.08 Основы проектирования баз данных | Тема 4. Проектирование структур баз данных

Выполняйте только если преподаватель назначил это задание. Срок сдачи сообщит преподаватель.

1. Общая постановка инженерной задачи

Цель домашнего задания — закрепить практические навыки конфигурирования строки подключения исполняемого приложения к реляционной СУБД (PostgreSQL), проектирования параметров пула соединений (Connection Pool) и разработки отказоустойчивой подсистемы диагностики сетевых сбоев.

Задание состоит из двух независимых взаимосвязанных блоков: инженерно-конфигурационного и диагностико-аналитического.

2. Задание 1: Разработка защищенного конфигурационного файла подключения

Часть А. Формирование переменных окружения (.env)

Разработайте эталонный файл конфигурации .env для микросервисного бэкенда информационной системы, удовлетворяющий следующим требованиям безопасности и производительности:

  • Сетевой адрес хоста базы данных: postgres-cluster.prod.internal, нестандартный сетевой порт: 5433.
  • Целевая база данных: enterprise_core_db.
  • Пользователь сервиса: svc_core_app (пароль должен быть сгенерирован и содержать не менее 16 символов, включая спецсимволы).
  • Режим шифрования соединения: строгая валидация подлинности сервера (verify-full) с указанием пути к доверенному центру сертификации /etc/ssl/certs/enterprise-ca.crt.
  • Лимит времени установления сетевого соединения (TCP/SSL Connect Timeout): 4 секунды.
Часть Б. Расчет и настройка параметров Connection Pool

Для сервера приложений, обслуживающего в среднем 250 параллельных веб-запросов на 8-ядерном сервере СУБД с RAID-массивом SSD:

  • Рассчитайте оптимальный размер пула соединений по формуле: $ ext{Pool Size} = ( ext{CPU} imes 2) + ext{Disk Spindles}$. Обоснуйте полученное значение.
  • Сформируйте конфигурацию пула в формате config.json:
    • min_idle_connections (минимальный резерв готовых сокетов);
    • max_pool_size (максимальный размер пула);
    • idle_timeout_ms (время закрытия простаивающего сокета, 300 000 мс);
    • connection_timeout_ms (максимальное время ожидания сокета из пула до падения по таймауту, 3 000 мс).

3. Задание 2: Диагностика сетевых сбоев и отказоустойчивое логирование

Разработка программного модуля Health Check и симуляция сбоев

Напишите скрипт на любом изучаемом языке программирования (Python, C#, JavaScript/Node.js, Java), выполняющий следующую последовательность действий при старте исполняемого файла:

  1. Считывание параметров подключения из внешнего файла конфигурации.
  2. Инициализация пула соединений.
  3. Выполнение проверочного запроса связности (Health Check / Ping): SELECT 1;.
  4. Обязательный возврат сокета в пул в блоке гарантированного освобождения (finally / using / with) для предотвращения Connection Leak.
  5. Перехват сетевых исключений с классификацией ошибок и записью в лог-файл connection_errors.log:
    • Сценарий 1: Ошибка Connection Refused (порт 5433 недоступен). Приложение должно зафиксировать ошибку в логе, указать причину («Служба СУБД остановлена или сетевой порт заблокирован экраном») и предпринять 3 попытки реконнекта с интервалом в 2 секунды.
    • Сценарий 2: Ошибка Connection Timeout. Приложение должно зафиксировать превышение 4-секундного таймаута («Превышено время ожидания ответа сервера СУБД») и корректно завершить исполнение с ненулевым кодом выхода exit(1), не допуская бесконечного зависания процесса.

4. Форма отчета и критерии оценивания

Компонент отчета Требования к содержанию Критерий оценки
Файлы конфигурации Исходные тексты файлов .env и config.json, оформленные по спецификации без хардкода секретов в исходниках. 2 балла (полнота и корректность параметров)
Расчет пула соединений Математическое обоснование параметров пула, объяснение недопустимости пулов на сотни соединений. 1 балл (инженерное обоснование)
Исходный код Health Check и лог Листинг программы с перехватом исключений, корректным освобождением сокетов в пул и фрагмент журнала connection_errors.log. 1 балл (гарантия отсутствия connection leak, информативность лога)

Готовый отчет предоставляется преподавателю в виде архива с файлами конфигураций и исходным кодом модуля проверки связи в установленный преподавателем срок.