Инструкция по оптимизации быстродействия TS и Sutra TDS

Внимание! То что здесь описано делать не обязательно, так как Sutra/TS работают быстро и при стандартных настройках. Эта инструкция предназначена в осномном для тех у кого уж очень много трафика (миллионы) или сильно загруженный сервер.

Начиная с версии 1.9 Sutra TDS и 2.3 TS используют технологию FastCGI для обработки запросов, это позволило сократить время ответа сервера в 2 раза по сравнению с обычной CGI технологией.

Для справки: скорость работы FastCGI скриптов сравнима со скоростью работы самих модулей WEB-сервера, то есть "быстрее только чистый модуль" :)

По скорости работы с SutraTDS+FastCGI не сравнится никакой PHP/mod_perl скрипт, даже с использованием оптимизаторов.

В обычном режиме (без настройки) TS/Sutra TDS работают в нормальном режиме CGI. Для того чтобы включить FastCGI нужно попросить админов хостинга установить модуль mod_fastcgi для apache и добавить в конфиг httpd.conf строки:

StartServers 100 # - запускайте минимум 100 процессов апача при старте, можно больше
<IfModule mod_fastcgi.c>
        FastCgiConfig -maxClassProcesses 100 -init-start-delay 0 -idle-timeout 5 -listen-queue-depth 100 \
        									-startDelay 1 -maxProcesses 100 -autoUpdate \
        									-restart -restart-delay 5 -killInterval 300 -minProcesses 50
</IfModule>
Внимание! Не меняйте ничего в этой конфигурации даже если вам очень хочется!
После установки и настройки fastcgi модуля, нужно установить особую утилиту доступную в аське у саппорта. После этого нужно раскомментировать строки в .htaccess'а включающие FastCGI.
Как видите настройка FastCGI довольно трудоёмка и требует наличие грамотного админа.

Я рекомендую устанавливать FastCGI на трафике более 300k/сутки.

Как сделать TS/Sutra TDS еще быстрее

TS/Sutra TDS на большом трафике очень активно используют жесткий диск (все из-за подсистемы уников для работы в режиме реального времени). В связи с этим я отделил наиболее критические файлы в подкаталог memory/ для того чтобы его можно было разместить на RAM диске (в пямяти). Все файлы в этом каталоге являются временными, это значит что в случае перезагрузки или потери содержимого каталога в Sutra/TS ничего не сломается :)

Такая оптимизация позволяет увеличить скорость работы в 2-10ть раз. К сожалению большинство администраторов виртуальных хостингов в не позволяют использовать RAM диск, поэтому этот способ подходит в основном для пользователей со своими серверами.

Чтобы все это работало надо сказать админу такие слова:

  • Создать на сервере RAM диск размером 100-200 мегабайт (зависит от объёмов вашего трафика, чем больше тем больше) и примаунтить его к какому-нибудь каталогу, например /inmemory (на linux лучше использовать tmpfs)
  • Задать пермишены на RAM каталог чтобы скрипты Sutra/TS могли в него писать.
  • Удалить подкаталог memory/ из каталога sutra и создать вместо него ссылку на каталог RAM диска.
  • Ждать одну минуту и проверить работу.

    Если вы используете TS, тогда нужно сделать еще один RAM диск для memory/ подкаталога в каталоге ts

    Результаты теста производительности

    Брались 2 сервера (s1,s2) соединенные сетью 100Mbit, железо P4 2.2GHz 512Mb.

    На s1 ставилась Sutra TDS + FastCGI + RAM диск. В "eight" схеме создавались 10ть урлов перенаправлений. На s2 запускался "ab -c 10 -n 1000 http://s1/tds/in.cgi?eight". Результаты:

    Server Software:        Apache/1.3.33
    Server Hostname:        s1
    Server Port:            80
    
    Document Path:          /tds/in.cgi?eight
    Document Length:        0 bytes
    
    Concurrency Level:      10
    Time taken for tests:   2.235 seconds
    Complete requests:      1000
    Failed requests:        0
    Broken pipe errors:     0
    Non-2xx responses:      1000
    Total transferred:      352000 bytes
    HTML transferred:       0 bytes
    Requests per second:    447.43 [#/sec] (mean)
    Time per request:       22.35 [ms] (mean)
    Time per request:       2.23 [ms] (mean, across all concurrent requests)
    Transfer rate:          157.49 [Kbytes/sec] received
    

    Расшифровка для тех, кто не знаком с подобным способом тестирования бстродействия:

    Requests per second: 447.43 [#/sec] (mean), это около 38.000.000 запросов в сутки. На практике это можно смело делить на 2, итого Sutra TDS на среднем сервере устойчиво держит 20.000.000 трафа в сутки.