NetLocker

Распределенный механизм блокировки для координации между сервисами

NetLocker

NetLocker

NetLocker — это распределенный механизм блокировки, который обеспечивает координацию между сервисами в распределенной системе. Он позволяет приложениям реализовывать взаимное исключение доступа к ресурсам между несколькими экземплярами, предотвращая race condition и обеспечивая согласованность данных.

#Особенности

  • Простота использования — Минималистичный API для быстрой интеграции
  • Распределенные блокировки — Поддержка блокировок в распределенной среде
  • Несколько бэкендов — Реализации для памяти и Redis с возможностью расширения
  • Механизм двойной проверки — Защита от race condition при высокой нагрузке
  • Поддержка таймаутов — Настраиваемые таймауты для предотвращения взаимных блокировок

#Начало работы

NetLocker предлагает две основные реализации хранилища блокировок:

  1. Memory — для однонодовых приложений и сред разработки
  2. 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 серверы запускаются только если они включены в конфигурации. Можно использовать оба варианта одновременно или только один из них.