<br><br><div class="gmail_quote">22 августа 2012 г., 2:04 пользователь ShivaS <span dir="ltr"><<a href="mailto:nginx-forum@nginx.us" target="_blank">nginx-forum@nginx.us</a>></span> написал:<br><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
Добрый вечер,<br>
<br>
Возникла интересная возможность применения nginx в очень нагруженном<br>
проекте.<br>
<br>
Мы активно пользуемся Амазонон (ЕС2) и соответственно лоад балансером ELB,<br>
который на данном этапе делает оффлоад на SSL и общается с пуш серверами.<br>
Сервис достаточно большой, и на определенном этапе мы поняли, что ELB<br>
перестал справляться с нагрузкой, да и его вечное отсоединение соединений с<br>
пуш серверами уже надоело.<br>
<br>
Провели тестирование с nginx на одном из серверов в амазоне, которое<br>
показало неплохие результаты, но все уперлось в память.<br>
Значит надо много серверов с большим кол-вом памяти. На удивление, несмотря<br>
на SSL, процессоры вообще не напрягались и LA постоянно оставался < 1, что<br>
дает возможность брать сервера с большим кол-вом памяти, малым кол-во<br>
процессоров и экономить.<br></blockquote><div> </div><div>LA = Load Average, это показатель, который соответствует количеству процессов, ожидающих ввода-вывода. При высокой дисковой нагрузке, соотвественно упирается в потолок. В случае терминации SSL он и не должен расти больше единицы. </div>
<blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
<br>
Система: CentOS 6; nginx 1.2.3<br>
<br>
конфиг подправлял в паре мест.<br>
Вот тут:<br>
<br>
listen       *:443 default backlog=4096 so_keepalive=30m::10;<br>
<br>
И еще немного тут:<br>
<br>
worker_processes  8;<br>
worker_rlimit_nofile 204800;<br>
<br>
<br>
events  {<br>
        worker_connections  20000;<br>
        use epoll;<br>
        multi_accept on;<br>
  accept_mutex on;<br>
        }<br></blockquote><div> </div><div> </div><div>серьезный момент - сколько запросов делает один клиент ? если несколько (в нашей ситуации в среднем 5), то очень серьезный выигрыш получается за счет keepalive до клиента (у вас он не включен).</div>
<div> </div><div>в SSL очень дорогой хендшейк, он идет на несимметричной криптографии, keepalive позволяет уменьшить количество дорогих хендшейков. реально, CPU падает в разы (если один клиент делает несколько последовательных запросов и они попадают в одну keepalive-сессию)</div>
<div> </div><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
<br>
Стоит ли ставить много воркеров и малое кол-во коннекшенов на каждый или<br>
достаточно один и сразу выставить максимальное кол-во подсоединений? Диски<br>
не задействованы совсем.<br></blockquote><div> </div><div>один воркер может задействовать одно ядро. если воркеров меньше, чем ядер, то сервер будет недонагружен.</div><div> </div><div>с другой стороны, если у вас интенсивно используются механизмы, требующие согласования воркеров между собой  (например limit_req), то может быть оверхед на согласование.</div>
<div> </div><div>трассируйте, смотрите :-)</div><div> </div><div> </div><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">

Приведенные выше настройки использовались на сервере с 7ГБ памяти.<br>
каждый воркер берет память, а при 60кб на клиент, даже несколько сотен<br></blockquote><div> </div><div>версия nginx какая ? недавно пробегал патч (включенный в последние версии), отключающий компрессию на уровне SSL, заметно снижающий потребление памяти.</div>
<div> </div><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
мегабайт при большом кол-ве серверов может дать некоторый выигрыш.<br>
<br>
Использую ssl ciphers AES256-SHA, для относительной надежности и скорости.<br></blockquote><div> </div><div>современные процессоры умеют AES-NI инструкции, в openssl они есть начиная с 1.0.1 (или чуть раньше ?). мы такое тестили - отвал башки, в продакшен скоро будем запускать. на амазоне - не знаю, там же Xen ? посмотрите на /proc/cpuinfo, светится там AES ?</div>
<div> </div><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
<br>
стоит ли ставить OpenSSL 1.0.1? ECDHE не пользуем, да и тормознутый он (судя<br>
по бенчмаркам, которые мы гоняли) и в скорости обработки подсоединений и в<br>
объеме потребляемой памяти. Кроме этого, никаких преимуществ особо не нашел<br>
в 1.0.1<br></blockquote><div> </div><div>в 1.0.1 есть аппаратное ускорение AES. </div><div> </div><div>ECDHE - не более тормознутый, он быстрее за счет того, что эллиптическая криптография обеспечивает сопоставимую сложность при меньших ключах. вы случайно не такого же размера ключи выбирали ?</div>
<div> </div><div>у ECDHE минус в том, что он пока не очень поддерживается на стороне клиента. но не в производительности.</div><div> </div><div> </div><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">

Может, там что-то и подкручено, но меня интересует в основном потребление<br>
памяти, а разницы с 1.0 в тестах не заметил<br>
<br>
Кеш выставил, но шансы что клиент переподсоединиться на тот же сервер -<br>
минимальны, но сотню мегов не жалко ;-)<br></blockquote><div> </div><div>ssl_session_cache  ?</div><div>в приведенном конфиге ее нет. </div><div>покажите полный конфиг ?</div><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">

<br>
ну и sysctl соответственно тоже.<br>
<br>
Сейчас вот подумываем очень серьезно о полном переходе на nginx в качестве<br>
основного оффлоадера.<br></blockquote><div> </div><div>какая у вас нагрузка ?</div><div>мы держим 100-200к одновременных ssl-запросов на обычных серверах (и ни в какой потолок не упираемся).</div><div> </div><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">

Хотим на днях запустить полноценный продакшен тест (а может и финальный<br>
переход на nginx)<br>
<br>
Что еще можно подкрутить для уменьшения потребления памяти (если возможно<br>
вообще)?<br></blockquote><div> </div><div>GeoIP память тратит :-) </div><div>покажите nginx -V </div><div> </div><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">

Может быть еще на что-то надо обратить внимание, без чего хорошего<br>
перформанс не достигнуть?<br>
<br>
Понимаю, что чудес наверно ждать не стоит, но вдруг кто сталкивался с чем-то<br>
похожим и не спал ночами ;-)<br>
<br>
И еще вопрос многоуважаемым разработчикам:<br>
Когда планируется (и планируется ли вообще) поддержка CyaSSL?<br>
Промелькнуло пару постов, что вроде уже тесты идут, и по слухам потребление<br>
памяти должно сильно упасть.<br>
Я в траке искал, но может не там...ничего не нашел<br>
<br>
Спасибо!<br>
<br>
Posted at Nginx Forum: <a href="http://forum.nginx.org/read.php?21,229967,229967#msg-229967" target="_blank">http://forum.nginx.org/read.php?21,229967,229967#msg-229967</a><br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div><br>