GH GambleHub

Ізоляція тенантів і ліміти

Ізоляція тенантів і ліміти - це фундамент мульти-тенантної архітектури. Мета: щоб дії одного орендаря ніколи не впливали на дані, безпеку і SLO іншого, а ресурси розподілялися справедливо і передбачувано. Нижче - практична карта рішень від рівня даних до планування обчислень і інцидент-менеджменту.

1) Модель загроз і цілі

Загрози

Витік даних між орендарями (логічна/по кешу/через логи).
«Noisy neighbor»: деградація продуктивності через сплески в одного клієнта.
Ескалація привілеїв (помилка в політиці доступу).
Білінг-дрифт (невідповідність використання та нарахувань).
Каскадні відмовостійкі сценарії (інцидент одного призводить до даунтайму багатьох).

Цілі

Сувора ізоляція даних і секретів.
Пертенантні ліміти/квоти і справедливе планування.
Прозорий аудит, спостережуваність і білінг.
Локалізація інцидентів і швидке відновлення per tenant.

2) Рівні ізоляції (наскрізна модель)

1. Дані

'tenant _ id'в ключах і індексах, Row-Level Security (RLS).
Шифрування: ієрархія KMS → ключ орендаря (KEK) → ключі даних (DEK).
Роздільні схеми/БД при високих вимогах (Silo), загальний кластер c RLS для ефективності (Pool).
Політики ретеншну і «право на забування» per tenant, crypto-shredding ключів.

2. Обчислення

Квоти CPU/RAM/IO, пули воркерів на тенанта, «зважені» черги.
Ізоляція GC/heap (контейнери/налаштування JVM/Runtime), ліміти на parallelism.
Пер-тенантний autoscaling + backpressure.

3. Мережа

Сегментація: private endpoints/VPC, ACL по `tenant_id`.
Rate limiting і per-tenant connection caps на кордоні.
Захист від DDoS/ботів з урахуванням плану/пріоритету.

4. Операції та процеси

Поарендаторні міграції, бекапи, DR, feature-flags.
Інциденти - «мікро-бласт-радіус»: ф'юзинг по'tenant _ id'.

3) Контроль доступу та контекст орендаря

AuthN: OIDC/SAML; токени несуть'tenant _ id','org _ id','plan','scopes'.
AuthZ: RBAC/ABAC (ролі + атрибути проекту, відділу, регіону).
Контекст на кордоні: API-шлюз витягує і валідує контекст тенанта, доповнює лімітами/квотами, пише в трейси.
Принцип «подвійного замку»: перевірка в сервісі + RLS/політики БД.

4) Дані: схеми, кеш, логи

Схеми:
  • Shared-schema (row-level): максимум ефективності, строгий RLS обов'язковий.
  • Per-schema: компроміс ізоляції/операбельності.
  • Per-DB/cluster (Silo): для VIP/регульованих.

Кеш: префікси ключів'tenant:{id}:...', TTL за планами, захист від cache-stampede (lock/early refresh).

Логи/метадані: повна псевдонімізація PII, фільтри по'tenant _ id', заборона «склеювання» логів різних орендарів.

5) Лімітування трафіку та операцій

Базові механіки

Token Bucket: згладжені сплески, параметризація «rate »/« burst».
Leaky Bucket: стабілізація throughput.
Fixed Window / Sliding Window: прості/точні квоти за вікном часу.
Concurrency limits: caps на одночасні запити/джоби.

Де застосовувати

На кордоні (L7/API-шлюз) - основний захист і «швидка відмова».
У серцевині (в сервісах/чергах) - для другого контуру і «fair share».

Політики

За тенантом/планом/ендпойнтом/типом операції (публічні API, важкі експорти, адмін-дії).
Priority-aware: VIP отримує більший'burst'і вагу при арбітражі.
Idempotency-keys для безпечних ретраїв.

Приклад профілів (поняття)

Starter: 50 req/s, burst 100, 2 паралельних експорту.
Business: 200 req/s, burst 400, 5 експортів.
Enterprise/VIP: 1000 req/s, burst 2000, виділені воркери.

6) Квоти і справедливе планування (fairness)

Квоти за ресурсами: сховище, об'єкти, повідомлення/хв, завдання/год, розмір черг.
Weighted Fair Queuing / Deficit Round Robin: «зважений» доступ до загальних воркерів.
Per-tenant worker pools: жорстка ізоляція для галасливих/критичних клієнтів.
Admission control: відмова/деградація до виконання, коли квоти вичерпані.
Backoff + jitter: експоненціальні затримки, щоб не синхронізувати сплески.

