Sfondo
Sto lavorando per migliorare il design del backend per un videogioco. Il gioco è vivo e funziona bene, ma vogliamo migliorare varie cose. Come studio di videogiochi, facciamo spesso eventi che a volte richiedono un po 'di complicazioni mentre l'evento è in diretta: ci piacerebbe essere in grado di apportare queste modifiche senza dover forzare un aggiornamento sui giocatori.
Problema
Il nostro back-end attuale utilizza vari valori codificati che utilizzano i nostri endpoint. Questo significa che se vogliamo cambiare il comportamento di un endpoint dobbiamo ridistribuire. Ad esempio, se decidiamo che un determinato elemento del negozio online deve puntare a qualcos'altro, è necessario modificare l'ID a cui fa riferimento l'endpoint. Questo è ingombrante e non ideale; vogliamo un modo più dinamico di cambiare le configurazioni.
L'idea generale che abbiamo è che memorizziamo queste proprietà in un file su S3 / a CDN e il client e il back-end le recuperano periodicamente. Ci sono problemi con questo approccio quando si tratta di garantire che sia il back-end sia il client utilizzino la stessa configurazione.
Soluzioni modificate per chiarezza
Soluzioni possibili
Soluzione A)
Crea un'API che permetta l'origine del file "truthiest" per parlare al server. Spingi questo nuovo file nella cache del server ogni volta che c'è una modifica. Quindi, ogni volta che il client parla al server, controlla la versione / hash del file del client e confrontalo con ciò che abbiamo. Se corrisponde, procedere, altrimenti 1) forzare l'aggiornamento del client, 2) dire al client di aggiornarlo manualmente (nel senso che neghiamo l'accesso fino a quel momento) o 3) avere un margine di versione che darà abbastanza tempo per il client aggiornamento, in teoria.
Pro
- evitaviaggidiandataeritornotraservereproviderdifile
Contro
- nonèsicuroqualesialasoluzionemiglioreperlasincronizzazione(1,2o3)
- piùlavororichiestopercostruireAPIecc...
SoluzioneB)Siailclientcheilservereffettuanochiamateperiodicamentepervederesec'èunanuovaconfigurazione.Quandoilclientparlaalservereleversioninoncorrispondono,abbiamodinuovole3opzioni,solochequestavoltailserverdeveeffettuarechiamateallamemoria(lafontepiùtropo)perverificarequaleversioneèquellacorretta.
Pro
- meno lavoro della soluzione A
Contro
- meno affidabile, troppi punti di debolezza
- troppi round trip tra server-storage e client-storage.
Nota sullo spazio di archiviazione Ci sono problemi sia con S3 che con un CDN. S3 non è sempre onesto - a volte può restituire dati più vecchi - non è una singola fonte di verità. Un CDN è utile in quanto i client scaricheranno questi dati per la loro lingua specifica, ma la ridistribuzione di ciascuna nuova versione può richiedere tempo, motivo per cui potremmo aver bisogno di un margine di manovra.
Questa è una breve panoramica delle idee che avevamo. Ci sono avvertenze che possono o non sono state delineate, ma stiamo cercando di scoprire come viene tipicamente gestito questo genere di cose.