Этот проект представляет собой простой пример реализации механизма управления флудом (Flood Control) с использованием Redis в качестве хранилища данных.
- Установите зависимости проекта:
go mod tidy
- Запускаем Redis:
redis-server
- Запустите приложение:
go run app/main.go -config=<config path>
Конфигурационный файл config/config_local.yaml
содержит параметры подключения к Redis и настройки управления. Пример конфигурации:
redis:
address: "localhost:6379"
password: ""
db: 0
floodControl:
requestLimit: 40
periodSeconds: 60
Redis был выбран в качестве хранилища данных для управления флудом по следующим причинам:
-
Высокая производительность: Redis обеспечивает быстрый доступ к данным благодаря хранению данных в памяти и использованию оптимизированных структур данных.
-
Поддержка структур данных для контроля флуда: В данном проекте используется структура данных Sorted Set для хранения временных меток запросов пользователя, что обеспечивает эффективную проверку количества запросов за определенный период времени.
-
Масштабируемость и отказоустойчивость: Redis поддерживает кластеризацию для масштабирования и обеспечения отказоустойчивости, что делает его подходящим выбором для высоконагруженных приложений.
Проект включает в себя как unit-тесты, так и интеграционные тесты для проверки функциональности управления флудом. Вы можете запустить тесты с помощью команды:
go test ./...
Изначально хотел написать что-то на redis, тут выпала такая возможность, ведь транзакции это круто. Прочитав про пакеты связанные с редисом, нашел и Sorted Set. Спасибо за таск, освоил что-то новое.
P.S. Не судите строго 0-0