Сабж.
Покупал тут для своего проекта виртуалочки на 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 больше ненужен.