
Unul dintre obiectivele furnizorului de hosting este maximizarea utilizării echipamentului existent pentru a oferi un serviciu de calitate utilizatorilor finali. Resursele serverelor finale sunt întotdeauna limitate, totuși numărul de servicii ale clienților, iar în cazul nostru este vorba despre VPS-uri, poate varia semnificativ. Despre cum să spui că ai ajuns pe crenguța de brad și să mănânci un burger, citește mai jos.
Compactarea VPS-urilor pe nod astfel încât clienții să nu resimtă deloc acest lucru ajută foarte mult la îmbunătățirea performanțelor economice ale oricărui furnizor de hosting. Cu siguranță, nodul nu trebuie să crape dacă e plin de containere, iar orice vârf de sarcină este simțit imediat de toți clienții.
Câte VPS-uri pot fi găzduite pe un singur nod depinde de numeroși factori, cum ar fi:
1. Specificațiile hardware ale nodului
2. Dimensiunea VPS-ului
3. Tipul sarcinii pe VPS
4. Tehnologiile software care ajută la optimizarea densității
În acest caz, vom împărtăși experiența utilizării tehnologiei Pfcache pentru Virtuozzo.
Folosim ramura 6, dar tot ce a fost spus este adevărat și pentru ramura 7.
– mecanism Virtuozzo care ajută la deduplicarea IOPS și RAM în containere, alocând fișiere identice în containere într-o zonă comună separată.
De fapt, acesta constă din:
1. Codul nucleului
2. Demon în spațiul utilizatorului
3. Utilitar în spațiul utilizatorului
Pe partea nodului, alocăm o întreagă partiție în care vor fi create fișierele utilizate direct de toate VPS-urile de pe nod. În această partiție se montează un dispozitiv bloc ploop. Ulterior, la pornirea containerului, acesta primește un referințial pe această partiție:
[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
...
Iată statistica aproximativă a numărului de fișiere pe unul dintre nodurile noastre:
[root@pcs13 ~]# find /vz/pfcache -type f | wc -l
45851
[root@pcs13 ~]# du -sck -h /vz/pfcache
2.4G /vz/pfcache
2.4G total
Principiul de funcționare al pfcache este următorul:
• Demonul în spațiul utilizatorului Pfcached scrie hash-ul sha-1 al fișierului în atributul xattr al acestui fișier. Fișierele nu sunt procesate toate, ci doar cele din directoarele /usr, /bin, /usr/sbin, /sbin, /lib, /lib64
• Este foarte probabil ca fișierele din aceste directoare să fie „comune” și să fie folosite de mai multe containere;
• Pfcached adună periodic statistici despre citirea fișierelor din kernel, le analizează și adaugă fișiere în cache dacă utilizarea este frecventă;
• Aceste directoare pot fi diferite și sunt configurate în fișierele de configurare.
• La citirea unui fișier, se verifică dacă acesta conține hash-ul specificat în atributele extinse xattr. Dacă este prezent, se deschide fișierul „comun”, în locul fișierului container. Acest înlocuire se face invizibil pentru codul containerului și este ascunsă în kernel;
• La scrierea într-un fișier, hash-ul devine invalid. Astfel, la o deschidere ulterioară, se va deschide direct fișierul container, nu cache-ul acestuia.
Prin păstrarea fișierelor comune în cache-ul de pagină din /vz/pfcache, economisim acest cache, precum și IOPS. În loc de a citi zece fișiere de pe disc, citim unul care ajunge imediat în cache-ul de pagină.
struct inode {
...
struct file *i_peer_file;
...
};
struct address_space {
...
struct list_head i_peer_list;
...
}
Lista VMA pentru fișier rămâne unitară (deduplicăm memoria) și citim mai rar de pe disc (economisind iops). „Comuna” noastră este plasată pe SSD – un avantaj suplimentar în viteză.
Exemplu pentru cachingul fișierului /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
Eficiența utilizării este calculată .
Acest script parcurge toate containerele de pe nod, calculând fișierele cached ale fiecărui container.
[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
Pfcache utilizează 831 MB de memorie
Utilizarea totală a fișierelor pfcached în containere este de 39837 MB de memorie
Eficiența pfcache: 39006 MB
Astfel, economisim aproximativ 40 de gigaocteți de fișiere în containere, acestea vor fi încărcate din cache.
Pentru ca acest mecanism să funcționeze și mai bine, este necesar să plasăm pe nod VPS-uri cât mai „asemănătoare”. De exemplu, cele pentru care utilizatorul nu are acces root și pe care este configurat un mediu dintr-o imagine desfășurată.
PFCACHE poate fi ajustat prin fișierul de configurare
/etc/vz/pfcache.conf
MINSIZE, MAXSIZE – dimensiunea minimă/maximă a fișierului pentru cache
TIMEOUT – timeout-ul dintre încercările de caching
Pentru lista completă de parametri, puteți consulta .
Sursa: habr.com
