Verhoging van de container­dichtheid op de node met behulp van PFCACHE-technologie

Verhoging van de container­dichtheid op de node met behulp van PFCACHE-technologie

Een van de doelen van een hostingprovider is het zo maximaal mogelijk benutten van de beschikbare hardware om een kwalitatieve service aan eindgebruikers te bieden. De middelen van de uiteindelijke servers zijn altijd beperkt, maar het aantal gehoste klantendiensten, in ons geval gaat het om VPS, kan aanzienlijk variëren. Lees meer over hoe je de kerstboom inpast en een hamburger eet hieronder.

Het comprimeren van VPS op de node op een manier zodat klanten dit helemaal niet merken, helpt de economische prestaties van elke hostingprovider significant te verbeteren. Uiteraard mag de node niet uit zijn voegen barsten als deze vol gepropt is met containers, en elke toename in de belasting wordt onmiddellijk door alle klanten gevoeld.

Hoeveel VPS er op één node geplaatst kan worden, hangt af van veel factoren, waarvan sommige zo voor de hand liggend zijn als:

1. De specificaties van de hardware van de node
2. De grootte van de VPS
3. De aard van de belasting op de VPS
4. Softwaretechnologieën die helpen de dichtheid te optimaliseren

In dit geval willen we onze ervaring delen met de technologie Pfcache voor Virtuozzo.
We gebruiken de 6e tak, maar alles wat we zeggen geldt ook voor de 7e.

Pfcache is een Virtuozzo-mechanisme dat helpt IOPS en RAM in containers te dedupliceren door dezelfde bestanden in containers in een aparte gedeelde zone te plaatsen.

Het bestaat eigenlijk uit:
1. Kernelcode
2. User-space daemon
3. User-space utility

Aan de kant van de node reserveren we een hele partitie waarin bestanden worden gemaakt die direct door alle VPS op de node worden gebruikt. Deze partitie wordt gemonteerd met het blokapparaat ploop. Bij het opstarten van de container krijgt deze een referentie naar deze partitie:

[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
...

Hier is een schatting van het aantal bestanden op een van onze nodes:

[root@pcs13 ~]# find /vz/pfcache -type f | wc -l
45851
[root@pcs13 ~]# du -sck -h /vz/pfcache
2.4G    /vz/pfcache
2.4G    totaal

Het principe van pfcache werkt als volgt:
• De user-space daemon Pfcached schrijft de sha-1 hash van het bestand in het xattr attribuut van dat bestand. Niet alle bestanden worden behandeld, maar alleen in de mappen /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Het is waarschijnlijker dat bestanden in deze mappen 'gemeenschappelijk' zijn en door meerdere containers worden gebruikt;

• Pfcached verzamelt periodiek statistieken over het lezen van bestanden vanuit de kernel, analyseert deze en voegt bestanden aan de cache toe als ze vaak worden gebruikt;

• De gegevensmappen kunnen anders zijn en worden ingesteld in configuratiebestanden.

• Bij het lezen van een bestand wordt gecontroleerd of het de opgegeven hash in de uitgebreide attributen xattr bevat. Als dit het geval is, wordt het 'gemeenschappelijke' bestand geopend in plaats van het containerbestand. Deze vervangingen gebeuren onopgemerkt voor de container code en worden verborgen in de kernel;

• Bij het schrijven naar een bestand wordt de hash ongeldig. Hierdoor wordt bij een volgend openen het containerbestand direct geopend in plaats van de cache.

Door in de paginacache gemeenschappelijke bestanden uit /vz/pfcache te houden, besparen we op die cache en ook op IOPS. In plaats van tien bestanden van de schijf te lezen, lezen we er één, die direct in de paginacache gaat.

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

De lijst VMA voor het bestand blijft één (de-dupliceren van geheugen) en we lezen minder vanaf de schijf (besparen van iops). Onze 'gemeenschappelijke' opslag bevindt zich op SSD - een extrawinst in snelheid.

Voorbeeld van het cachen van het bestand /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
# bestand: vz/root/2388/bin/bash
trusted.pfcache="8e3aa19fdc42e87659746f6dc8ea3af74ab30362"
[root@pcs13 ~]# sha1sum /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362
8e3aa19fdc42e87659746f6dc8ea3af74ab30362  /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362

De effectiviteit van het gebruik wordt berekend met een kant-en-klaar script.

Dit script doorloopt alle containers op de node en berekent de gecachte bestanden van elke container.

[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
Pfcache cache gebruikt 831 MB geheugen
Totaal gebruik van pfcached-bestanden in containers is 39837 MB geheugen
Pfcache effectiviteit: 39006 MB

Op die manier besparen we ongeveer 40 gigabyte aan bestanden in de containers, die vanuit de cache zullen worden geladen.

Om dit mechanisme nog beter te laten werken, moeten we op de node zo veel mogelijk 'gelijke' VPS plaatsen. Bijvoorbeeld diegene waarvoor de gebruiker geen root-toegang heeft en waarop een omgeving is ingesteld vanuit een uitgerold beeld.

De werking van pfcache kan worden geoptimaliseerd via het configuratiebestand
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – minimum/maximale bestandsgrootte voor caching
TIMEOUT – time-out tussen pogingen tot caching

U kunt de volledige lijst met parameters bekijken via de link.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster