Skip to content

balancer concept

Aleksandr Kartashov edited this page Mar 3, 2011 · 4 revisions

Делаем балансер из легковесного HTTP-сервера

Решение проблемы балансировки нагрузки может выглядеть так: на одной машине поднимаем легковесный HTTP-сервер, который по протоколу FastCGI взаимодействует с серверами нашего приложения.

Настройка lighttpd

Рассмотрим пример настройки сервера lighttpd.

 server.modules = ( 
     "mod_access",
     "mod_compress",
     "mod_fastcgi"
)

В этой части конфигурационного файла перечислены модули, загружаемые lighttpd при запуске. В частности, поддержка протокола FastCGI реализована в виде модуля mod_fastcgi.

server.bind              = "127.0.0.1"
server.port              = "4000"

В этой части конфигурационного файла указаны адрес интерфейса и порт, которые будет прослушивать lighttpd.

server.document-root     = "/var/www"
server.username          = "www-data"
server.groupname         = "www-data"

В этой части конфигурационного файла указаны имена пользователя и группы, от имени которых будет работать lighttpd после сброса привилегий суперпользователя.

index-file.names         = ( "index.php", "index.html",
                            "index.htm", "default.htm",
                           " index.lighttpd.html" )

fastcgi.server = ( 
  "/fcgi" => ( 
               ( 
                 "host" => "127.0.0.1", 
                 "port" => 3000, 
                 "check-local" => "disable", 
                 "docroot" => "/"
               ) 
             ) 
)

В этой части конфигурационного файла мы настраиваем модуль mod_fastcgi следующим образом: все запросы к каталогу fcgi будут перенапрявляться серверу, который прослушивает интерфейс 127.0.0.1:3000.

Вопросы интеграции

Мне пока не совсем ясно, как подружить FastCGI и генератор контента: в моем случае я сам написал логику по работе с протоколом FastCGI, но это такое решение не годится, если мы будем использовать какой-нибудь веб-фреймворк - фреймворк сам будет слушать порт TCP, а поскольку HTTP вкладывается в FastCGI, то фреймворк должен сам уметь работать с FastCGI.

Поэтому возникают два вопроса:

  1. Будем ли мы использовать XFresh? Честно говоря, он мне не очень понравился, я не очень хорошо проникся его идеологией, хотя возможно, это самое простое решение.
  2. Если да, то нужно узнать, поддерживает ли он FastCGI.

Возможные решения

Видимо, придется отказаться от FastCGI. Я нашел несколько готовых решений для балансера:

  • pen - балансер для прикоадных протоколов, работающих поверх TCP. Видимо, самое простое решение: для запуска достаточно дать команду pen <порт> <хост1>:<порт1> <хост2>:<порт2> ...
  • pound
  • balance

Остальные посмоторю, если будет в этом необъодимость.

Clone this wiki locally