Case 12. Multi-tenant Data Platform¶
Практикум · Связанная теория · Редакционный стандарт
Тип материала — практический архитектурный кейс. HYPOTHETICAL — все численные параметры, сценарий и схемы. INFERENCE — выбор и критерии. UNKNOWN — фактическая производительность и параметры, которые предстоит согласовать.
1. Business problem¶
Обслуживать клиентов общей платформы с предсказуемой изоляцией данных, затрат и восстановления.
2. Functional requirements¶
Управлять tenant identity, quotas, routing, access, billing tags, export, retention и deletion. Предоставлять observable tenant-level SLO.
3. Non-functional requirements¶
Измерять headroom по пулу и по tenant. Выделять security boundary и noisy-neighbor budgets. Restore и replay одного клиента имеют ограниченный scope.
4. Assumptions и вопросы заказчику¶
Assumption — 60 tenants, крупнейший даёт 35% среднего ingress. Спросить isolation tier, legal residency, key ownership, burst quota, per-tenant restore, deletion и общие metadata.
5. Оценка нагрузки и объёма данных¶
HYPOTHETICAL. Средняя скорость 12000 events/s, пик 24000 events/s, payload mean/p95/p99 1100/2400/5000 B. Перцентили заданы отдельно для тестового профиля, среднее используется для объёма. Суточный профиль упрощён до постоянного среднего, накладные расходы протокола, индексов и WAL исключены.
| Метрика | Формула и подстановка | Результат |
|---|---|---|
| Объём событий | 12000 × 86 400 | 1036800000 событий/сутки |
| Сырые данные | 1036800000 × 1100 B | 1140.48 GB/сутки |
| Retention без сжатия | 1140.48 GB × 14 суток | 15966.72 GB |
| Broker copies при RF=3 | 15966.72 GB × 3 | 47900.16 GB, из них 31933.44 GB дополнительные копии |
| Producer bandwidth, среднее | 12000 × 1100 × 8 / 10⁶ | 105.6 Mbit/s |
| Producer bandwidth, пик | 24000 × 1100 × 8 / 10⁶ | 211.2 Mbit/s |
| Partitions при 30% headroom | max(ceil(24000 × 1,3 / 1 500), ceil(24000 × 1100 × 1,3 / 1 800 000)) | 21 partitions |
| Consumer parallelism | ceil(24000 × 1,3 / 1 500) | 21 workers на группу при принятой производительности |
| Backfill одних суток при 3× средней capacity и живом среднем потоке | (12000 × 86 400) / (3 × 12000 − 12000) | 43 200 с = 12 ч |
GB и Mbit здесь десятичные. 1 500 events/s на partition/worker и 1,8 MB/s на partition — допущения теста. Для варианта без брокера строки RF/partitions относятся к альтернативному потоку или downstream outbox. RF не моделирует egress каждого consumer: добавьте по одной копии трафика на активную группу и репликационный трафик до RF−1 дополнительных копий. Пересчитайте отдельно при catch-up на пике, skew и p99 payload. Если capacity ≤ live rate, конечного времени восстановления нет.
Крупный tenant условно 0,35 × 12 000 = 4 200 events/s, при двукратном пике 8 400/s. При mean 1 100 B это 73,92 Mbit/s payload в пике. Shared cost allocation по byte-days, scanned GB, compute seconds и reserved capacity.
6. Варианты архитектуры¶
A — shared broker/compute/storage с tenant-aware routing и ACL. B — dedicated stacks для high-isolation tenants. C — shared control plane с выделенными pools по tiers.
7. Сравнение вариантов и выбор¶
Выбрать C с явными promotion criteria. A экономичен на малых workloads. B упрощает blast radius и isolation evidence ценой выделенной инфраструктуры и drift.
8. Component / data-flow¶
Иллюстративная схема выбранного варианта.
flowchart LR
A["Tenant ingress"] --> B["Quota and identity guard"]
B --> C["Partitioned processing and storage"]
C --> D["Scoped consumers and billing"]
9. Normal processing sequence¶
sequenceDiagram
participant A as Tenant ingress
participant B as Quota and identity guard
participant C as Partitioned processing and storage
participant D as Scoped consumers and billing
A->>B: Send identified input
B->>C: Authorize tenant and commit isolated chunk
C-->>B: Return tenant generation and usage evidence
B->>D: Advance only with durable evidence
Получить trusted tenant ID из auth context, проверить quota, направить в partition/pool, записать scoped generation и usage facts. Reader проверяет tenant scope независимо от маршрута.
10. Failure / recovery sequence¶
sequenceDiagram
participant B as Quota and identity guard
participant C as Partitioned processing and storage
participant O as Recovery owner
B->>C: Attempt write or advance
Note over B,C: Hot tenant consumes shared capacity
O->>C: Throttle tenant and rebuild scoped data
C-->>O: Durable outcome or explicit gap
При burst throttling применяется per tenant. Rebuild использует исходный tenant cut и scoped credentials. При подозрении на утечку остановить доступ в affected scope и провести evidence review. Deletion replay проверяет tombstone/version guard.
11. Data model и contracts¶
tenant_id включён в auth context, identity keys, partition manifests и usage facts. Storage keys и catalog привязаны к tenant. Deletion request имеет scope, disposition и evidence.
12. Consistency boundaries¶
Quota reservation и work acceptance согласованы в одном guard или bounded token protocol. Consumer view не заменяет tenant authorization. Cross-tenant publication блокируется policy.
13. Scaling и capacity planning¶
Использовать weighted fair scheduling, separate queues и per-tenant retry budget. Partition key tenant + bounded hash, если нет требования полного порядка по tenant. Dedicated pool для hot tier.
14. Observability¶
Per-tenant lag, quotas, throttled bytes, saturation, restore age, usage cost, access denies и cross-tenant anomaly. Ограничивать cardinality labels.
15. Data Quality и reconciliation¶
Сверять keysets и billable usage с независимым evidence. Deletion проверять по raw, views, archives, backups и catalog policy. Отдельно фиксировать legal hold.
16. Security и compliance¶
Tenant-aware ACL и storage policies, секреты по namespace, encryption, rotation и проверка обходных путей. Cache keys и log redaction защищают shared plane.
17. Implementation roadmap¶
Внедрить trusted identity, quotas и evidence. Затем noisy-neighbor rehearsal, dedicated tier, tenant restore и deletion drills.
18. Testing и acceptance criteria¶
Подать mismatched tenant ID, hot traffic, replay чужого scope, stale deletion и burst. Acceptance — нулевая видимость чужих данных в тестовом наборе, измеренная изоляция и подтверждённая usage сверка.
19. Trade-offs и ограничения¶
Shared инфраструктура эффективна при умеренном skew. Dedicated pools требуют автоматизации эксплуатации. Квоты могут отклонять legitimate bursts, поэтому нужны fairness и approved overrides.
20. Interview questions¶
Достаточно ли tenant_id в SQL WHERE? Проверки должны покрывать storage, cache, catalog и export. Как справедливо распределить общую стоимость? Разделить measured usage и reserved capacity с явной policy для общих расходов.
Первичные источники¶
Проверка источников: 2026-11-03. Документация описывает свойства компонентов. Результаты испытаний выбранной системы требуют отдельного evidence.