L’infrastruttura di Playatomic, come scala con NodeJS

Playatomic è un servizio di analytics per giochi implementato in circa 8000 giochi online che in totale raggiungono circa 20 milioni di persone al giorno

Playatomic è un servizio di analytics di giochi implementato in circa 8000 giochi mobile, web e scaricabili che in totale raggiungono circa 20 milioni di persone al giorno. Il CEO della compagnia Ben Lowry ha rilasciato un’intervista ad Hacker News in cui dichiara:

“Ieri oltre 20.000.000 di persone hanno utilizzato le nostre API 700.749.252 volte, mentre giocavano a circa 8.000 giochi ai quali la nostra piattaforma di analytics è integrata. Questo solo ieri, e ci sono diversi colli di bottiglia che limitano ancora la nostra capacità di scalare. Heroku e NodeJS nel nostro caso di utilizzo hanno infine alleviato in parte il problema di dover scalare velocemente ed economicamente”.

Playatomic ha iniziato con un’architettura basata quasi esclusivamente su Microsoft.NET e Windows, che è stata mantenuta tale per tre anni prima di essere sostituita con una riscrittura completa usando NodeJS. Durante il suo tempo di vita l’intera piattaforma è cresciuta da uno spazio condiviso su un unico server ad uno completamente dedicato, poi si è estesa ad un secondo dedicato, poi il server API è stato offloadato ad un provider VPS ed a 4-6 VPS molto grandi. Il server API è stato sostituito da 8 server dedicati di Hivelocity, di cui ognuno è un quadcore con hyperthreading + 8 gigabyte di RAM + dischi da 500 GB con in esecuzione 3 o 4 istanze dello stack API. Questi server servivano mediamente dai 30.000 ai 60.000 utenti giocatori in contemporanea e ricevevano fino a 1500 richieste al secondo, con load balancing eseguito tramite DNS Round Robin. A luglio la svolta, l’intera flotta di server è stata sostituita riscrivendo con NodeJS su Heroku, portando la compagnia a risparmiare molto rispetto all’architettura precedente.

Come scala PlayAtomic con NodeJS

La migrazione è stata divisa in due parti diverse:

1. Dedicata alla PaaS: i vantaggi includono il prezzo, la convenienza, lo sfruttamento del loro load balancing e la riduzione della complessità totale. Gli svantaggi includono New Relic per NodeJS, e crash non proprio eleganti;

2. Da .NET a NodeJS: un’architettura di transizione per passare da ASP.NET/C# con istanze locali mongoDB  ed un servizio di pre-elaborazione di dati locali inviandoli ad un server centralizzato, verso NodeJS su Heroku + Redis con pre-elaborazione su SoftLayer (vedi programma Catalyst).

La riduzione di complessità risultante da questo spostamento è notevole, la compagnia aveva 8 server dedicati ognuno che esegue 3 o 4 istanze delle API presso il partner della compagnia Hivelocity. Ognuno eseguiva una piccola suite di software al cui interno troviamo:

– Istanza MongoDB;

– Servizio di pre-elaborazione del log;

– Servizio di monitoraggio;

– IIS con siti API.

“Il deploy è stato fatto con uno script FTP che ha caricato le nuove versioni dell’API site su tutti i server. I vantaggi dei provider PaaS sono abbastanza conosciuti, sembrano tutti abbastanza simili sebbene sia più semplice avere confidenza con Heroku e Salesforce in quanto queste due piattaforme sembrano più mature ed hanno un buon supporto tecnologico”. 

Ci sono due aspetti importanti che fanno di NodeJS uno strumento fondamentale per le API di Playatomic:

1. Persistente, connessioni condivise con Redis e MongoDB;

2. Background workers nello stesso thread e memoria del web server.

NodeJS ha la particolarità molto utile di continuare a lavorare indipendentemente dalle richieste, consentendo di fare prefetch dei dati ed altre operazioni che vi consentono di terminare una richiesta molto presto e poi finire di elaborarla. E’ stato particolarmente utile per Playatomic replicare l’intera collezione di MongoDB in memoria, aggiornandola periodicamente, in modo che intere classi di lavoro abbiano accesso ai dati attuali senza dover andare in un database esterno o in uno strato di caching locale / condiviso. Playatomic ha risparmiato collettivamente tra le 100 e le 1000 query di database al secondo usando questo in:

– dati di configurazione dei giochi sull’API principale;

– credenziali API sulle API di esportazione dei dati;

GameVars che gli sviluppatori usano per archiviare la configurazione o altri dati dei giochi;

– tabelle punti Leaderboard.

 

заказать статью в журналезаказ текстов для рэпавзлом rambler почтыformhack взлом друг вокругкредит на открытие бизнеса с нуля сбербанкrocks hotel casinoskykings casinoонлайн заявка на кредитную карту банка восточныйкилиманджаро тур лемошопарки африкисафари тур танзани¤информаци¤ о восхождении на килиманджартанзани¤ килиманджаро маршрут мачамеserm ценытвой дом на каширке каталог товаровтуры австрия словакияинтернет магазин bitrixэлитный дизайн ваннойкалининград дом купитьсредства защиты от электромагнитных излученийлучший пляжный отдых в маеюристы киевкупить буфет б уbinary insiderseo киев

Facci sapere cosa ne pensi!