Бұл мақалада біз микрокештеуді талқылаймыз: оның не үшін қажет, қалай баптау керек және қандай қиындықтар кездесуі мүмкін.
Микрокештеу дегеніміз не?
Микрокештеу — бұл бет файлдарын толықтай жасайтын кэш түрі, ол бэкенд-серверге сұрау жасаудың орнына дайын бетті береді.
Мұндай кэштеудің негізгі кемшілігі, әрине, беттердің өте сирек жаңартылуы. Бірақ мұндай кэштеудің артықшылықтары қандай?
Келіңіздер, әлсіз сервер мен жеткілікті жылдам сайт жағдайын алайық, бірақ оған боттардан көп сұрау түседі. Олар бэкендті де, деректер базасын да жүктейді, бұл сайттың өнімділігінің төмендеуіне және оның баяу жүктелуіне әкеледі. Мұнда микрокештеу көмекке келеді: біз дайын беттерді ұсынамыз, бэкендті де, деректер базасын да жүктемей. Сондай-ақ, микрокештеу беттерді бірнеше есе жылдам жүктеуге мүмкіндік береді, өйткені әр сұрау үшін бэкендтен жауап күту қажет емес.
Мұндай кэш динамикалық сайттар мен әкімші панелінің беттері үшін жарамсыз, бірақ егер сізде, мысалы, күніне бір рет жаңартылатын бет болса, бұл тамаша нұсқа.
Енді микрокештеуді баптауға көшуге болады.
Микрокештеуді баптау
Ол үшін бізге кэшімізді сақтайтын директория қажет.
Бұл мақалада дисктегі орын ретінде ОЗУ-ның бір бөлігін пайдаланамыз, өйткені бұл файлдарды дискте сақтауынан тиімдірек.
Алдымен, біздің кэшімізді сақтайтын директорияны жасаймыз, біздің жағдайда /home/cache
:
mkdir /home/cache
1 ГБ ОЗУ-ны файлдар үшін орын ретінде монтируемыз:
mount -t tmpfs -o size=1G tmpfs /home/cache
Сондай-ақ, серверді әр іске қосқанда бұл кеңістікті монтирлеуді қосамыз (бұл жолды /etc/fstab
файлына қосу керек):
tmpfs /home/cache tmpfs rw,size=1G 0 0
Директория үшін қауіпсіз құқықтарды да орнатамыз:
chown www-data:www-data -R /home/cache
chmod 700 /home/cache
Дайын, біз кэш үшін орын дайындадық. Бұл шешімнің артықшылығы - серверді қайта іске қосқанда барлық кэш тазаланады.
Енді кэшпен жұмыс істеуге кедергі келтіретін ықтимал қиындықтарға назар аударамыз, және кэш файлдары жасалса да, ол жұмыс істемейтін себептер. Алдымен, PHP параметрін session.cache_limiter
public
етіп баптау керек, әйтпесе сайттың заголовкасында Pragma: no-cache
көрсетіледі, бұл кэшті дұрыс пайдалануға және жасауға мүмкіндік бермейді.
Екінші қиындық — сайттың .htaccess
файлына жол қосу керек. Кэш ескірмеуі үшін max-age
параметрін басқа кэштермен бірдей орнатуды ұсынамын:
Header set Cache-Control "max-age=300, public"
Енді біз кэшті пайдалануға кедергі келтірмейтіндігіне сенімді бола аламыз. Ең маңыздысын соңына қалдырамын, яғни Nginx-ті баптау.
Файлда /etc/nginx/nginx.conf
http
бөлімінде келесі жолдарды қосу керек:
proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
proxy_cache_valid any 5m;
proxy_cache_valid 200 5m;
proxy_cache_valid 404 15s;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
proxy_cache_lock on;
Сайттың конфигурация файлына location /
блогына келесі жолдарды қосу керек:
location / {
proxy_cache global_cache;
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_key $host$request_uri;
proxy_ignore_headers "Set-Cookie";
proxy_pass http://backend;
}
ISPManager үшін бұл жолдарды location @fallback
блогына қосу керек, өйткені барлық бэкендке сұраулар осы блок арқылы өтеді.
Енді конфигурацияда қосқан әр жолдың не үшін жауап беретінін түсіндіремін:
-
proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
- proxy_cache_path — кэш сақталатын жол.
- levels=1:2 — 3 деңгейден артық тереңдік пайдалануға болмайды (мысалы, 1:2:3). Сандар кэш директорияларының атауындағы символдар санын білдіреді, бұл баяу дисктерде жылдам жұмыс істеу үшін қажет. Егер тек
levels=1
пайдаланылса, баяу дисктерде кэшдің пайдасы аз болады, себебі көп файлдар жасалады. Дайын баптауды пайдалануды ұсынамын. - keys_zone=global_cache:100m — біздің сайттарымыздың жүгінетін аймағының атауы. Егер кэш
global_cache
аймағына бапталса, ол файлдарды/home/cache
директориясынан іздейді.100m
— кэш үшін атаулар аймағының өлшемі. - max_size=1g — кэшдің жалпы өлшемі.
- inactive=5m — кэш белсенді болып саналатын уақыт. Егер осы уақыт ішінде кэшге жүгінбесе, жүйе оны белсенді емес деп санап, жоюы мүмкін.
-
proxy_cache_valid any 5m;
— кэшдің сақталатын уақыты.any
барлық HTTP кодтары, арнайы көрсетілгендерден басқа, 5 минут бойы сақталады дегенді білдіреді. -
proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
— көрсетілген қателер кезінде ескірген кэшді пайдалануға мүмкіндік береді. -
proxy_cache_lock on;
— бірнеше сұраудан бірдей кэш жасауға мүмкіндік бермейді. -
proxy_cache global_cache;
— сайттың пайдаланатын кэш аймағын көрсетеді. -
proxy_cache_key $host$request_uri;
— кэш статусын тексеру. Егер заголовктаX-Cache-Status: HIT
болса, бәрі дұрыс бапталған. ЕгерMISS
болса, себептерді іздеу керек. -
proxy_ignore_headers "Set-Cookie";
— кэш жасауға мүмкіндік береді, кукилерді елемей. Мұнысыз кэшHIT
көрсетпейді, себебі әр сұрау бірегей болады. -
proxy_pass http://backend;
— мұнда бэкенд-сервердің IP және портын көрсету керек (мысалы,localhost:8080
, егер Apache2 бэкенд-сервер ретінде пайдаланылса).
Кэш статусын тексеру үшін команданы пайдалануға болады:
curl -I http://Сіздің_сайтыңыз
Жауапта X-Cache-Status: HIT
(немесе MISS
, BYPASS
) заголовы болады. HIT
-тан басқа барлық нәрсе — бұл қате.
Дайын. Біз сайтта микрокештеуді баптадық.
*Сайт articlesite.com мақала үшін арнайы жасалған.
Сондай-ақ, басқа пайдалы мақалаларды қарауды ұсынамыз: