[Moscow.pm] асинхронный код позволяет сильно сэкономить ресурсы серверов

Alexander Lourier aml на rulezz.ru
Пн Фев 9 05:43:44 PST 2015


>
> > Добавлять воркеров я уже не могу - их 50 штук на сервере выполняется, и
> > больше уже памяти нет.
> Хочу подробностей! Что это за воркеры такие злые? Почему асинхронному
> приложению эта память не понадобится? Может, и синхронному не нужна?
>

Онлайн-игра. В ней есть много локаций (на данный момент сейчас их 130518
штук). Про каждую локацию есть примерно килобайт данных. Игрок может
сделать запрос на прокладку пути из пункта A в пункт B. Надо загрузить граф
локаций, сделать поиск по нему, вернуть ответ игроку.

Связность локаций постоянно меняется (игроки открывают/закрывают порталы),
и граф надо перестраивать. Поэтому загрузить его один раз, а потом
отфоркать воркеров уже не получается. Поэтому каждый воркер должен держать
в памяти копию. 130 мегабайт. И это не единственные полезные вещи, которые
в памяти оседают. Есть и ещё всякое. В результате 50 воркеров едят 10 гигов
памяти.

Для решения этой проблемы у меня прокладкой пути занимается отдельный
сервис, который единственный держит в памяти граф всего мира. Недостаток
этого решения - latency. Если несколько клиентов хотят проложить путь, они
это делают по очереди, а процессоры воркеров в это время простаивают.

Если бы воркеры были асинхронными, то можно было бы запустить 8 воркеров
(по числу ядер на машине), и на каждый воркер хранилась бы всего одна копия
графа. Внезапно высвободилась бы куча памяти, которой бы нашлось лучшее
применение (дисковые кэши, memcached и т.д.)
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150209/702d3b61/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm