#  Systemd рулит
Difrex (mira, 14) → All  –  09:00:22 2017-08-28

Сабж.

Покупал тут для своего проекта виртуалочки на DO. Пытался уложиться в мелкий бюджет - 20$.

В итоге взял 3x512RAM + 1x1GRAM.

В таких условиях нужно ограничивать сервисы. Городить туда Mesos очень не хотелось. В итоге все нагрузочно протестировалось на локальной виртуалке, посчиталось на листочке, сколько какому сервису нужно по-минимуму памяти и проца, написаль шаблоны для юнитов systemd - теперь можно динамически менять ресурсы для каждого из сервисов. Будь то докер или нет. :)

Пример юнита /etc/systemd/system/some_service@.service:

====
[Unit]
Description=Some API
After=docker.service

[Service]
Type=simple
ExecStart=/usr/bin/docker run --name some_service%i some_service:latest --listen 0.0.0.0:15282 -d
ExecStop=/usr/bin/docker stop -t 0 some_service%i
ExecStopPost=/usr/bin/docker rm -f some_service%i
MemoryLimit=8M
Restart=always

[Install]
WantedBy=multi-user.target
====

Все, теперь после тестов известно какую нагрузку выдерживает сервис при таких ограничениях. Снимаем метрики, при достижении порога, просто стартуем еще один:

====
systemctl start some_service@2
====

А нагрузку отбалансировать можно nginx, тем более в нем уже давно есть стриминг и lua, так что haproxy больше ненужен.