DomuS3D Client Server utilizza una cache distribuita per ridurre al minimo il traffico di rete tra i singoli client e il server
Lettura
Quando un client ha bisogno di un file F presente sul database del server, questa è la procedura seguita:
Td: Istante in cui il file è stato scaricato
Now: Istante attuale
Δ(F): Timeout della cache per il file F
Tm: Istante di ultima modifica del file nella cache
Tms: Istante di ultima modifica del file sul server
____: Accesso alla rete
Scrittura
Quando un client ha bisogno di modificare (o inserire) un file F presente sul database del server vengono aggiornate sempre sia la copia remota sul server sia la copia locale in cache secondo la politica write-through. L’unica eccezione riguarda i file di progetto (che l’utente sceglie di conservare in locale) per i quali, viste le loro dimensioni elevate, viene adottata un politica write-back: il file viene aggiornato soltanto nella cache locale e l’aggiornamento della copia remota sul
server viene ritardata fino a quando non viene eseguito il comando “sincronizza” che riporta il sistema ad uno stato consistente (È molto importante che tutti i client abbiano effettuato la sincronizzazione e si trovino in uno stato consistente prima di effettuare un backup sul server).
Tale comando è disponibile nel menu Server->Cache->Sincronizza e viene automaticamente lanciato alla chiusura di DomuS3D.
Ottimizzazione del traffico di rete
Configurazione del timeout della cache
La cache può essere ottimizzata agendo sul parametro Δ(F) che rappresenta il timeout della cache per il file F; tale parametro può essere impostato agendo sulla chiave di registro CSCacheTimeoutMin che deve essere una stringa costruita in questo modo:
<path1>| Δ(<path1>);<path2>| Δ(<path2>);…;*| Δ(*).
Ad esempio impostando CSCacheTimeoutMin=”Bitmap|60;Projects|-1;*|3” abbiamo che tutti i file che contengono “Bitmap” nel loro path hanno un timeout di 60 minuti, tutti quelli che contengono “Projects” nel loro path hanno un timeout pari a -1 minuti (-> controllo del timeout disabilitato, si accede sempre alla rete) e tutti i restanti hanno un timeout di 3 minuti.
In generale tanto più Δ(F) è alto tanto più è basso il traffico di rete e tanto più è alto il rischio di ottenere un file non aggiornato e viceversa; agli estremi ponendo Δ(F)=0 si ha il massimo traffico (si accede sempre alla rete), ma è certo che il file è sempre corretto e ponendo Δ(F)=∞ si ha il minimo traffico (si accede alla rete solo la prima volta), ma se il file viene cambiato sul server il client non si accorge della modifica.
Conoscendo a priori la frequenza di aggiornamento di un file, il valore ottimale di Δ(F) risulta essere pari al suo inverso; in particolare se F non viene mai cambiato una volta creato, il valore ottimale sarà Δ(F)=∞. Non conoscendo a priori la frequenza di aggiornamento di un file, si tenderà ad utilizzare valori alti di Δ(F) in caso di reti lente e valori bassi in caso di reti veloci.
Precaricamento e svuotamento della cache
E’ possibile effettuare un precaricamento (prefetch) della cache utilizzando l’apposito comando presente nel menu Server->Cache->Precarica. In questo modo è possibile precaricare i dati nella cache in momenti in cui la rete è scarica oppure un’attesa non comporta problemi, così da avere la massima velocità nel periodo successivo.
E’ inoltre possibile svuotare la cache utilizzando il comando Server->Cache->Svuota, in maniera da recuperare spazio su disco ed forzare il download dei file presenti sul server al successivo accesso.
Durante il precaricamento della cache di assume Δ(F)=0 per qualsiasi file F indipendentemente dal valore impostato in configurazione. In questo modo impostando in configurazione Δ(F)=∞ e sfruttando il precaricamento/svuotamento si riesce ad avere una gestione sostanzialmente manuale della cache, utile in condizioni di rete estremamente lenta.
Utilizzo delle anteprime
Impostando la chiave di registro CSCacheThumbsEnabled è possibile abilitare e disabilitare la gestione delle anteprime, in particolare ponendo la chiave CSCacheThumbsEnabled=1 l’utilizzo delle anteprime viene abilitato.
Quando le anteprime sono abilitate in fase di scrittura di ogni immagine viene generata ed aggiornata anche la corrispondente anteprima e le maschere di selezione più comuni utilizzano le anteprime anziché le immagini principali. In questo modo si ottiene un rallentamento quando si effettuano modifiche al catalogo ma tutte le operazioni di selezione, molto più frequenti, risultano più veloci.
Il comando presente nel menu Server->Cache->Genera Anteprime consente di rigenerare le anteprime dei file presenti sul server.
Esempi
Rete veloce: in questo caso si può impostare Δ(F)=∞ per i file che non cambiano mai e Δ(F)=0 per tutti gli altri. Ad esempio se sappiamo che il catalogo del produttore “xxxxx” una volta caricato non viene mai modificato imposteremo CSCacheTimeoutMin=”Bitmap\xxxxx|999999;*|0”.
Rete lenta: in questo caso si può impostare Δ(F)=∞ per i file che non cambiano mai e Δ(F) uguale a circa l’inverso della frequenza con cui si stima possano cambiare tutti gli altri; se un utente si accorge di non avere un file aggiornato, dovrà effettuare un precaricamento o svuotamento manuale della cache.
Rete molto lenta: in questo caso si può impostare Δ(F)=∞ per tutti i file ed eseguire un precaricamento della cache in momenti in cui la rete è scarica oppure un’attesa non comporta problemi