# Один узел, состояние маскирования/демаскирования — в памяти самого процесса # (pdguard.store.backend=memory, дефолт). Redis был нужен только чтобы разделить # состояние между несколькими репликами; кластерная схема на 4-vCPU хосте под # нагрузкой давала конкуренцию за CPU (см. историю в git) — один узел проще и # получает весь хост целиком. services: pd-guard: image: pd-guard-spring:jvm ports: - "8080:8080" deploy: resources: limits: cpus: "4" memory: 6g environment: # Дефолт JVM — 25% контейнерного лимита на heap. JAVA_OPTS: >- -Dspring.config.additional-location=optional:file:/deployments/config/ -XX:MaxRAMPercentage=75.0 PDGUARD_MAX_CONCURRENT: "2000" # На 1 vCPU дефолт 200мс держал concurrency у пола; на 4 vCPU запас есть, # но 800мс оставлено с той же осторожностью — целевая latency контракта 1с. PDGUARD_TARGET_LATENCY_MS: "800" PDGUARD_WARMUP_ITERATIONS: "2000" # Вторая ступень распознавания — две модели под разные задачи (см. # NameCascade.java): WikiNEuRal размечает имена, ruBERT — составляющие # адреса. Модели в репозиторий не входят: ./tools/fetch-ner-model.sh. PDGUARD_NER_NAME_ENGINE: wikineural PDGUARD_NER_NAME_MODEL: /deployments/models/wikineural-ner PDGUARD_NER_ADDRESS_ENGINE: rubert PDGUARD_NER_ADDRESS_MODEL: /deployments/models/rubert-ner # Третья ступень (юридические реквизиты, LLAIM Legal NER) временно выключена # для нагрузочного теста — проверяем, она ли основной источник CPU-затрат # на 1-vCPU лимите. Включить: PDGUARD_NER_LEGAL_ENGINE=ru-legal-ner. PDGUARD_NER_LEGAL_ENGINE: "off" volumes: - ./config:/deployments/config:ro - ./models:/deployments/models:ro healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"] interval: 10s timeout: 2s retries: 3 prometheus: image: prom/prometheus:v2.55.1 volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro ports: - "9090:9090" grafana: image: grafana/grafana:11.3.0 depends_on: - prometheus ports: - "3000:3000" environment: GF_AUTH_ANONYMOUS_ENABLED: "true" GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer volumes: - ./monitoring/grafana/provisioning:/etc/grafana/provisioning:ro - ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards:ro