Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Db 2 #88

Open
wants to merge 10 commits into
base: dev
Choose a base branch
from
Open

Db 2 #88

wants to merge 10 commits into from

Conversation

bocharovatd
Copy link
Collaborator

@bocharovatd bocharovatd commented Dec 3, 2024

ДЗ_2 СУБД
Работа с БД через сервисную учетную запись
Для приложения настроена роль https://github.com/go-park-mail-ru/2024_2_NovaCode/blob/db_2/internal/db/postgres/migrations/20241201154736_create_app_user_and_role.sql, существуют ограничения на действия с разными таблицами в зависимости от бизнес-требований. Даные учетной записи используются при открытии соединения с БД https://github.com/go-park-mail-ru/2024_2_NovaCode/blob/db_2/pkg/db/postgres/postgres.go.

Защита от SQL Injections
В приложении настроена валидация входных данных https://github.com/go-park-mail-ru/2024_2_NovaCode/blob/db_2/internal/models/user.go. Сначала проводятся проверки на длину и допустимость символов, далее санитайзинг с помощью BlueMonday. Функции, которые обращаются к базе данных и используют при этом внешние параметры (например, id), используют Prepared Context для экранирования символов. Query-запросы используют placeholder-ы, чтобы обработывать параметры отдельно от команд. Пример: https://github.com/go-park-mail-ru/2024_2_NovaCode/blob/db_2/microservices/user/repository/postgres/postgres.go.

Пул соединений и параметры соединений
Connection pull реализован за счетфреймворка database/sql https://github.com/go-park-mail-ru/2024_2_NovaCode/blob/db_2/pkg/db/postgres/postgres.go. В качестве параметра max_connection было выбрано дефолтное значение сто, так как на production сервере всего одно ядро ЦПУ, а значит, для него не нужно открывать больше 100 соединений. В качестве listen_addresses выбрано значение '*', так как к postgres микрсервисы подключаются через присвоенные docker-ом IP адреса во внутренней сети, в дальнейшем следует устанавливать соединения с IP production сервера.

Настройка параметров сервера и клиента
Все дополнительные настройки указаны в файле default.conf, который подключается в postgresql.conf https://github.com/go-park-mail-ru/2024_2_NovaCode/blob/db_2/internal/db/postgres/configuration/default.conf.
Таймауты
Так как для работы приложения не требуются очень тяжелые запросы, выбраны statement_timeout = 5s и lock_timeout = 3s. Также меньшие значения способствуют лучшей защите от DDoS атак.
Логгирование
Логи пишутся по пути /var/lib/postgresql/data/log (volume контейнера + папка log). Настроены pg_statement и auto_explain. Запросы попадают в логи, если они длятся больше 1000 ms. Auto_explain показывает подробный план запроса для инструкций, выполняющихся дольше 500 ms. Ротация логов выполняется каждый день и в названии содержат день недели, логи хранятся неделю, что реализовано за счет переписывания файла логов при наступлении того же дня недели, что уже был, то есть по просшествии недели. Для анализа статистики по логам в контейнер postgres при старте контейнера загружается pgBadger. Сгенерировать отчет можно, используя команду, прописанную в generate_pg_report.sh https://github.com/go-park-mail-ru/2024_2_NovaCode/blob/db_2/internal/db/postgres/pgbadger/generate_pg_report.sh. Она сгенерирует отчет по последнему файлу логов в контейнере postgres в папке pgbadger_report, хранящуюся рядом с логами, и перенесет отчет в папку reports рядом со скриптом.

.gitignore Outdated Show resolved Hide resolved
microservices/user/dto/dto.go Show resolved Hide resolved
microservices/user/delivery/http/handlers.go Show resolved Hide resolved
internal/models/user.go Show resolved Hide resolved
microservices/user/delivery/http/handlers.go Show resolved Hide resolved
if err != nil {
return nil, errors.Wrap(err, "GetAllByArtistID.Prepare")
}
defer stmt.Close()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А ошибку обработать

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants