Creșterea densității containerului pe un nod folosind tehnologia PFCACHE

Creșterea densității containerului pe un nod folosind tehnologia PFCACHE

Unul dintre obiectivele furnizorului de găzduire este de a maximiza utilizarea echipamentului existent pentru a oferi servicii de înaltă calitate utilizatorilor finali. Resursele serverelor finale sunt întotdeauna limitate, dar numărul de servicii client găzduite, iar în cazul nostru vorbim despre VPS, poate diferi semnificativ. Citește despre cum să te cațări în copac și să mănânci un burger sub tăietură.

Compactarea VPS pe un nod în așa fel încât clienții să nu simtă deloc acest lucru ajută foarte mult la creșterea performanței economice a oricărui furnizor de găzduire. Desigur, un nod nu ar trebui să spargă la cusături dacă este înghesuit cu containere, iar orice creștere a încărcăturii este imediat simțită de toți clienții.

Câte VPS pot fi găzduite pe un singur nod depinde de mulți factori, cum ar fi:

1. Caracteristicile hardware-ului nodului în sine
2. Dimensiunea VPS
3. Natura sarcinii de pe VPS
4. Tehnologii software care ajută la optimizarea densității

În acest caz, vom împărtăși experiența noastră de utilizare a tehnologiei Pfcache pentru Virtuozzo.
Folosim a 6-a ramură, dar tot ce s-a spus este valabil și pentru a 7-a.

Pfcache – un mecanism Virtuozzo care ajută la deduplicarea IOPS și RAM în containere, alocand fișiere identice în containere într-o zonă comună separată.

De fapt, este format din:
1. Cod kernel
2. Demonul spațiului utilizatorului
3. Utilitare pentru spațiul utilizatorului

Pe partea de nod, alocam o intreaga sectiune in care vor fi create fisiere care vor fi folosite direct de toate VPS-urile de pe nod. În această secțiune este montat un dispozitiv de blocare. Apoi, când containerul pornește, primește o referință pentru această secțiune:

[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ă statistici aproximative privind numărul de fișiere de 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 pfcache este următorul:
• Daemonul spațiului utilizator Pfcached scrie hash-ul sha-1 al fișierului în atributul xattr al acestui fișier. Nu toate fișierele sunt procesate, ci doar în directoarele /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Cel mai probabil este ca fișierele din aceste directoare să fie „partajate” și să fie folosite de mai multe containere;

• Pfcached colectează periodic statistici privind citirea fișierelor din nucleu, le analizează și adaugă fișiere în cache dacă sunt folosite 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ă conține, fișierul „general” este deschis în locul fișierului container. Această înlocuire apare neobservată de codul containerului și este ascunsă în nucleu;

• Când scrieți într-un fișier, hash-ul este invalidat. Astfel, data viitoare când îl deschideți, fișierul container în sine va fi deschis, și nu memoria cache.

Păstrând fișierele partajate din /vz/pfcache în memoria cache a paginii, obținem economii în acest cache în sine, precum și economii în IOPS. În loc să citim zece fișiere de pe disc, citim unul, care merge imediat în memoria cache a paginii.

struct inode {
...
 struct file             *i_peer_file;
...
};
struct address_space {
...
 struct list_head        i_peer_list;
...
}

Lista VMA pentru fișier rămâne unică (deduplicam memoria) și este citită de pe disc mai rar (salvând iops). Fondul nostru comun se află pe un SSD - un câștig suplimentar în viteză.

Exemplu pentru memorarea în cache a 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

Calculăm eficiența utilizării scenariu gata făcut.

Acest script parcurge toate containerele de pe nod, calculând fișierele din cache ale fiecărui container.

[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
Pfcache cache uses 831 MB of memory
Total use of pfcached files in containers is 39837 MB of memory
Pfcache effectiveness: 39006 MB

Astfel, din memorie salvăm aproximativ 40 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ă plasați cel mai „identic” VPS pe nod. De exemplu, cele la care utilizatorul nu are acces root și pe care este configurat mediul din imaginea implementată.

Puteți regla pfcache prin fișierul de configurare
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – dimensiunea minimă/maximă a fișierului pentru stocarea în cache
TIMEOUT – timeout între încercările de stocare în cache

Puteți vizualiza lista completă a parametrilor по ссылке.

Sursa: www.habr.com

Adauga un comentariu