Флешка в помощь веб-серверу или ReadyBoost для Ubuntu Linux

// Декабрь 8th, 2010 // Аппаратное обеспечение, Веб-разработка

Многие из админов задаются вопросом, а может ли USB(MMC/SD…) флешка увеличить скорость работы веб-сервера. И если может, то что для этого нужно сделать?

Я задал этот вопрос на хабре, но конструктивного ответа так и не получил. Недавно в мое распоряжение поступил неттоп, который необходимо было превратить в веб-сервер. Памяти там — 4Gb, и я думал, как бы оптимальнее использовать флешку. Вначале я создал на ней 16Gb Swap-раздел. На HDD тоже был swap-разделб но с меньшим приоритетом. Т.е. как только система начинает сваппиться, она делает это на флешку, когда заканчивается раздел на неё, то уже на hdd. Нагрузил систему, и понял что она даже не сваппиться на него, пямяти хватает. В итоге научить сваппиться её у меня так и не получилось (я тюнил nginx и php5-fpm).

Потом я решил уменьшить swap-раздел до 4Gb, а на остальном месте сделал логический раздел, куда в последствии поместил наш веб-сайт. Дальше дело техники и двух симлинков. Вам же я хочу представить результаты нагрузочного тестирования.

Тест N1:  байткод кэшер(APC) выключен, сайт на HDD

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) выключен, сайт на флешке

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) включен, сайт на флешке

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) включен, сайт на флешке

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.

— Не доверяйте чужому мнению, проводите свои тесты для своей ситуации, чтобы выяснить, а надо ли оно вам :-)

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


4 Responses to “Флешка в помощь веб-серверу или ReadyBoost для Ubuntu Linux”

  1. […] в и всю статику в одной из прошлых заметок мы уже поместили на …, осталась динамика, а именно, вывод php-движка на Zend […]

  2. […] данных. Также недавно у меня проскочила заметка про флешку, которую мы использовали на мини-сервере и в связи с этим, небезынтересно было узнать, а как […]

  3. Александр:

    Windows Defender по умолчанию включён. Эта утилита призвана защитить вашу систему от вредоносных и шпионских программ, которые занесены в «чёрные списки» Microsoft. Но для полной защиты всё же следует установить антивирус.

Комментировать