Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: gunzip и балансер для memcached-а
Hello!
On Sun, Feb 10, 2008 at 01:12:57PM +0300, Михаил Монашёв wrote:
Здравствуйте,
Мы тут написали несколько патчиков http://openhack.ru/nginx-patched .
1. Балансировщик запросов к мемкашеду. Сейчас каждый запрос стучится
по всем мемкашедам апстрима пока не найдёт нужного ключика. Это
конечно быстро, но неэффективно, если мемкашедов много. Балансер
http://openhack.ru/nginx-patched/wiki/MemcachedHash позволяет
обращаться сразу к нужному мемкашеду. Реализовано 2 алгоритма
вычисления нужного мемкашеда: остаток от деления на количество
серверов и Кетама. Последний позволяет добавлять новые мемкашеды с
лишь частичным перераспределением ключиков между мемкашедами. Эти два
алгоритма также реализованы в нашем перловом модуле
http://openhack.ru/Cache-Memcached-Fast/wiki/Ru .
2. Поддержка 502, 503, 504 и 507 ответов от бэкендов в
proxy_next_upstream. Если на бэкенде стоит nginx , а за ним Апач, то
падение/торможение апача приведёт к возврату 502 или 504 ошибки и она
отдастся юзеру, что не всегда хорошо. В proxy_next_upstream добавлены
вышеперечисленные коды ответов, дабы избегать подобных ситуаций.
Правда над быть осторожным с их использованием, ибо тяжёлый запрос
может завалить все бэкенды, вместо одного. Большое спасибо Максиму
Дунину за частичную реализацию.
3. http://openhack.ru/nginx-patched/wiki/MemcachedGzip - расжимает
полученный от мемкашеда ответ, если он был сжат и браузер хочет
получить несжатый контент. Экономится память мемкашеда. Экономится
процессор: разсжатие дешевле сжатия и большинству браузером нужен
именно сжатый контент.
Сейчас nginx со всеми этими изменениями работает на рабочих серверах
моих проектов. Т.е. можно предположить, что оно стабильное.
Буду признателен за тестирование, пожелания и комментарии. Можно или
тут или в листе на http://list.openhack.ru/Lists/talk/ .
Если Максим Дунин не против (ибо он автор части кода, связанной с
proxy_next_upstream), то хотелось бы включить все перечисленные выше
Максим Дунин не против.
разработки в главную ветку. ngx_http_upstream_memcached_hash_module
реализован в виде независимого модуля, но потребовал 3-х мелких
патчиков в nginx. memcached_gzip - это доработанный
ngx_http_gzip_module.
Я думаю было бы дофига полезно представить патчи с пояснениями
отдельно, а модули - отдельно.
Maxim Dounin
|