NetLocker
Распределенный механизм блокировки для координации между сервисами
NetLocker
NetLocker — это распределенный механизм блокировки, который обеспечивает координацию между сервисами в распределенной системе. Он позволяет приложениям реализовывать взаимное исключение доступа к ресурсам между несколькими экземплярами, предотвращая race condition и обеспечивая согласованность данных.
#Особенности
- Простота использования — Минималистичный API для быстрой интеграции
- Распределенные блокировки — Поддержка блокировок в распределенной среде
- Несколько бэкендов — Реализации для памяти и Redis с возможностью расширения
- Механизм двойной проверки — Защита от race condition при высокой нагрузке
- Поддержка таймаутов — Настраиваемые таймауты для предотвращения взаимных блокировок
#Начало работы
NetLocker предлагает две основные реализации хранилища блокировок:
- Memory — для однонодовых приложений и сред разработки
- Redis — для распределенных систем, требующих согласованности между узлами
#Установка
#Установка через Docker
NetLocker также доступен как Docker-образ в реестре контейнеров GitLab:
# Загрузка последней версии образа
docker pull registry.gitlab.com/devpro_studio/netlocker:latest
# Запуск контейнера с указанием конфигурационного файла
docker run -d \
--name netlocker \
-v /path/to/your/cfg.yaml:/app/cfg.yaml \
-p 8080:8080 \
-p 9090:9090 \
registry.gitlab.com/devpro_studio/netlocker:latest
При запуске через Docker вы можете предоставить конфигурационный файл, монтируя его в контейнер. Пример конфигурационного файла:
engine:
- type: metrics
name: prometheus
service_name: NetLocker
port: 8090
- type: logger
name: std
level: INFO
enable: true
- type: cache
name: primary
hosts: localhost:6379
- type: server
name: grpc
port: 8080
- type: server
name: http
port: 8080
- type: service
name: lock
shard_count: 5
- type: repository
name: lock
enable_double_check: true
time_check: 1s
cfg:
cache_type: redis
#Основные сценарии использования
- Взаимное исключение — обеспечение безопасного доступа к общим ресурсам
- Выбор лидера — реализация механизма выбора лидера в кластере
- Распределенные критические секции — синхронизация доступа к критическим секциям
#Документация
#Варианты взаимодействия
NetLocker может быть использован как отдельный сервис с доступом по HTTP или gRPC API. Вариант работы выбирается через конфигурацию приложения (cfg.yaml).
Возможно включение отслеживания метрик, трейсов и логов во внешние системы, более подробно в разделе конфигурация.
- HTTP API — REST-интерфейс для получения и освобождения блокировок через HTTP-запросы.
- gRPC API — высокопроизводительный бинарный интерфейс для интеграции с другими сервисами.
Примечание: HTTP и/или gRPC серверы запускаются только если они включены в конфигурации. Можно использовать оба варианта одновременно или только один из них.