Un piccolo VPS come flotta di server di gioco
Tutti i nostri mondi online (il portale, i Mondi ufficiali, i mondi creati dai giocatori) girano su un unico server Linux in affitto (VPS). Niente data center, niente bolletta cloud a cinque cifre. In questo articolo mostro come è configurato il server e che cosa abbiamo imparato lungo la strada.
Prima il rafforzamento. Prima che il gioco potesse salire sul server, è venuta la sicurezza di base: un firewall (ufw) che apre solo le porte necessarie, fail2ban contro i tentativi di accesso automatici e SSH solo con chiavi. Caddy fa da reverse proxy nella sua variante Docker: recupera automaticamente i certificati TLS e instrada le richieste verso i container giusti.
Ogni mondo ha il suo container. Il gioco gira come immagine Docker e ogni mondo ottiene il proprio container con limiti fissi: 768 MB di RAM e 2 core di CPU per mondo, al massimo dieci mondi attivi alla volta. In questo modo un singolo mondo non può mai far cadere l'intero server.
Un monitoraggio che ci chiama. Netdata tiene d'occhio il server con oltre 140 allarmi, da «disco che si riempie» a «portale che non risponde». Se qualcosa scatta, una notifica push arriva sul telefono (tramite ntfy). Così veniamo a sapere dei problemi prima dei giocatori.
La scoperta più sorprendente: quando abbiamo misurato a riposo, circa metà della memoria usata non andava affatto al gioco, ma a Docker e al monitoraggio stesso. L'infrastruttura che sostiene il gioco, a riposo, è più pesante del gioco. Un buon promemoria: bisogna misurare invece di tirare a indovinare.
Il verdetto dopo qualche mese di esercizio: un piccolo server, rafforzato come si deve, regge benissimo un gioco multiplayer indie, se si impostano dei limiti e si tiene tutto sotto controllo.
Commenti