
A hoszting szolgáltató egyik célja a rendelkezésre álló hardver maximális kihasználása a végfelhasználók számára nyújtott minőségi szolgáltatás érdekében. A végső szerverek erőforrásai mindig korlátozottak, azonban a hosztolt ügyfélszolgáltatások mennyisége, a mi esetünkben a VPS-ek, jelentősen eltérhet. Arról, hogy miként lehet a fát megmászni és hamburgert enni, a cikk alján olvashatsz.
A VPS-ek sűrűségének növelése a noden úgy, hogy a kliensek ezt ne érezzék, jelentősen hozzájárul a hoszting szolgáltató gazdasági mutatóinak javításához. Természetesen a noden nem szabad, hogy szétesjen, ha tele van a konténerekkel, és bármilyen terhelésingadozás azonnal minden ügyfél számára érzékelhető.
Hogy hány VPS helyezhető el egy noden, számos tényezőtől függ, amelyek közül a legnyilvánvalóbbak a következők:
1. A noden lévő hardver jellemzői
2. A VPS mérete
3. A VPS terhelési jellemzői
4. A szoftvertechnológiák, amelyek segítik a sűrűség optimalizálását
Ebben az esetben megosztjuk a Pfcache technológia használatával szerzett tapasztalatainkat a Virtuozzo számára.
A 6. ágat használjuk, de minden elmondott érvényes a 7. ágra is.
– egy Virtuozzo mechanizmus, amely segít a IOPS és RAM deduplikálásában a konténerekben, azáltal, hogy az azonos fájlokat külön közös zónába helyezi.
Valójában a következőkből áll:
1. A kernel kódja
2. User-space démon
3. User-space segédprogram
A noden oldalán egy teljes partíciót dedikálunk, amelyben létrejönnek azok a fájlok, amelyeket az összes VPS közvetlenül használ. Ezen partícióra a ploop blokkeszközt csatlakoztatjuk. Ezt követően, amikor a konténer elindul, referenciát kap erre a partícióra:
[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
...
Íme, egy körübelüli statisztika a fájlok számáról az egyik noden:
[root@pcs13 ~]# find /vz/pfcache -type f | wc -l
45851
[root@pcs13 ~]# du -sck -h /vz/pfcache
2.4G /vz/pfcache
2.4G total
A pfcache működési elve a következő:
• A User-space Pfcached démon a fájl sha-1 hash-jét bejegyzi az adott fájl xattr attribútumába. A fájlokat nem mindet, hanem csak a /usr, /bin, /usr/sbin, /sbin, /lib, /lib64 könyvtárakban dolgozzák fel.
• Valószínű, hogy a megadott könyvtárakban található fájlok "közösek" lesznek, és több konténer is használni fogja őket;
• A Pfcached időszakosan statisztikákat gyűjt a fájlok olvasásáról a magból, elemzi azokat, és ha a fájlok használata gyakori, hozzáadja őket a cache-hez;
• A megadott könyvtárak eltérőek lehetnek, és a konfigurációs fájlokban állíthatók be.
• Fájl olvasásakor ellenőrzi, hogy tartalmazza-e a megadott hash-t a kiterjesztett attribútumok között (xattr). Ha igen, akkor egy "közös" fájl nyílik meg a konténer fájlja helyett. Ez a csere a konténer kódja számára észrevétlenül zajlik, és el van rejtve a magban;
• Fájl írásakor a hash érvénytelenné válik. Így a következő megnyitáskor már közvetlenül a konténer fájl fog megnyílni, nem a cache-je.
Ha a /vz/pfcache mappában lévő közös fájlokat a lap cache-ben tartjuk, spórolunk a cache használatával, valamint az IOPS számítással. Ahelyett, hogy tíz fájlt olvasnánk a lemezről, csak egyet olvasunk, amely közvetlenül a lap cache-be megy.
struct inode {
...
struct file *i_peer_file;
...
};
struct address_space {
...
struct list_head i_peer_list;
...
}
A fájlhoz tartozó VMA lista egyedi marad (deduplikálja a memóriát), és ritkábban olvasunk lemezről (spórolunk az IOPS-szal). A mi "közösünk" SSD-n van – további sebességnyereséget biztosít.
Példa egy fájl cache-elésére a /bin/bash esetében:
[root@pcs13 ~]# ls -li /vz/root/2388/bin/bash
524650 -rwxr-xr-x 1 root root 1021112 2018. okt. 7. /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
A számítások hatékonysága .
Ez a szkript végigjárja az összes konténert a csomóponton, kiszámítva minden konténer cache-elt fájljait.
[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
A Pfcache cache 831 MB memóriát használ
A konténerekben lévő pfcached fájlok összesített használata 39837 MB memória
Pfcache hatékonyság: 39006 MB
Így körülbelül 40 gigabyte-t spórolunk meg a konténerekben, ezek a cache-ből fognak betöltődni.
Ahhoz, hogy ez a mechanizmus még jobban működjön, a csomóponton a lehető "legjobb" VPS-eket kell elhelyezni. Például azokat, amelyeknél a felhasználónak nincs gyökér hozzáférése, és ahol egy kiterjesztett kép alapján van beállítva a környezet.
A pfcache működését a konfigurációs fájlon keresztül lehet finomhangolni.
/etc/vz/pfcache.conf
MINSIZE, MAXSIZE – a fájl gyorsítótárazásának minimális/máximális mérete
TIMEOUT – a gyorsítótárazási kísérletek közötti időtúllépés
A teljes paraméterlistával megismerhető .
Forrás: habr.com
