I dati dell'utente sono memorizzati su due cluster di archiviazione OpenStack Swift abbastanza grandi (> 1 PB). Siano Cluster A e Gruppo B .
Inoltre, ci sono diversi PoP che devono interagire con quei dati. I server in questi PoP sono effettivamente senza disco, il che significa che nessun dato dell'utente viene memorizzato su di essi o mai scaricato su di essi. I PoP possono essere raggruppati in regioni del mondo generale (ad es. Nord America , Sudafrica , Europa centrale e altri).
Alcuni PoP sono abbastanza lontani dagli endpoint Swift di qualsiasi cluster, introducendo una latenza indesiderata. Per mitigare un po 'questo, voglio impostare un server gateway di memorizzazione nella cache in ciascuna delle regioni, che memorizzerà nella cache le richieste di r / w per il cluster più vicino.
Attualmente, i client di qualsiasi PoP accedono ai dati dell'utente tramite un file system virtuale rapido montato in modo permanente , che è un modulo FUSE che monta Swift Object Storage come dispositivo a blocchi (più o meno). Tuttavia, svfs non è poi così stabile in primo luogo e in futuro i client dovrebbero accedere ai server cache tramite NFS.
Questo è un diagramma di un ramo dell'architettura desiderata:
+------------------+ +------------------+ NFS +------------------+
| Cluster A | SVFS | Region 1 Cache +----------> R1 PoP a Client |
| +----------------> | | |
|Persistent Storage| |Ephemeral Storage+----+ |Generates R/W Load|
+-----------------++ +------------------+ | +------------------+
| |
| +------------------+ | NFS +------------------+
| SVFS | Region 2 Cache | +-----> R1 PoP b Client |
+-----------------> | | |
|Ephemeral Storage| |Generates R/W Load|
+------------------+ +------------------+
Conosco le basi della configurazione di NFS e svfs.
La domanda è : come posso impostare il server di memorizzazione nella cache per utilizzare tutte le risorse disponibili (una partizione cache designata, RAM) per memorizzare nella cache il più aggressivamente possibile e quanti più dati possibile prima di scrivere sul mount point svfs? Fondamentalmente si riduce a: Come posso memorizzare nella cache una directory in Linux?
Se possibile, le letture e le scritture dovrebbero essere consolidate e le dimensioni dei blocchi nelle richieste FUSE dovrebbero essere almeno 128k, se possibile, per massimizzare il throughput e minimizzare la latenza se la cache deve scrivere nel cluster.
Addendum 1 : Ho cambiato il modulo di montaggio del cluster da svfs a S3QL su alcuni server. La memorizzazione nella cache di S3QL ha migliorato un po 'le prestazioni. Cercherò di ottenere alcuni dati sulle prestazioni per completezza.