# 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 больше ненужен.
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 больше ненужен.