
Uno degli obiettivi di un provider di hosting è massimizzare l'utilizzo delle risorse hardware disponibili per offrire un servizio di qualità agli utenti finali. Le risorse dei server finali sono sempre limitate, ma il numero di servizi client ospitati, nel nostro caso VPS, può variare notevolmente. Scopri come adattare i server e ottimizzare le risorse nel resto dell'articolo.
Consolidare le VPS su un nodo in modo che i clienti non se ne accorgano affatto contribuisce significativamente a migliorare le performance economiche di qualsiasi provider di hosting. Naturalmente, il nodo non deve essere sovraccarico; in tal caso, qualsiasi picco di carico sarà avvertito immediatamente da tutti i clienti.
Il numero di VPS che possono essere ospitate su un singolo nodo dipende da una serie di fattori, tra cui:
1. Caratteristiche hardware del nodo stesso
2. Dimensione delle VPS
3. Tipo di carico sulle VPS
4. Tecnologie software che aiutano a ottimizzare la densità
In questo caso, condivideremo la nostra esperienza nell'utilizzo della tecnologia Pfcache per Virtuozzo.
Noi utilizziamo la sesta versione, ma tutto ciò che segue è valido anche per la settima.
è un meccanismo di Virtuozzo che aiuta a deduplicare gli IOPS e la RAM nei container, allocando file identici in una zona comune.
Fondamentalmente è composto da:
1. Codice del kernel
2. Demone user-space
3. Utility user-space
Dallato del nodo, riserviamo una partizione intera in cui verranno creati i file utilizzati da tutte le VPS sul nodo. Su questa partizione viene montato il dispositivo a blocchi ploop. All'avvio del container, riceve un riferimento a questa partizione:
[root@pcs13 ~]# cat /proc/mounts
...
/dev/ploop62124p1 /vz/pfcache ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12 0 0
...
/dev/ploop22927p1 /vz/root/418 ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12,pfcache_csum,pfcache=/vz/pfcache 0 0
/dev/ploop29642p1 /vz/root/264 ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12,pfcache_csum,pfcache=/vz/pfcache 0 0
...
Ecco una statistica approssimativa del numero di file su uno dei nostri nodi:
[root@pcs13 ~]# find /vz/pfcache -type f | wc -l
45851
[root@pcs13 ~]# du -sck -h /vz/pfcache
2.4G /vz/pfcache
2.4G totale
Il principio di funzionamento di pfcache è il seguente:
• Il demone Pfcached scrive l'hash sha-1 del file negli attributi estesi xattr di quel file. I file non vengono elaborati tutti, ma solo quelli nelle directory /usr, /bin, /usr/sbin, /sbin, /lib, /lib64.
• È probabile che i file in queste directory siano "comuni" e possano essere utilizzati da diversi container.
• Pfcached raccoglie periodicamente le statistiche di lettura dei file dal kernel, le analizza e aggiunge file alla cache se il loro utilizzo è frequente.
• Queste directory possono essere diverse e sono configurabili nei file di configurazione.
• Quando si legge un file, viene verificato se contiene l'hash specificato negli attributi estesi xattr. Se sì, viene aperto il file "comune" invece del file del container. Questa sostituzione avviene in modo trasparente per il codice del container ed è gestita dal kernel.
• Quando si scrive in un file, l'hash diventa non valido. Pertanto, alla successiva apertura, verrà aperto direttamente il file del container, e non la sua cache.
Mantenendo nella cache dei pagine file comuni da /vz/pfcache, otteniamo un risparmio sullo stesso cache e sugli IOPS; invece di leggere dieci file dal disco, leggiamo uno solo, che entra direttamente nella cache delle pagine.
struct inode {
...
struct file *i_peer_file;
...
};
struct address_space {
...
struct list_head i_peer_list;
...
}
L'elenco VMA per il file rimane unico (deduplicando la memoria) e leggiamo meno dal disco (risparmiando IOPS). Il nostro "fondo comune" è ospitato su SSD, un ulteriore vantaggio in termini di velocità.
Esempio di cache del file /bin/bash:
[root@pcs13 ~]# ls -li /vz/root/2388/bin/bash
524650 -rwxr-xr-x 1 root root 1021112 Oct 7 2018 /vz/root/2388/bin/bash
[root@pcs13 ~]# pfcache dump /vz/root/2388 | grep 524650
8e3aa19fdc42e87659746f6dc8ea3af74ab30362 i:524650 g:1357611108 f:CP
[root@pcs13 ~]# sha1sum /vz/root/2388/bin/bash
8e3aa19fdc42e87659746f6dc8ea3af74ab30362 /vz/root/2388/bin/bash
[root@pcs13 /]# getfattr -ntrusted.pfcache /vz/root/2388/bin/bash
# file: vz/root/2388/bin/bash
trusted.pfcache="8e3aa19fdc42e87659746f6dc8ea3af74ab30362"
[root@pcs13 ~]# sha1sum /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362
8e3aa19fdc42e87659746f6dc8ea3af74ab30362 /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362
L'efficienza nell'utilizzo si calcola .
Questo script esamina tutti i container nel nodo, calcolando i file memorizzati nella cache di ciascun container.
[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
L'uso della cache Pfcache è di 831 MB di memoria
L'uso totale dei file pfcached nei container è di 39837 MB di memoria
Efficienza di Pfcache: 39006 MB
Pertanto, risparmiamo circa 40 gigabyte di file nei container, che verranno caricati dalla cache.
Affinché questo meccanismo funzioni ancora meglio, è importante alloggiare sul nodo VPS il più "uniformi" possibile. Ad esempio, VPS su cui l'utente non ha accesso root e che hanno un ambiente configurato da un'immagine distribuita.
L'operatività di pfcache può essere regolata tramite un file di configurazione
/etc/vz/pfcache.conf
MINSIZE, MAXSIZE – dimensione minima/massima del file per la memorizzazione nella cache
TIMEOUT – timeout tra i tentativi di memorizzazione nella cache
È possibile consultare l'elenco completo delle specifiche .
Fonte: habr.com
