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


Кокаин(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

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