#  Танком по кокаину
Difrex (mira, 14) → All  –  13:01:20 2015-10-13

Кокаин(Yandex cocaine) прекрасен своей масштабируемостью. Вот, например, есть у нас всего лишь одна нода и на ней всего одно приложение на nodejs. При возрастании нагрузки кокс сам запустит необходимое количество процессов nodejs, чтобы отдавать данные с минимальным откликом.

Приложения изолируются друг от друга. Путей изоляции несколько: proccess spawning, cgroups, docker.

И так, посмотрим на продакшен:
====
$ cocaine-tool info
{
"apps": {
"site_web-1.0": {
"load-median": 0,
"profile": "spawn",
"sessions": {
"pending": 0
},
"queue": {
"depth": 0,
"capacity": 100
},
"state": "running",
"slaves": {
"active": 0,
"idle": 1,
"capacity": 10
}
},
"test_site_web-1.1": {
"load-median": 0,
"profile": "spawn",
"sessions": {
"pending": 0
},
"queue": {
"depth": 0,
"capacity": 100
},
"state": "running",
"slaves": {
"active": 0,
"idle": 0,
"capacity": 10
}
}
}
}
====
У нас запущенно два приложения: продакшен, в который смотрит интернет и тест в который смотрит локальная сеть. Нагрузка в данный момент минимальна.

Попробуем пустить нагрузку. Я буду использовать yandex-tank. С линейным возрастанием количества запросов в секунду, а потом с постоянным RPS в течении 5 минут. Будем нагружать тестовое приложение :). Пульки заряжаем:
====
line(1,1000,1m) const(1, 800, 5m)
====

Пулим и смотрим, что происходит с кокаином:
====
ps aux | grep cocaine | wc -l
134
====

Кокс сам пустил дофигища своих форков, чтобы нормально отрабатывать запросы.

Довольно слов! А графики вот:
* http://storage1.static.itmages.ru/i/15/1013/h_1444741070_8277061_cc04f720d3.png
* http://storage5.static.itmages.ru/i/15/1013/h_1444741087_2241184_6546648048.png
* http://storage8.static.itmages.ru/i/15/1013/h_1444741106_8000667_4fdb5b0c2e.png
* http://storage9.static.itmages.ru/i/15/1013/h_1444741121_4574491_424dfe3a4b.png
* http://storage1.static.itmages.ru/i/15/1013/h_1444741138_7778052_204ac4dc16.png

Выглядит неплохо? Нагрузка, конечно небольшая и синтетическая.

А если вдруг нам станет не хватать этого сервера, то мы сходим на другой и зупустим приложение и там
====
cocaine-tool -h another.cox.node.example.com app start --name uber-app-0.1 --profile spawn --timeout 20000
====

И локатор найдет его там, и нагрузку пустит как надо, и будет хорошо, да.