Go sleep или как сэкономить на серверах
Бесчисленное количество раз в публикациях поднималась тема о том, как добиться стопроцентного uptime серверов. Для продакшена это очень важный показатель, с этим спорить никто не станет, но так ли он важен для dev-/тестового сервера?
Многие разработчики иногда поднимают маленький VPS за 5-10$ для собственных нужд: покопаться в новой технологии, проверить идеи или создать свой законченный продукт. Дешево и удобно. Но иногда проекты разрастаются и не помещаются на сервер с минимальным тарифом. Конечно, можно взять сервер побольше (свое же, родное) или пойти по другому пути, – платить только за используемое время работы. Платформ с таким функционалом сейчас много. Включил, поработал, выключил, заплатил пару центов.
Однако, это удобно пока разработчик на проекте один. С увеличением команды все чаще, люди, то забывают выключить сервер (из-за чего можно “попасть на бабки”), то наоборот выключают, когда кто-то еще работает, а если в проекте есть человек далекий от ИТ так это все становиться головной болью.
С этой проблемой наша команда столкнулись год назад, и нашли мы решение в Heroku. Нет, не в самом сервисе, а в идее заложенной в его бесплатном тарифе - когда приложение не используется - оно переходит в сон. То есть основная идея держать инстанс включенным пока к нему поступают запросы и отключать, когда их нет.
Рассмотрим экономическую сторону вопроса на примере самых популярных решений для тестовых серверов: собственное оборудование и VDS.
Вариант 1
Рассмотривая свой физический сервер отбросим вариант “рабочий станции” под сисадминской ногой. Все же сервером стоит называть машинку с Xeon процессором, аппаратным RAID-контроллером и минимум 1 Гбит сетевым подключением. Как пример, HP PROLIANT DL20 GEN9 (8RAM, 500Гб), средняя комплектация обойдется в 60,000 рублей. Так как часто дев сервера находятся в офисе, в эту цену заочно включаем поддержку как административную так и физическую.
Вариант 2
Второй вариант VDS. Эквивалентная мощность обойдется в среднем 2360 в месяц или 28,320 рублей в год. Если сравнивать с тем же физическим сервером, за теже деньги мы получаем 2 с половиной года. При этом нам не страшны перебои с электроэнергией, вопросами с помещением, и как большой плюс не нужно платить деньги сразу.
Решение
Для реализации варианта со сном возьмем Google Compute Engine, есть конечно Amazon EC2, но мы с ним не работали. Инстанс нужный нам n1-standard-2, в месяц с учетом скидки обойдется в 3068 рублей в месяц ($51.10 + $1 за диск). Дороже чем VDS, но мы же собираемся его усыплять! Как видно на графике ниже, в нашем случае, сервер востребован в среднем 4 часа в день.
С учетом этого сервер обойдется в среднем в 828 рублей месяц (13.05$ + $1 за диск) или 9,936 рублей в год - это эквивалент 6 лет в сравнении со своим сервером, или чуть меньше 3 лет по сравнению с VDS. Из дополнительных плюсов можно добавить экосистему Google Cloud со всеми его сервисами логирования, хранилищами (полезно для бейкапов) и т.д. Из минусов это колебание валюты плюс налог на гугл.
К сожалению, из-за того, что инстанс работает не постоянно, возникают сложности с деплоем приложений. Но, к счастью, в Google Compute Engine можно указать скрипт, который будет отрабатывать каждый раз при старте инстанса , что частично решает проблему. В нашем варианте при начальном запуске он ставит все зависимости. При последующих стартах инстанса собирает приложение или тянет Docker образ. Так же настроены git хуки, для обновления в реал-тайм режиме.
Подобное решение, подойдет далеко не всем, но как один из вариантов для маленьких и средних команд - вполне. Мы используем этот вариант чуть меньше полугода. Как итог мы смогли сэкономить на тестовых серверах и вложить деньги в более востребованные вещи.
Для упрощения работы был написан небольшой сервис, который останавливает и запускает инстансы по требованию - go-sleep.