01 / SERVER FLEET
One core, deployed across distinct game servers.
Every Paper instance identifies its region and server number, then loads the same modular core. Players can move between services while shared infrastructure keeps their network identity intact.
- Java 21 on Paper 1.21.3
- Region and instance-aware server identity
- BungeeCord channel for network travel
vise.network → EU-1 / NA-1 / D-2
02 / EVENT BUS
Redis turns separate servers into one social space.
Global chat is published as JSON to a shared Redis channel. Every other server receives the event asynchronously, rejects local echoes, sanitizes the payload, and renders it for its own players.
- Redis pub/sub on
chat:global - Five-second reconnect after connection loss
- Network work stays off the game thread
PUBLISH chat:global {server, uuid, message}
03 / PLAYER DATA
Fast state, shared state, durable truth.
A player event updates the in-process object first. Redis receives a self-expiring cache entry and atomic leaderboard score. MariaDB receives the authoritative profile and statistics through a pooled, prepared upsert.
- 72-hour Redis profile and stat caches
- Sorted-set leaderboards trimmed to the top 100
- HikariCP pool with prepared SQL over TLS
memory → SETEX / ZADD → SQL UPSERT
04 / OBSERVABILITY
The fleet reports its own health every five seconds.
Each instance samples TPS, players, worlds, chunks, JVM memory, threads, garbage collection, uptime, OS, and architecture. The latest snapshot powers quick checks while a Redis stream preserves roughly 24 hours of history.
- Latest health stored as a Redis hash
- 17,280 samples retained per server
- Online status requires a ping newer than ten seconds
server:<name>:health:latest + :stream
05 / RELIABILITY
Failures are expected, contained, and recoverable.
Redis operations are retried before being marked unhealthy. Subscribers reconnect. Database connections are pooled. Scheduled restarts warn players before a clean shutdown, and module teardown closes listeners and storage clients deliberately.
- Three Redis attempts with five-second recovery delay
- Default 24-hour controlled restart cycle
- Graceful unsubscribe and connection cleanup
detect → retry → recover → report
06 / SERVICE BOUNDARY
Integrations receive capabilities, not database access.
Game features and external services meet the core at a controlled boundary. Tier data is fetched in parallel, Discord linking uses a five-minute one-time challenge, and tournament operations stay behind validated commands.
- Parallel tier-provider requests
- Six-digit Redis challenge with a 300-second TTL
- Only verified identity links become durable records
approved client → Vise Core → private storage