Notizie / Giochi

Creazione di microservizi basati sulle prestazioni

In Roblox abbiamo abbracciato il paradigma dei microservizi e costruito una piattaforma di sviluppo basata su container. Il nostro team di crescita internazionale ha guidato questo sforzo implementando servizi che hanno abbracciato il nuovo approccio e introdotto nuove pratiche volte a un'elevata concorrenza e scalabilità. Ora stiamo esaminando come possiamo migliorare le nostre statistiche sulle prestazioni complessive e abbiamo visto risultati coerenti dopo alcune iterazioni.

Una volta che Roblox ha deciso di andare avanti con lo sviluppo di una piattaforma orientata ai microservizi e ai contenitori, sono state sollevate molte domande aperte su come:

  • Raggiungi la maturità con la piattaforma e segui la curva di apprendimento per arrivarci.
  • Reagisci allo "sconosciuto" (come frequenti aggiornamenti delle dipendenze, aggiornamenti degli strumenti e altre modifiche).
  • Semplifica e riscrivi le strategie, perché provenivamo da una base di codice monolitica che affrontava troppi problemi contemporaneamente.
  • Gestire l'incertezza della produzione e la disponibilità dell'infrastruttura.

Il nostro team di crescita internazionale è stata la punta di diamante ideale per trovare queste risposte. I nostri progetti stavano già esplorando territori inesplorati per rendere realtà Roblox nei paesi internazionali, come il supporto del quadro di conformità legale e delle normative sullo schermo. Allo stesso tempo, i nostri servizi attuali e futuri non avevano forti dipendenze con il resto della piattaforma. Pertanto, ci si aspettava esperienze pratiche con il nostro processo di sviluppo, dalla pianificazione all'esecuzione, al fine di raggiungere un nuovo livello di comprensione.

Affrontare l'"ignoto"

Dopo la pianificazione interstitial e gli incontri con il team della piattaforma di microservizi (MSP), ci siamo subito resi conto che era necessaria una nuova mentalità per pianificare l'"ignoto". Tale mentalità dovrebbe affrontare tutte le preoccupazioni di cui sopra mentre guida i progressi con ogni sprint.

Con il progredire dello sviluppo del software, abbiamo deciso di investire nella comprensione di tutti i livelli, dal codice al cluster dell'infrastruttura, con questo approccio di sviluppo basato sulle prestazioni. Analogamente allo sviluppo basato sui test, non stavamo solo cercando di superare i casi di test o di trovare difetti, ma anche di migliorare le prestazioni.

Tutte le preoccupazioni sono state mappate su metriche per monitorare frequentemente il successo e assegnare azioni attuabili da intraprendere per ogni sprint, per ogni risultato finale. Queste preoccupazioni sono emerse come opportunità per migliorare il nostro processo come segue:

https://blog.roblox.com/

Misura continuamente il successo

La creazione di prestazioni è il processo di osservazione, comprensione e correzione continua di ciò che sta accadendo a tutti i livelli (codice, contenitore e cluster) per ottenere un funzionamento ottimale attraverso l'iterazione.

All'inizio dello sviluppo del nostro primo microservizio, abbiamo identificato che disporre di un framework di test di carico era essenziale per misurare il successo. A tal fine, abbiamo impostato un progetto utilizzando Gatling per modellare simulazioni di base. Abbiamo anche scoperto che la raccolta delle metriche QA per build potrebbe essere semplificata utilizzando Sonarqube.

Dopo alcune iterazioni, queste idee sono diventate un framework containerizzato più coeso in grado di simulare migliaia di richieste e produrre dashboard in tempo reale durante build e test. Altri strumenti sono entrati nell'equazione per semplificare il monitoraggio delle prestazioni. Oggi abbiamo i mezzi per acquisire dashboard da più fonti e creare un report per ogni caratterizzazione, test di carico o evento significativo. Questi sono solo alcuni esempi di come l'iterazione continua con la mentalità delle "prestazioni edilizie" abbia già prodotto risultati.

Quando l'"ignoto" diventa familiare

L'esecuzione continua di profiling, caratterizzazione e test di carico dopo più sprint ha dato i suoi frutti. Abbiamo riscontrato diversi problemi su livelli diversi. Alcuni di essi erano facili da risolvere, come le ottimizzazioni dei log. Altri erano meno semplici, come l'ottimizzazione del server e la gestione della connessione. Ogni punto dolente o miglioramento che affrontiamo migliora almeno una metrica; o riducendo il tempo medio di risposta o effettuando più richieste con le stesse risorse.

La nostra fiducia è cresciuta dopo che il primo servizio ha raggiunto un gran numero di traffico in produzione. La nostra velocità è notevolmente migliorata sprint dopo sprint man mano che arrivano nuovi servizi o migliorano quelli esistenti. C'è ancora spazio per miglioramenti, ma i primi miglioramenti sono stati evidenti dopo solo pochi mesi.

https://blog.roblox.com/

Anche la creazione di conoscenze è importante e la distribuzione della funzionalità di più servizi a diversi ingegneri ha mostrato buoni risultati. Ha portato valore non solo per la condivisione tribale, ma anche perché ogni volta che rivisitiamo la performance, emergono nuove idee.

Come fare delle prestazioni una priorità

La cattura dei problemi di prestazioni come parte del ciclo di sviluppo si è rivelata fondamentale per il futuro del nostro team e della nostra attività. Le modifiche che abbiamo apportato al nostro processo agile e alle pratiche di sviluppo sono piccole rispetto ai vantaggi che abbiamo riscontrato. È naturale come qualsiasi altro approccio di sviluppo tradizionale basato su test, ma con il vantaggio di una migliore prevedibilità della scalabilità e dell'utilizzo delle risorse.

Parte del lavoro che abbiamo svolto è ancora semiautomatico, ma il futuro è roseo. Il nostro piano è abbracciare l'automazione completa dei processi e integrarla nella nostra pipeline CI/CD. La nuova piattaforma sta iniziando ad adottare alcune di queste pratiche e molto presto tutti i team di backend trarranno vantaggio dagli strumenti che abbiamo creato.

Il più grande vantaggio è che investire in una mentalità di sviluppo orientata alle prestazioni ci ha portato nel posto giusto con molte opportunità aggiuntive. Avere i mezzi per monitorare le prestazioni a portata di mano contribuisce notevolmente alla maturità della nostra nuova piattaforma. L'uso di contenitori per servizi e strumenti aggiunge un modo coerente per standardizzare questa metodologia e replicarla ovunque.

Rendere le prestazioni parte della tua vita quotidiana è la chiave per il futuro di qualsiasi servizio altamente scalabile.


Né Roblox Corporation né questo blog avallano o supportano alcuna azienda o servizio. Inoltre, non viene fornita alcuna garanzia o promessa in merito all'accuratezza, affidabilità o completezza delle informazioni contenute in questo blog.

Questo post del blog è apparso originariamente sul blog Roblox Tech.