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

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

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

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

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

Настройка RAM диска

Эта оптимизация позволяет увеличить скорость работы в 2-10ть раз. Способ подходит в основном для пользователей со своими серверами или vps.

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

  • Создай на сервере RAM диск размером 100-500 мегабайт (зависит от объёмов вашего трафика, чем больше тем больше) и примаунти его к подкаталогу memory/ который находится в каталоге скрипта sutra tds.
    На linux это можно сделать добавив в /etc/fstab строчку:

    shm /путь/к/скрипту/memory tmpfs defaults,size=512M 0 0

  • Проверь работу.

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

    Настройка FASTCGI

    Если вы используете серверную-мультидоменную версию скрипта, то FASTCGI настраивать не нужно (не будет работать).

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

    <IfModule mod_fcgid.c>
    	BusyTimeout 60
    	BusyScanInterval 60
    	ErrorScanInterval 3
    	ZombieScanInterval 3
    	ProcessLifeTime 3600
    	DefaultMaxClassProcessCount 25
    	IPCConnectTimeout 3
    	IPCCommTimeout 60
    </IfModule>
    
    После этого нужно раскомментировать строки в .htaccess'а включающие FastCGI (удалите символы "#" вначале строк) и fastcgi заработает. Убедиться в его работе очень просто - после его активации скрипт getos.cgi перестанет работать :) (это нормально). А также вам нужно отключить fastcgi для админки - для этого внутрь admin/.htaccess добавьте строку:
    AddHandler cgi-script .cgi
    

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

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

    Брались 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 трафа в сутки.