Echo Coser 1.0
lionet — 27.06.2011 Сегодня утром запустили наш специализированный HTTP сервер Coser на полную мощность.Я рассказывал об этом сервере в посте «Заменяем Erlang на Си», говоря, что он делает 16,500+ HTTP/1.0 (non-persistent) запросов в секунду на половине одного ядра. В смысле, утыкается в амазоновскую сеть раньше, чем в CPU.
Так вот, после этого поста сервер вырос с 1500 до 7900 LOC, начал уметь HTTP/1.1 keep-alive, gzip и научился отдавать наши LiveUpdate запросы. LiveUpdate запросы периодически делаются виджетами комментариев на странице для того, чтобы подгрузить новые записи. Пока виджетами запросы на сервер делаются периодически (раз в несколько секунд), но в дальнейшем полностью уйдёт на COMET.
На HTTP/1.1+keep-alive сервер нельзя нагрузить несколькими десятками тысяч запросов — раньше сдыхают генераторы запросов (три сервера). Поэтому я пока нагрузочное тестирование до логического конца не доводил. Тем более, что пока мы работаем на старой версии Haproxy в качестве балансера, у которой нет Keep-Alive в сторону сервера. Будем менять Haproxy на новый — заодно и посмотрим.
Некоторые спрашивали про экономический эффект этой системы. Отвечаю. Четыре ядра с работающими на них Coser'ом, загруженных на 45%, убирают ~75% нагрузки с шестидесяти машин с Erlang'ом. То есть, экономия получается в 45*$(c1.medium) = $6.1k в месяц. Это на текущем трафике, который прямо сейчас есть. А ведь он более чем в два раза возрос за последний месяц!
Вот график загрузки одной из машин с Эрлангом:
Больше чем в два раза убрана нагрузка в 15:00. Это в текущем релизе, в котором на Coser переброшены LiveUpdates. А при первом своём релизе Coser убрал тоже два раза с эрланговских боксов, когда начал обслуживать Counters. Отсюда цифра ~75% (сначала половину убрали, потом половину от оставшейся половины).
Прямо сейчас четыре ядра с косером (каждое загружено на 35-45%) обслуживают в сумме 700 мегабит в секунду трафика (480 down, 220 up) с суммарной скоростью 23560 запроса в секунду.
Косер поддерживает gzip-компрессию. Примерно 3.5% динамических ответов косера идут в сторону клиента сжатыми. Это в сумме 3188 запросов в секунду, 169 мегабит в секунду на этих четырёх половинках ядер.
Про gzip в серверах надо сказать отдельное спасибо Microsoft'у. Если вы не в курсе, зачем веб-сервера часто первые два килобайта ответа заполняют пробелами — посмотрите, приколитесь: http://support.microsoft.com/kb/312496.
Про поддержку ASN.1 в Erlange надо сказать отдельное спасибо команде-разработчикам эрланга. Эрланг не умеет парсить правильно значение 0.0 (ноль) в типе REAL. Смеялсо. Баг отослан: http://erlang.org/pipermail/erlang-bugs/2011-June/002486.html
Про поддержку ASN.1 в asn1c надо сказать мне, ибо я тоже там баг нашёл в парсинге REAL. Не смеялсо. https://github.com/vlm/asn1c/commit/0959f.
|
</> |