12.07.2015 Views

img - Xakep Online

img - Xakep Online

img - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

SYN/ACKЕвгений Зобнин j1m@synack.ruНе спасоватьперед лавинойПОДГОТАВЛИВАЕМ ВЕБ-СЕРВЕР К ВЫСОКИМ НАГРУЗКАМПопулярность веб-страницы – не только благо, но и дополнительная головнаяболь сисадмина. Возрастая, поток посетителей создает большую нагрузку насервер, который со временем перестает справляться со своими обязанностями.В этот момент встает вопрос о покупке железа, который, тем не менее,можно отложить до лучших времен. Из этой статьи ты узнаешь, как заставитьсервер выдерживать нагрузки даже тогда, когда он отказывается это делать.Ïîïóëÿðíîñòü âåá-ñòðàíèöû — íå òîëüêî áëàãî, íî è äîïîëíèòåëüíàÿãîëîâíàÿ áîëü ñèñàäìèíà. Âîçðàñòàÿ, ïîòîê ïîñåòèòåëåé ñîçäàåò âñåáîëüøóþ íàãðóçêó íà ñåðâåð, êîòîðûé ñî âðåìåíåì ïðîñòî ïåðåñòàåòñïðàâëÿòüñÿ ñî ñâîèìè îáÿçàííîñòÿìè.  ýòîò ìîìåíò âñòàåò âîïðîñ î ïîêóïêåæåëåçà, êîòîðûé, òåì íå ìåíåå, ìîæíî îòëîæèòü äî ëó÷øèõ âðåìåí.Èç ýòîé ñòàòüè òû óçíàåøü, êàê çàñòàâèòü ñåðâåð âûäåðæèâàòü íàãðóçêèäàæå òîãäà, êîãäà îí îòêàçûâàåòñÿ ýòî äåëàòü.Äîïóñòèì, òû èìååøü â ñâîåì ðàñïîðÿæåíèè âåá-ñåðâåð, íà êîòîðîìêðóòèòñÿ áîëåå-ìåíåå ïîñåùàåìûé äèíàìè÷åñêèé âåá-ñàéò, ñîçäàííûéíà áàçå îäíîé èç PHP'øíûõ CMS.  îáùåì, ñàìàÿ òèïè÷íàÿ äëÿ ñîâðåìåííîãîðóíåòà ñèòóàöèÿ. Ñàéò ðàçâèâàåòñÿ, ðàñòåò, ïîñåòèòåëåé ñòàíîâèòñÿâñå áîëüøå, è òû íà÷èíàåøü çàìå÷àòü ïîñòåïåííî âîçðàñòàþùèå çàäåðæêèâ ñêîðîñòè îòäà÷è êîíòåíòà. Ïðîñòåéøèå çàìåðû ïîêàçûâàþò, ÷òîñåðâåð óæå íå ñïðàâëÿåòñÿ ñ âîçëîæåííûìè íà íåãî çàäà÷àìè, è â ãîëîâóíà÷èíàþò çàêðàäûâàòüñÿ ïîðî÷íûå ìûñëè î ïîêóïêå æåëåçà (àðåíäå áîëååìîùíîãî âèðòóàëüíîãî ñåðâåðà). Íî ñïåøèòü íå ñòîèò, â áîëüøèíñòâåñëó÷àåâ ñèòóàöèþ ëåãêî îáðàòèòü â ñâîþ ïîëüçó.Ýòà ñòàòüÿ ðàññêàæåò òåáå î òîì, êàê îïòèìèçèðîâàòü ñåðâåð è êëèåíòñêóþ÷àñòü âåá-ñàéòà ïîä âûñîêóþ íàãðóçêó.  õîäå îáñóæäåíèÿ ìûçàòðîíåì ñëåäóþùèå òåìû:• Îïòèìèçàöèÿ Apache;• Îïòèìèçàöèÿ PHP;• Óñòàíîâêà eAccelerator;• Óñòàíîâêà Nginx â êà÷åñòâå ôðîíò-ýíäà;• Óñòàíîâêà Memcached;• Êëèåíòñêàÿ îïòèìèçàöèÿ.ОПТИМИЗАЦИЯ APACHEÊîðíåâîé êîìïîíåíò áîëüøèíñòâà ñîâðåìåííûõ âåá-ñàéòîâ — ýòî,êîíå÷íî æå, Apache. Îí çàðåêîìåíäîâàë ñåáÿ êàê íàèáîëåå ôóíêöèîíàëüíûé,ñòàáèëüíûé è óäîáíûé â èñïîëüçîâàíèè HTTP-ñåðâåð, êîòîðûéìîæíî èñïîëüçîâàòü êàê äëÿ îáñëóæèâàíèÿ äîìàøíåé âåá-ñòðàíèöû,òàê è äëÿ âûñîêîíàãðóæåííûõ êîðïîðàòèâíûõ èíòåðíåò-ïðîåêòîâ. Îäíàïðîáëåìà: Apache — î÷åíü òÿæåëîå ïðèëîæåíèå, æàäíîå äî ðåñóðñîâ ñåðâåðà.È ýòî äîëæíî áûòü ó÷òåíî ïðè åãî íàñòðîéêå. Âîò ñïèñîê ðåêîìåíäàöèé,êîòîðûå ëó÷øå âûïîëíÿòü ïðè ïîäãîòîâêå HTTP-ñåðâåðà ê ðàáîòå:• Ëüâèíàÿ äîëÿ ôóíêöèîíàëà Apache âûíåñåíà â çàãðóæàåìûå ìîäóëè,êîòîðûå ìîæíî àêòèâèðîâàòü èëè îòêëþ÷èòü ïóòåì ðåäàêòèðîâàíèÿêîíôèãóðàöèîííîãî ôàéëà (äèðåêòèâà LoadModule). Õîðîøåé ïðàêòèêîéÿâëÿåòñÿ òîòàëüíîå îòêëþ÷åíèå âñåõ íåèñïîëüçóåìûõ ìîäóëåé, ÷òîïîçâîëèò ïîâûñèòü ïðîèçâîäèòåëüíîñòü ñåðâåðà è ñîõðàíèòü îïåðàòèâíóþïàìÿòü.• Apache îáðàáàòûâàåò êàæäûé íîâûé çàïðîñ â ñîáñòâåííîì ïîòîêåèñïîëíåíèÿ è ïîçâîëÿåò èñïîëüçîâàòü ðàçíûå ïîäõîäû äëÿ âûïîëíåíèÿýòîé îïåðàöèè. Åñëè òû ñîáèðàë Apache2 èç èñõîäíèêîâ, òî ìîã çàìåòèòü,÷òî â îïöèÿõ ñáîðêè ïðèñóòñòâóåò âîçìîæíîñòü âûáîðà òàê íàçûâàåìîãîMPM. Ýòî è åñòü ìîäóëü ìóëüòè-ïðîöåññèíãà (Multi-processing module),èñïîëüçóåìûé äëÿ ðàñïàðàëëåëèâàíèÿ HTTP-ñåðâåðà. Âñåãî èõ ñóùåñòâóåòòðè:1. prefork — êëàññè÷åñêèé MPM, ðåàëèçóþùèé ìîäåëü ìóëüòè-ïðîöåññèíãà,èñïîëüçóåìóþ â Apache 1.3. Êàæäûé ïîòîê îáðàáàòûâàåòñÿ âîòäåëüíîì ïðîöåññå. Íå ñàìûé ïðîèçâîäèòåëüíûé âàðèàíò, íî íàèáîëååñòàáèëüíûé. Èñïîëüçóåòñÿ ïî óìîë÷àíèþ.2. worker — MPM, îñíîâàííûé íà ïîòîêàõ. Ñåðâåð ïîðîæäàåò íåñêîëüêîïðîöåññîâ, ïî íåñêîëüêî ïîòîêîâ â êàæäîì. Îäèí çàïðîñ — îäèí ïîòîê.Ïðîèçâîäèòåëüíåå prefork, íî ìåíåå ñòàáèëåí.3. event — ñîáûòèéíûé MPM. Âìåñòî ïîòîêîâ çàïðîñû îáðàáàòûâàþòñÿ,èñïîëüçóÿ ñîáûòèéíóþ ìîäåëü, ïîõîæóþ íà òó, ÷òî ïðèìåíÿåòñÿ â nginx.Íàèáîëåå ïðîèçâîäèòåëüíûé MPM, íî è íàèìåíåå ñòàáèëüíûé (íàõîäèòñÿâ ýêñïåðèìåíòàëüíîé ñòàäèè ðàçðàáîòêè).Ìíîãèå äèñòðèáóòèâû ïîçâîëÿþò óñòàíàâëèâàòü ðàçíûå âàðèàíòûApache, ðàçëè÷àþùèåñÿ èñïîëüçóåìûì MPM, èõ ëåãêî ìîæíî íàéòè âðåïîçèòîðèè ïî çàïðîñó «apache2-mpm».• Apache ïîçâîëÿåò êîíòðîëèðîâàòü ìàêñèìàëüíîå êîëè÷åñòâî ïîðîæäàåìûõïîòîêîâ ñ ïîìîùüþ îïöèè MaxClients. Íå ñòîèò óñòàíàâëèâàòüåå çíà÷åíèå ñëèøêîì áîëüøèì, èíà÷å â îïðåäåëåííûé ìîìåíò ñåðâåðèñ÷åðïàåò âñþ îïåðàòèâíóþ ïàìÿòü, íà÷íåò ñâîïèòü, è íåîáñëóæåííûìèîñòàíóòñÿ ãîðàçäî áîëüøå êëèåíòîâ, ÷åì áûëî áû ïðè çàäàíèè æåñòêîãîîãðàíè÷åíèÿ. Îïòèìàëüíûì ñ÷èòàåòñÿ çíà÷åíèå, ðàâíîå êîëè÷åñòâóïàìÿòè, äîñòóïíîé Apache, ïîäåëåííîå íà ìàêñèìàëüíûé ðàçìåð ïîðîæäåííîãîïîòîêà (ïðîâåðÿåòñÿ ñ ïîìîùüþ ps èëè top).• Êàê è ìíîãèå äðóãèå HTTP-ñåðâåðû, Apache ïîçâîëÿåò êîíòðîëèðîâàòüäëèòåëüíîñòü óäåðæàíèÿ ñîåäèíåíèé òèïà keep-alive, èñïîëüçóåìûõäëÿ ïåðåäà÷è íåñêîëüêèõ çàïðîñîâ/îòâåòîâ â ðàìêàõ îäíîãî ñîåäèíåíèÿ.Keep-alive ïîçâîëÿåò ýêîíîìèòü ðåñóðñû ñåðâåðà, íå âûíóæäàÿ åãîñîçäàâàòü îòäåëüíûé ïîòîê íà êàæäóþ êàðòèíêó, CSS è ïðî÷èå ýëåìåíòûñòðàíèöû. Îäíàêî ñëèøêîì äîëãî òàêîå ñîåäèíåíèå äåðæàòü îòêðûòûìíå ñòîèò, ïîòîìó êàê íà ýòî òîæå óõîäÿò ðåñóðñû. Õîðîøèì çíà÷åíèåìXÀÊÅÐ 08 /139/ 10 127

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!