Nell’ambito dell’iniziativa EVE Evolved, continua il lavoro per aggiornare il client e il server di EVE Online da Python 2 a Python 3. Questo lavoro è importante per garantire che stiamo costruendo su basi solide e per prepararci per molti altri anni di sviluppo futuro.
Casa dei record
Questa puntata di EVE Evolved esamina la memoria dell'agente NPC, sia il modo in cui gestisce la burocrazia nel tracciare le circa 100.000 missioni assegnate ogni giorno, sia alcune delle sfide interessanti che pone, che potrebbero influenzare i giocatori in futuro.
In questo blog "agente" si riferisce agli agenti NPC che abitano EVE: quegli adorabili personaggi che (a volte in modo sgarbato) ti chiedono di trasportare la loro spazzatura in un'altra stazione, di eliminare l'ultima minaccia pirata o ancora una volta di salvare quella povera damigella, in cambio di una ricompensa.

Iniziare in modo semplice
Poiché tutti voi amate un buon approfondimento tecnico, presto diventeremo abbastanza dettagliati. Ma per chiunque voglia solo il TL;DR, ecco i punti chiave:
Nell'ambito della modernizzazione di EVE Online attraverso l'aggiornamento a Python 3, è necessario apportare modifiche al modo in cui vengono archiviati i dati per gli agenti NPC. Verranno apportati aggiornamenti dietro le quinte al modo in cui vengono tracciate le missioni e altre interazioni con gli agenti. Ciò richiede l’eliminazione di alcuni vecchi dati e la conversione di ciò che rimane in una forma più a prova di futuro.
Questo processo sarà per lo più invisibile. L'unico impatto evidente dovrebbe riguardare ciò che accade ai vecchi progressi della missione salvati prima del 29 settembre 2026.
La tua posizione NPC è al sicuro e tutti gli agenti che hai sbloccato continueranno a essere disponibili, anche se non accedi o non sei attualmente Omega. Non perderai alcun progresso.
Se richiedi una nuova missione agente (o ne completi/fallisci una esistente) da oggi in poi, i progressi della missione verranno automaticamente trasferiti nella nuova memoria.
Se hai interagito con un agente PRIMA di oggi e non interagisci con l'agente DOPO oggi per aggiornare i progressi, i lavori di quell'agente verranno cancellati ed eliminati quando il passaggio a Python 3 sarà completamente completato.
Non abbiamo ancora un calendario preciso per quando avverrà questo sgombero, poiché è solo una parte dell'enorme migrazione a Python 3. Questo processo richiederà mesi, anziché giorni. Man mano che ci avviciniamo a questo momento, te lo ricorderemo prima di cancellare la memoria.
Se hai una missione offerta/accettata PRIMA di oggi e non interagisci con l'agente per completare quella missione dopo oggi, ci sarà un momento in futuro in cui tale progresso della missione verrà cancellato.
Se hai ingaggiato un agente di ricerca per generare punti ricerca PRIMA di oggi, dovrai completare almeno una missione con quell'agente dopo oggi per mantenerlo attivo. (Questa operazione deve essere eseguita solo una volta per agente e per personaggio). Alla fine, elimineremo tutti i vecchi lavori di ricerca che non sono stati toccati da oggi. Ma state tranquilli, prima che ciò accada, contatteremo le persone colpite, sia all'interno che all'esterno di New Eden, per ricordarvi di verificare con i vostri agenti di ricerca.
In breve, se stai svolgendo attivamente missioni agente, puoi continuare a giocare normalmente e nulla cambierà. Se hai degli agenti a cui tieni (in particolare gli agenti di ricerca), dovresti far loro visita e svolgere una missione per loro, in modo che non ti dimentichino.
Ora che conosci le nozioni di base, se vuoi ancora saperne di più sulle abitudini di accumulo degli agenti e su alcuni segreti del passato, continua a leggere...
I mondi si scontrano

Per capire cosa intendiamo per memoria dell'agente, abbiamo prima bisogno di un po' di contesto. Una ripartizione del progetto Python 3 complessivo fornisce queste ampie aree:
Runtime: gli eseguibili del client e del server che fanno funzionare il gioco.
Dati: le informazioni che definiscono l'esperienza unica di EVE Online. Questi possono essere ulteriormente suddivisi:
Dati sui contenuti: modelli, trame, parole, statistiche e tutto ciò che creano i nostri artisti, designer e scrittori. Alcuni di questi dati ti vengono inviati come parte del client e altri risiedono solo all'interno dei nostri server.
Dati di rete: i pacchetti di informazioni che viaggiano su Internet tra il tuo client e il nostro server e che viaggiano tra gli oltre 200 nodi all'interno del nostro cluster di server nel data center.
Dati persistenti: il "file di salvataggio" in continua crescita che registra gli oltre 20 anni di progressi nel gioco. Principalmente, questo è l’enorme database SQL che risiede nel cuore di EVE. Qui è dove vive la memoria dell'agente.
Ecosistema di sviluppatori: gli strumenti e i processi che noi sviluppatori utilizziamo nel nostro lavoro quotidiano per offrirti il gioco.
Richiesta dell'agente
Ora che sappiamo dove risiede la memoria dell'agente, possiamo parlare di cosa sia realmente. Ogni volta che il tuo personaggio interagisce con uno degli agenti NPC, registriamo questo fatto nel database. L'interazione potrebbe richiedere una nuova missione, completare (o fallire) una missione precedentemente offerta, avviare un'attività di ricerca o un lavoro di localizzazione o ottenere un rinvio a uno degli agenti speciali della trama.
Ogni agente conosce lo stato dell'ultima interazione che ha avuto con ogni singolo personaggio con cui ha parlato. Se sei andato da un agente 20 anni fa e hai iniziato una missione per recuperare alcuni holoreel dubbi, quell'agente si ricorderà di te ed è ancora in attesa di dirti che non sei riuscito a portare a termine il lavoro entro un tempo ragionevole!
I ricordi che un agente potrebbe conservare riguardo al tuo personaggio includono:
Quale missione ti hanno offerto e lo stato di tale missione (ad esempio, un NPC target è stato già eliminato?)
Se l'agente sta eseguendo un'attività di ricerca e come sta andando
Se all'agente è stato assegnato il compito di localizzare un altro personaggio per te
Quanto sei progredito lungo la catena della trama
Quali missioni epiche o di carriera hai completato
Tieni presente che la relazione in termini di posizione tra personaggi/corporazioni NPC e il tuo personaggio NON fa parte della memoria di questo agente. Le classifiche hanno una meccanica separata, con un proprio modo di monitorare lo stato.
Recupero dati
Infine, possiamo rivolgere l'attenzione al modo in cui questi dati vengono archiviati e recuperati e al motivo di questo blog.
All'inizio degli anni 2000, quando EVE Online era nella fase finale del lancio, fu concepito il database di memoria dell'agente. Il requisito era memorizzare lo stato complesso che rappresentava le interazioni tra una coppia agente/personaggio. Normalmente nella progettazione di database si cerca di costruire modelli molto formali di tabelle e relazioni per tali dati. Ma i requisiti di memoria dell'agente erano disordinati e dinamici: ogni interazione aveva insiemi di variabili molto diversi (si pensi, ad esempio, alla descrizione di una missione di un corriere rispetto a un riferimento alla trama) e, inoltre, i progetti cambiavano rapidamente man mano che il gioco si evolveva.
A quel tempo, il moderno movimento NoSQL non era ancora iniziato. EVE utilizzava saldamente MSSQL per il suo livello di persistenza. Un programmatore intelligente si rese conto che potevano prendere l'oggetto Python che memorizza la memoria di un agente, serializzarlo in un blob binario e archiviare quel blob come un pezzo di testo in una tabella di database.
Quindi, la prossima volta che l'agente viene svegliato da un'interazione con un personaggio, accade il contrario. Il blob binario per quell'agente viene recuperato dal database e deserializzato per trasformarlo nuovamente in un oggetto Python, che viene quindi inserito nell'agente in esecuzione, ripristinandone così la memoria. (In Python, questo processo è noto anche come decapaggio e deserializzazione.)
Anche se questo è stato ottimo per risolvere il problema immediato in questione, ha creato due problemi futuri:
I BLOB di memoria non erano facilmente ricercabili. La potenza di un database deriva dalla ricerca: trova tutte le voci in cui un parametro ha un valore. Ma avere ogni memoria racchiusa in un involucro di Python significava che era impossibile interrogare in modo efficiente i componenti interni. Per trovare tutti i ricordi relativi alla suddetta Damigella, ad esempio, sarebbe necessario caricare tutti i ricordi, uno alla volta, in Python in modo che possano essere controllati. Non è l'ideale.
Il formato dei dati è stato accoppiato alla versione Python in uso. Con l'evoluzione del linguaggio Python, sono state aggiunte nuove funzionalità e altre sono state deprecate e alla fine eliminate. Ciò significava che, in futuro, quei ricordi sarebbero diventati illeggibili, perduti, come lacrime sotto la pioggia. Con il passaggio da Python 2 a 3, quel futuro sarà presto alle porte.
La scorta nascosta
Per spiegare questo problema con un'analogia non tecnica, immagina di dover mettere le tue cose in un deposito mentre ti muovi. Un modo sarebbe quello di imballare tutto in un gigantesco contenitore di spedizione sigillato e inviarlo al magazzino di stoccaggio (questo significa "serializzare" i tuoi dati). È flessibile (al camion che trasporta il tuo container non importa se la tua collezione musicale al suo interno è in vinile o CD), veloce da eseguire e la spedizione del container è diventata un processo standardizzato.
Più tardi, quando ti trasferisci nella tua nuova casa, ti verrà consegnato il container e potrai disimballare i tuoi beni più preziosi. Tuttavia, questo comporta uno svantaggio: se il magazzino richiede un controllo di sicurezza per garantire che non stia immagazzinando materiali illegali, l’unico modo per farlo sarebbe aprire e perquisire manualmente ogni singolo contenitore. Non è un processo molto efficiente.
Attrezzato per il lavoro
Nonostante gli inconvenienti a lungo termine dell’approccio, ha funzionato. EVE Online è arrivato al lancio e oltre. La soluzione di memoria dell'agente è sopravvissuta e ha resistito molto bene, tutto sommato. Ma nulla può durare per sempre.
Pulizia dei documenti
La migrazione a Python 3 ci sta offrendo un'occasione d'oro (che non possiamo trascurare... letteralmente non possiamo) per affrontare i peccati del nostro passato. Dobbiamo abbandonare l'inflessibilità e l'obsolescenza intrinseca dell'archiviazione di BLOB Python in un database SQL. Allo stesso tempo, stiamo sfruttando questa opportunità per fare un po’ di pulizia e ripulire molti dati accumulati. (La tabella di memoria dell'agente è una delle più grandi nel nostro DB e una delle pochissime che cresce e non si riduce mai.)
Duo della Morte
Questo lavoro è già iniziato dietro le quinte. Di recente abbiamo aggiornato il modo in cui carichiamo e salviamo le memorie degli agenti. Ogni volta che è necessario salvare un nuovo ricordo, ora lo facciamo in due forme parallele:
Il vecchio formato Python-blob opaco, esattamente come abbiamo sempre fatto.
Un nuovo modulo trasparente e a prova di futuro che non si basa su un particolare formato Python ed è anche aperto a una migliore ricercabilità e adattabilità futura.
Per il momento tutte le memorie nuove/aggiornate esisteranno in entrambe le forme. Se richiedi una missione a un agente oggi, quella memoria verrà salvata in entrambi. Questo ci permette di scegliere a quale modulo dare priorità quando si carica la memoria di un agente. Riduce anche il rischio, poiché possiamo verificare che entrambe le forme raccontino la stessa storia prima di abbandonare il vecchio metodo.
Quando dobbiamo ricaricare la memoria di un agente dal database, ora abbiamo alcune opzioni per quale sorgente viene trattata come priorità, che modificheremo in tre fasi:
Fase 1: Inizialmente continueremo a caricare solo dallo spazio di archiviazione legacy, finché non saremo soddisfatti che il nuovo modulo funzioni correttamente.
Fase 2: Successivamente cambieremo la priorità, in modo da cercare prima un ricordo nel nuovo modulo e poi, se non viene trovato nulla, ricorrere al caricamento dal vecchio modulo.
Fase 3: alla fine (quando migreremo completamente tutto il resto su Python 3) smetteremo completamente di leggere dal vecchio modulo. Solo i ricordi salvati nella nuova forma saranno disponibili agli agenti. Potremo quindi finalmente eliminare dal database i vecchi ricordi che non sono mai stati aggiornati, rendendo felici i nostri amministratori del database.
A partire da oggi, ogni nuova memoria verrà portata con noi durante la migrazione a Python 3. Questa migrazione sarà un processo lungo e quindi avrai tutto il tempo per interagire con i tuoi agenti e ottenere nuove missioni o completare quelle esistenti. Qui stiamo parlando di mesi, non di giorni. Man mano che ci avviciniamo alla Fase 3, faremo in modo che tu ne sia a conoscenza.
Materiali per la preparazione alla guerra
Ci sono alcuni ricordi che DOBBIAMO portare con noi, indipendentemente dalla loro età, anche se il personaggio associato non accede o non genera un ricordo aggiornato con ciascun agente. Alcuni tutorial o missioni dell'arco epico durano una sola volta, ad esempio, quindi dobbiamo tenerne traccia. In questi casi limitati, migreremo automaticamente i dati in un nuovo modulo in background.
Una parte importante della relazione tra personaggi e agenti è la loro posizione. Questo è ciò su cui stai lavorando mentre sali di grado dagli agenti di livello 1 al livello 4 o addirittura 5. Tutte le posizioni tra personaggi e agenti/corporazioni/fazioni NPC verranno preservate e non saranno influenzate da questi cambiamenti. Non azzereremo né perderemo quelle classifiche.
In costruzione
Il lavoro continua sulla migrazione a Python 3. Oltre alla parte “semplice” della conversione del codice client/server, c’è altrettanto (se non di più) lavoro coinvolto nell’aggiornamento di tutto ciò che riguarda il codice. Sono tanti gli strumenti che i nostri sviluppatori utilizzano ogni giorno. I numerosi confini in cui un processo Python comunica con qualche altro componente attraverso una rete. I processi di distribuzione che ci consentono di premere un pulsante e rendere operativa un'espansione.
E, come abbiamo visto qui, anche i dati archiviati in un database a volte necessitano di un piccolo aggiornamento.
Vola sicuro e ci vedremo presto in un altro blog o7
Fonte originale:eveonlineitalia.it— Leggi l'originale