7) Спостережуваність і білінг per tenant

Обов'язкові теги: `tenant_id`, `plan`, `region`, `endpoint`, `status`.
SLI/SLO per tenant: p95/p99 latency, error rate, availability, utilization, saturation.
Usage-метрики: лічильники за операціями/байтами/секундами CPU → агрегатор → інвойси.
Ідемпотентність білінгу: снапшоти на кордоні, захист від подвійних списань/втрати подій.
Дашборди сегментами: VIP/регульовані/нові орендарі.

8) Інциденти, деградація і DR «по орендарях»

Ф'юзинг по'tenant _ id': аварійне відключення/троттлінг конкретного орендаря без впливу на інших.
Graceful Degradation: read-only режим, черги в «пісочницю», відкладені завдання.
RTO/RPO per tenant: цільові значення відновлення і втрат для кожного плану.
Навчання: регулярні «game days» з відключенням галасливого орендаря і перевіркою DR.

9) Відповідність вимогам (residency, приватність)

Пінning тенанта до регіону; чіткі правила крос-регіональних потоків.
Аудит доступу до ключів/даних, журналювання адмін-операцій.
Управління ретеншном і експортом даних per tenant.

10) Міні-референс: Як зібрати разом

Потік запиту

1. Edge (API-шлюз): TLS → витягти'tenant _ id'→ валідація токена → застосувати rate/quotas → проставити трейси.
2. Полісі-движок: контекст'tenant _ id/plan/features'→ рішення про маршрут і ліміти.
3. Сервіс: перевірка прав + мітки'tenant _ id'→ робота з БД під RLS → кеш з префіксом.
4. Usage-збір: лічильники операцій/байтів → агрегатор → білінг.

Дані

Схема/БД по стратегії (row-level/per-schema/per-DB).
KMS: ключі на орендаря, ротація, crypto-shredding при видаленні.

Обчислення

Черги з вагами, пули воркерів per tenant, caps по concurrency.
Autoscaling по пертенантним метрикам.

11) Псевдо-політики (для орієнтації)

yaml limits:
starter:
req_per_sec: 50 burst: 100 concurrency: 20 exports_parallel: 2 business:
req_per_sec: 200 burst: 400 concurrency: 100 exports_parallel: 5 enterprise:
req_per_sec: 1000 burst: 2000 concurrency: 500 exports_parallel: 20

quotas:
objects_max: { starter: 1_000_000, business: 20_000_000, enterprise: 100_000_000 }
storage_gb: { starter: 100,   business: 1000,    enterprise: 10000 }

12) Чек-лист перед продом

  • Єдине джерело істини'tenant _ id'; скрізь прокидається і логується.
  • Включений RLS/ACL на рівні БД + сервісна перевірка (подвійний замок).
  • Ключі шифрування per tenant, документована ротація/видалення (crypto-shredding).
  • Ліміти/квоти на кордоні і всередині; протестовані сплески і «burst».
  • Fair-queuing і/або виділені воркери для VIP; caps на concurrency.
  • Пер-тенантні SLO і алерти; дашборди за сегментами.
  • Usage-збір ідемпотентний; зведення з білінгом перевірено.
  • DR/інциденти локалізуються до орендаря; ф'юзинг по'tenant _ id'відпрацьовує.
  • Кеш/логи розділені по орендарях; PII маскована.
  • Процедури міграцій/бекапів/експорту - поарендаторні.

13) Типові помилки

RLS відключений/обійдений «службовим» користувачем - ризик витоку.
Єдиний глобальний лімітер → «noisy neighbor» і порушення SLO.
Загальні кеші/черги без префіксів → перетин даних.
Білінг рахує за логами, які губляться при піках.
Відсутність поарендаторного ф'юзингу - каскадні падіння.
Міграції «одним махом» без можливості стопнути проблемний'tenant _ id'.

14) Швидкий вибір стратегії

Регульовані/VIP: Silo-дані (per-DB), виділені воркери, строгі квоти і residency.
Масовий SaaS: Shared-schema + RLS, сильні ліміти на кордоні, fair-queuing всередині.
Навантаження «шумне/пульсуюче»: великі'burst'+ жорсткі concurrency-caps, backpressure і пріоритети за планами.

Висновок

Ізоляція тенантів і ліміти - це про межі і справедливість. Чіткий'tenant _ id'крізь стек, RLS і шифрування на даних, лімітування і квоти на кордоні і в серцевині, справедливий планувальник, спостережуваність і локалізація інцидентів - все це разом дає безпеку, передбачувану якість і прозорий білінг для кожного орендаря, навіть при агресивному зростанні платформи.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.