PFCACHE технологиясын колдонуу менен түйүндөгү контейнердин тыгыздыгын жогорулатуу

PFCACHE технологиясын колдонуу менен түйүндөгү контейнердин тыгыздыгын жогорулатуу

Хостинг провайдеринин максаттарынын бири акыркы колдонуучуларга сапаттуу кызмат көрсөтүү үчүн учурдагы жабдууларды максималдуу пайдалануу болуп саналат. Акыркы серверлердин ресурстары ар дайым чектелген, бирок жайгаштырылган кардар кызматтарынын саны, жана биздин учурда VPS жөнүндө сөз болуп жатат, олуттуу айырмаланышы мүмкүн. Кантип даракка чыгып, кесилген жердин астынан бургер жеш керектиги жөнүндө окуңуз.

VPS түйүнүндө кардарлар аны такыр сезбей тургандай кылып компакттоо ар кандай хостинг провайдеринин экономикалык көрсөткүчтөрүн жогорулатууга чоң жардам берет. Албетте, түйүн тигиштеринен жарылып кетпеши керек, эгерде ал контейнерлерге толгон болсо жана жүктүн ар кандай көтөрүлүшүн бардык кардарлар дароо сезет.

Бир түйүндө канча VPS жайгаштырылышы мүмкүн, көптөгөн факторлордон көз каранды, мисалы:

1. Түйүндүн аппараттык жабдыктарынын мүнөздөмөлөрү
2. VPS өлчөмү
3. VPSдеги жүктүн мүнөзү
4. Жыштыкты оптималдаштырууга жардам берген программалык камсыздоо технологиялары

Бул учурда биз Virtuozzo үчүн Pfcache технологиясын колдонуу тажрыйбабыз менен бөлүшөбүз.
Биз 6-бутакты колдонобуз, бирок айтылгандардын баары 7 үчүн да туура.

Pfcache – контейнерлердеги бирдей файлдарды өзүнчө жалпы аймакка бөлүп, контейнерлердеги IOPS жана оперативдик эстутумду дедупликациялоого жардам берген Virtuozzo механизми.

Чынында, ал турат:
1. Ядро коду
2. Колдонуучу-мейкиндик жин
3. Колдонуучу мейкиндиктин утилиталары

Түйүн тарабында биз файлдар түзүлө турган бүтүндөй бир бөлүмдү бөлөбүз, аны түйүндөгү бардык VPS түздөн-түз колдонот. Бул бөлүмдө блок-плуп түзүлүш орнотулган. Андан кийин, контейнер башталганда, ал бул бөлүм үчүн шилтеме алат:

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

Бул жерде биздин түйүндөрдүн бириндеги файлдардын саны боюнча болжолдуу статистика:

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

pfcache принциби төмөнкүдөй:
• Колдонуучу-мейкиндик демону Pfcached файлдын sha-1 хэштерин бул файлдын xattr атрибутуна жазат. Бардык файлдар иштетилбейт, бирок /usr, /bin, /usr/sbin, /sbin, /lib, /lib64 каталогдорунда гана

• Бул каталогдордогу файлдар "бөлүштүрүлөт" жана бир нече контейнерлер тарабынан колдонулушу мүмкүн;

• Pfcached мезгил-мезгили менен ядродон файлдарды окуу боюнча статистиканы чогултат, аны талдайт жана файлдарды кэшке кошот, эгерде алар көп колдонулса;

• Бул каталогдор ар түрдүү болушу мүмкүн жана конфигурация файлдарында конфигурацияланган.

• Файлды окуганда, анын xattr кеңейтилген атрибуттарында көрсөтүлгөн хэштин бар же жок экендиги текшерилет. Ал камтыса, контейнер файлынын ордуна "жалпы" файл ачылат. Бул алмаштыруу контейнер коду байкабай пайда болот жана ядродо жашырылган;

• Файлга жазганда хэш жараксыз деп табылат. Ошентип, кийинки жолу сиз аны ачканыңызда, анын кэши эмес, контейнер файлы ачылат.

/vz/pfcache'ден бөлүшүлгөн файлдарды беттин кэшинде сактоо менен биз бул кэште үнөмдөөгө, ошондой эле IOPSке үнөмдөөгө жетишебиз.Дисктен он файлды окуунун ордуна, биз бирөөнү окуйбуз, ал дароо бет кэшине өтөт.

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

Файл үчүн VMA тизмеси жалгыз бойдон калууда (биз эстутумду кайталайбыз) жана дисктен азыраак окулат (iops үнөмдөө). Биздин жалпы фонд SSDде жайгашкан - бул ылдамдыктын кошумча өсүшү.

/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

Биз пайдалануунун натыйжалуулугун эсептейбиз даяр сценарий.

Бул скрипт ар бир контейнердин кэштелген файлдарын эсептеп, түйүндөгү бардык контейнерлерден өтөт.

[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

Ошентип, эстутумдан биз контейнерлерде 40 гигабайтка жакын файлдарды сактайбыз, алар кэштен жүктөлөт.

Бул механизм дагы жакшыраак иштеши үчүн, түйүнгө эң "бирдей" VPS орнотуу керек. Мисалы, колдонуучунун тамырга кирүү мүмкүнчүлүгү жок жана орнотулган сүрөттүн чөйрөсү конфигурацияланган.

Сиз конфигурация файлы аркылуу pfcache'ди тууралай аласыз
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – кэштөө үчүн файлдын минималдуу/максималдуу өлчөмү
TIMEOUT – кэштөө аракеттеринин ортосундагы күтүү

Параметрлердин толук тизмесин көрө аласыз байланыш.

Source: www.habr.com

Комментарий кошуу