mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
40 lines
3.2 KiB
Markdown
40 lines
3.2 KiB
Markdown
# Matchmaking launch SLOs
|
|
|
|
These are the measurable release gates for the Phase 8 control plane. All
|
|
latency measurements use server-side monotonic timestamps and are labelled by
|
|
region, playlist, build, transport and warm/cold capacity. A request or match
|
|
is counted only after the corresponding terminal event is durably recorded.
|
|
|
|
| SLO | Metric and denominator | Window / target | Owner | Alert threshold |
|
|
| --- | --- | --- | --- | --- |
|
|
| Placement eligibility | `max(predicted_rtt_ms)` across all accepted players in a candidate | Every candidate; `<=100 ms` | Matcher | Any eligible candidate over 100 ms pages immediately and is rejected |
|
|
| Regional observed RTT | p95 of server-observed handshake/game RTT for connected assigned players | Rolling 1 h, per region; `<=80 ms` | Game-server + networking | 15 min above 80 ms, or any region p95 above 100 ms for 5 min |
|
|
| Acceptance → assignment-ready | `assignment_ready - unanimous_accept` for accepted proposals with warm capacity | Rolling 1 h; p95 `<=5 s`, p99 `<=10 s` | Allocator | p95 >5 s for 10 min or p99 >10 s for 5 min |
|
|
| Assignment → successful connection | `connected - assignment_published` for assignments not cancelled by policy | Rolling 1 h; p95 `<=5 s` | Game-server lifecycle | p95 >5 s for 10 min or connection success <99% for 5 min |
|
|
| Allocation + durable result | completed matches with both successful allocation and durable result / matches requiring allocation | Rolling 24 h; `>=99.9%` | Allocator + maintenance | <99.95% warning; <99.9% pages and blocks release |
|
|
| Server tick health | Physics ticks completed without backlog / expected physics ticks; resource headroom is measured independently | Every live match; zero backlog and `>=30%` CPU/RSS headroom | Game-server | Any sustained backlog, or headroom <30% for 5 min |
|
|
| Control-plane API | p95 request latency for non-streaming authenticated API requests, excluding client cancellation | Rolling 5 min, by route; `<=250 ms` | API | p95 >250 ms for 5 min or 5xx >1% |
|
|
|
|
## Measurement rules
|
|
|
|
- Do not combine EU and NA into one percentile; a healthy region must not hide
|
|
an unhealthy one.
|
|
- Exclude explicitly rejected requests from success denominators, but count
|
|
accepted work that later expires, fails allocation, or loses result delivery.
|
|
- Preserve queue, proposal, match, server and request IDs on every metric and
|
|
trace. Never attach Steam auth tickets, SDR relay tickets, publisher keys or
|
|
other credentials to labels, logs or traces.
|
|
- Warm-capacity SLOs are evaluated only when the region has the declared Ready
|
|
floor. Cold-start and capacity-exhaustion outcomes are separate dashboards,
|
|
not silently removed from availability accounting.
|
|
- Alert thresholds page the owning role; the release gate is the stricter
|
|
target in the table, not the warning threshold.
|
|
|
|
## Release evidence
|
|
|
|
A release candidate must provide one complete 24-hour report, route-level API
|
|
histograms, regional RTT histograms, allocation/connection cohort counts,
|
|
tick-health samples, and an incident review for every SLO breach. Load and
|
|
chaos tests must retain the same event IDs so the report can distinguish
|
|
retryable control-plane delay, player no-show, and match-integrity failure.
|