Флешка в помощь веб-серверу или ReadyBoost для Ubuntu Linux
Многие из админов задаются вопросом, а может ли USB(MMC/SD…) флешка увеличить скорость работы веб-сервера. И если может, то что для этого нужно сделать?
Я задал этот вопрос на хабре, но конструктивного ответа так и не получил. Недавно в мое распоряжение поступил неттоп, который необходимо было превратить в веб-сервер. Памяти там – 4Gb, и я думал, как бы оптимальнее использовать флешку. Вначале я создал на ней 16Gb Swap-раздел. На HDD тоже был swap-разделб но с меньшим приоритетом. Т.е. как только система начинает сваппиться, она делает это на флешку, когда заканчивается раздел на неё, то уже на hdd. Нагрузил систему, и понял что она даже не сваппиться на него, пямяти хватает. В итоге научить сваппиться её у меня так и не получилось (я тюнил nginx и php5-fpm).
Потом я решил уменьшить swap-раздел до 4Gb, а на остальном месте сделал логический раздел, куда в последствии поместил наш веб-сайт. Дальше дело техники и двух симлинков. Вам же я хочу представить результаты нагрузочного тестирования.
Тест N1: байткод кэшер(APC) выключен, сайт на HDD
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
andrey@vaio:~$ ab -c 10 -n 100 http://site.com/ru/ Server Software: nginx/0.7.67 Server Hostname: site.com Server Port: 80 Document Path: /ru/ Document Length: 227003 bytes Concurrency Level: 10 Time taken for tests: 49.495 seconds Complete requests: 100 Failed requests: 97 (Connect: 0, Receive: 0, Length: 97, Exceptions: 0) Write errors: 0 Total transferred: 22717282 bytes HTML transferred: 22701482 bytes Requests per second: 2.02 [#/sec](mean) Time per request: 4949.536 [ms] (mean) Time per request: 494.954 [ms] (mean, across all concurrent requests) Transfer rate: 448.22 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.6 0 4 Processing: 1608 4887 6304.9 2894 25443 Waiting: 1555 4685 6267.0 2692 25130 Total: 1609 4887 6304.9 2894 25444 Percentage of the requests served within a certain time (ms) 50% 2894 66% 2960 75% 3007 80% 3047 90% 21153 95% 24528 98% 25413 99% 25444 100% 25444 (longest request) |
Тест N 2: байткод кэшер(APC) выключен, сайт на флешке
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
andrey@vaio:~$ ab -c 10 -n 100 http://site.com/ru/ Server Software: nginx/0.7.67 Server Hostname: site.com Server Port: 80 Document Path: /ru/ Document Length: 227015 bytes Concurrency Level: 10 Time taken for tests: 28.184 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 22717300 bytes HTML transferred: 22701500 bytes Requests per second: 3.55 [#/sec] (mean) Time per request: 2818.386 [ms] (mean) Time per request: 281.839 [ms] (mean, across all concurrent requests) Transfer rate: 787.15 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 1.0 0 7 Processing: 2251 2780 165.4 2798 3122 Waiting: 2174 2589 147.1 2591 2937 Total: 2252 2781 165.4 2798 3125 WARNING: The median and mean for the initial connection time are not within a normal deviation These results are probably not that reliable. Percentage of the requests served within a certain time (ms) 50% 2798 66% 2841 75% 2877 80% 2904 90% 2994 95% 3054 98% 3116 99% 3125 100% 3125 (longest request) andrey@vaio:~$ |
Теперь включим байткод кэшер и посмотрим на результаты.
Тест N 3: байткод кэшер(APC) включен, сайт на флешке
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
andrey@vaio:~$ ab -c 10 -n 100 http://site.com/ru/ Server Software: nginx/0.7.67 Server Hostname: site.com Server Port: 80 Document Path: /ru/ Document Length: 227015 bytes Concurrency Level: 10 Time taken for tests: 18.112 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 22717300 bytes HTML transferred: 22701500 bytes Requests per second: 5.52 [#/sec] (mean) Time per request: 1811.173 [ms] (mean) Time per request: 181.117 [ms] (mean, across all concurrent requests) Transfer rate: 1224.89 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 2.7 0 15 Processing: 1041 1780 302.7 1726 2590 Waiting: 1010 1686 273.6 1635 2439 Total: 1042 1781 302.4 1726 2591 Percentage of the requests served within a certain time (ms) 50% 1726 66% 1796 75% 1848 80% 1880 90% 2456 95% 2567 98% 2588 99% 2591 100% 2591 (longest request) andrey@vaio:~$ |
Тест N 4: байткод кэшер(APC) включен, сайт на флешке
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
andrey@vaio:~$ ab -c 10 -n 100 http://site.com/ru/ Server Software: nginx/0.7.67 Server Hostname: site.com Server Port: 80 Document Path: /ru/ Document Length: 226947 bytes Concurrency Level: 10 Time taken for tests: 16.609 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 22710500 bytes HTML transferred: 22694700 bytes Requests per second: 6.02 [#/sec] (mean) Time per request: 1660.929 [ms] (mean) Time per request: 166.093 [ms] (mean, across all concurrent requests) Transfer rate: 1335.29 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 1.3 0 9 Processing: 1222 1641 174.1 1654 2118 Waiting: 1194 1554 164.2 1564 2005 Total: 1223 1642 174.0 1655 2118 Percentage of the requests served within a certain time (ms) 50% 1655 66% 1695 75% 1744 80% 1781 90% 1883 95% 1935 98% 2038 99% 2118 100% 2118 (longest request) andrey@vaio:~$ |
Выводы
Когда сайт байткод кэшер выключен и размещён на HDD скорость обработки запросов составляет 2,02 запроса в секунду, когда на флешке – 3,55. Ускорение на 75%.
Когда байткод кэшер включен, то разрыв становится кораздо меньше. 5,52 для HDD, 6,02 для флешки. Ускорение – 9% Оно и понятно, ведь в этом случае уменьшаются и обращения к диску (флешке).
Безопасность
Надо понимать, что флешка – ненадежный ресурс. Она может внезапно выйти из строя, могут закончиться циклы перезаписи или случиться ещё что-нибудь. Поэтому:
– Помещайти на флешку файлы, которые меняются редко. Например, движок сайта на php вполне подходит, т.к. сессии хранятся в БД, кэш в memcached, а файлы сайта меняются только при деплое.
– Используйте отложенную запись при монтировании флешки. Этим вы сократите количество циклов перезаписи. Отключите обновление даты последнего доступа к файлу и директории, также позвольте системе кешировать операции записи на диск. Для этого монтируем файловую систему со следующими опциями: async,nodiratime,noatime,barrier=0. (‘barrier=0’ неоправданный риск, если на этом же разделе находится база данных)
– Отключите access_log у Nginx
– Можно увеличить таймаут между сбросом «грязных» буферов vm.dirty_writeback_centisecs в /etc/sysctl.conf. У меня установлено vm.dirty_writeback_centisecs = 15000
– Не храните важные данные на флешке. Будьте готовы их потерять. В данном случае на флешке находится только актуальная копия веб-сайта, бекапы (которые кстати делаются при каждом деплое) находяться в другом месте.
– Создайте для флешки исключение в /etc/updatedb.conf. Добавьте /media/flash (точка монтирования) в PRUNEPATHS
– Приминение клиентской оптимизации: css-спрайты, все css — в один файл, все js — в один файл
– Эти тесты учитывали только скорость загрузки самого php файла, но не скорость отдачи статики. С флешки статика отдается быстрее, чем с HDD.
– Не доверяйте чужому мнению, проводите свои тесты для своей ситуации, чтобы выяснить, а надо ли оно вам 🙂
Класс. Молодец.
Windows Defender по умолчанию включён. Эта утилита призвана защитить вашу систему от вредоносных и шпионских программ, которые занесены в “чёрные списки” Microsoft. Но для полной защиты всё же следует установить антивирус.