Как Yahoo оптимизирует работу своих серверов

30.01.2006 15:34

В документе "Hacking Apache HTTP Server at Yahoo!" (PDF версия) рассказывается как организована работа Apache на серверах работающих под управлением FreeBSD и Linux в Yahoo, какие действия предпринимаются для того чтобы выжать максимальную производительность.

Во второй презентации "HTTP Caching and Cache-busting for Content Publishers" (PDF версия) говорится об используемых в Yahoo технологиях кэширования динамического и статического контента.

В 2002 году Yahoo перешла на использование PHP в качестве основного языка для web-разработки, в обзоре "PHP at Yahoo!" показано как удалось вписать PHP в инфраструктуру Yahoo и почему был выбран именно PHP. Основная дилемма была mod_php или mod_perl, по производительности при большой нагрузке mod_perl выигрывал, но требовал для работы больше памяти.

На сайте Игоря Сысоева можно найти интересный комментарий, по вопросу оптимизации через увеличение буфера сокета во FreeBSD, позволю себе процитировать текст:

"Время общения Apache с клиентом сведено к минимуму — ровно для того, чтобы скопировать запрос и ответ: сначала запрос клиента полностью принимается accept-фильтром httpready, а затем весь ответ записывается в огромный, 224K, буфер сокета, после чего сокет сразу же закрывается (-DNO_LINGCLOSE). У этого метода есть и преимущества, и недостатки. Один из недостатков — суммарный объём данных, который можно использовать под буфера сокетов (mbuf clusters) около 360M, по крайней мере, во FreeBSD/i386 4.x с адресным пространством ядра в 1G. Это означает, что при среднем размере ответа в 50K одна машина может обслуживать примерно до 7,000 одновременных соединений. Впрочем, во FreeBSD 6.0 и на amd64 этот объём должен быть больше. Кроме того, адресное пространство ядра может увеличить до 2G или даже до 3G. Одно из преимуществ — возможность быстро отдавать в большое TCP window клиента, но, с другой стороны, без keep-alive это окно приходится разгонять каждый раз заново."