В предходната статия говорихме за това как да подготвим онлайн магазина си и да си осигурим подходящата хостинг услуга за Black Friday, заедно с насоки за оптимизация.
В тази част ще дам някои основни препоръки, в случай че ползвате виртуален сървър или нает сървър.
Това са услуги, при които имате пълен root достъп и можете да ги анализирате по-подробно. От друга страна, няма толкова удобен параметър като процесорното време (CPU), който да ни помогне за анализа. И поради тази причина, статията ще е малко по-техническа.
На първо място, e необходимо да определим колко натоварване използва сървърът ни в момента.
В Linux има един основен измерител, който показва обобщена стойност на процесорното натоварване и той се нарича „Load Average“. Текущата му стойност можете да видите с командата „top“.
Колкото по-ниска е стойността, толкова по-добре (гледайте втората или третата стойност). За оптимално може да се използва правилото, че „Load Average“ не трябва да надвишава броя процесорни ядра на сървъра. Това доста грубо правило може да Ви даде ориентир за това колко е натоварен Вашият сървър. За максимална стойност може да се приеме, че „Load Average“ не трябва да надхвърля по стойност броя на ядрата умножен по 2, като тогава рискът сайтовете да не работят добре, е голям.
Ако допуснем, че натоварването на сървъра се повишава линейно с покачване на посетителите, то тогава лесно можем да предположим, че ако посещенията ни се увеличат двойно, натоварването също ще се увеличи двойно. И ако в този случай стойността за „Load Average“ става много висока, или може да се пристъпи към покачване на броя процесорни ядра, или към други оптимизации. Не забравяйте заедно с процесорните ядра да увеличите пропорционално и оперативната памет (RAM).
Ето един пример – притежаваме виртуален сървър с 4 процесорни ядра. На ден сайтът ни реализира 5000 разглеждания (Page Views). Средното натоварване (Load Average) е 0,5. Ако приемем, че на Black Friday ще реализирате 30000 разглеждания, то можем да изчислим:
0,5 * (30000 / 5000) = 3
Получихме 3. Ядрата на сървъра са 4, може да приемем, че той би понесъл натоварването. Ако обаче очакваме повечето посетители да са концентрирани в кратък период от време – например от 10:00 до 15:00 часа, е добре да се „застраховаме“ поне със 100%. Така получаваме:
3 * (1 + 100%) = 6
Така полученото натоварване надвишава броя на ядрата, с които разполагаме, и е добре да ги увеличим (в случая с 50% – от 4 на 6 ядра). В този случай е добре да увеличим пропорционално и паметта. Ако сървърът Ви е бил с 4GB памет, я направете поне на 6GB.
Тук е важно да обърнем внимание, че в много случаи, увеличаването на потребителите води до НЕлинейно увеличаване на натоварването, т.е. възможно е натоварването да се увеличи повече от очакваното, като това е много специфично за конкретното уеб приложение, което се ползва и за конкретните му настройки.
Посочените препоръки за изчисляване на необходимия ресурс са базови и не обхващат всички възможни случаи. Затова е най-добре да се консултирате със специалист, който да направи задълбочен анализ.
Ето и основните стъпки, които да предприемете за последващи оптимизации и проверки:
- Проверете откъде се генерира основното натоварване – от скриптовете или от базата от данни. По този начин ще можете да се концентрирате върху този аспект, който е по-критичен. Съветите ми за оптимизация на PHP и бавните заявки от предната статия важат на 100%.
- Уверете се, че натоварването на сървъра не е причинено от дискови операции. Можете да използвате командата „iostat“ и в резултата да обърнете внимание на стойността за „%iowait“. Ако тя е над 10%, е добре да помислите за оптимизация. Понякога добавянето на повече памет (RAM) на сървъра прави чудеса с iowait. Ако обаче той е причинен от много бавни заявки, трябва да поработите върху тях.
- Ако Вашата система го позволява, инсталирайте софтуер, който да кешира целите страници и да работи „пред“ Вашия уеб сървър. По този начин страниците ще се зареждат директно от кеша и няма да се правят обръщения към скриптовете и базата данни. Популярни софтуери за кеширане са Varnish или Nginx (работещ като reverse proxy). Обръщам внимание, че този процес може да бъде много времеемък и да има нужда от програмист, който да извърши промени по кода на системата Ви.
- Използвайте кеширане на обекти в самата система – например Memcache или Redis. Най-често ще Ви трябва разработчик, за да ги интегрира.
- Направете максимално статична ландинг страница, която да поеме първоначалния интерес на посетителите по време на Black Friday. Може да настроите cron job, който да я генерира от началната страница на сайта Ви.
- Проверете настройките на уеб сървъра, базата от данни и PHP – много често покрай по-сложните оптимизации се пропуска да се увеличат различни настройки на уеб сървъра и базата от данни. По този начин увеличаването на сървърните ресурси не дава ефект. Ако очаквате повече посетители, започнете с MaxClients на Apache и max_connections и max_user_connections на MySQL.
Ако все пак искате да проверите как се държи сървърът Ви с повече посетители, може да използвате Apache Bench. Това е програма, с която можете да симулирате повече едновременни посетители на сайта и да следите как се държи сървърът Ви. Повече информация за Apache Bench можете да намерите на официалния сайт: https://httpd.apache.org/docs/2.4/programs/ab.html
Ако имате нужда от допълнителна помощ за изпълняване на препоръките, нашите висококвалифицирани системни администратори са на разположение да Ви съдействат. Обръщам внимание обаче, че оптимизациите доста често е необходимо да се правят от опитен разработчик.
Black Friday наближава. Не отлагайте оптимизациите за последния момент, за да се възползвате от големите продажби максимално ефективно!