1. Общая постановка инженерной задачи
Цель домашнего задания — закрепить практические навыки конфигурирования строки подключения исполняемого приложения к реляционной СУБД (PostgreSQL), проектирования параметров пула соединений (Connection Pool) и разработки отказоустойчивой подсистемы диагностики сетевых сбоев.
Задание состоит из двух независимых взаимосвязанных блоков: инженерно-конфигурационного и диагностико-аналитического.
2. Задание 1: Разработка защищенного конфигурационного файла подключения
Разработайте эталонный файл конфигурации .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 секунды.
Для сервера приложений, обслуживающего в среднем 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: Диагностика сетевых сбоев и отказоустойчивое логирование
Напишите скрипт на любом изучаемом языке программирования (Python, C#, JavaScript/Node.js, Java), выполняющий следующую последовательность действий при старте исполняемого файла:
- Считывание параметров подключения из внешнего файла конфигурации.
- Инициализация пула соединений.
- Выполнение проверочного запроса связности (Health Check / Ping):
SELECT 1;. - Обязательный возврат сокета в пул в блоке гарантированного освобождения (finally / using / with) для предотвращения Connection Leak.
- Перехват сетевых исключений с классификацией ошибок и записью в лог-файл
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, информативность лога) |
Готовый отчет предоставляется преподавателю в виде архива с файлами конфигураций и исходным кодом модуля проверки связи в установленный преподавателем срок.