Если сейчас запускать проект, то другие идеи, кроме того, чтобы разместиться в облаке не приходят. Облачная инфраструктура дает много преимуществ, но есть проблема — легко не уследить за тратами, забыв про выделенные ресурсы, закупив мощности больше необходимых или используя не самые эффективные решения.
Поэтому мы хотим поделиться советами, как сократить расходы в облаке, они помогут не наступить на грабли тем, кто сейчас в облако переходит и тем, кто уже работает с облачной инфраструктурой. Рекомендации, которые приведены ниже, мы даем нашим клиентам, основываясь на большом опыте работы со множеством облачных провайдеров. Поэтому эти советы вполне можно назвать универсальными.
Регулярно проверяйте неиспользуемые инстансы, volume, файлы в S3-хранилищах, аллоцированные IP-адреса
Обычно такая оптимизация не дает большого эффекта, но почти всегда есть какой-то "мусор", который можно прибрать и немного сэкономить. Но есть и исключения. Например, у одного клиента мы обнаружили неиспользуемые инстансы баз данных, созданные для dev-окружения, о существовании которых все забыли.
Постоянно оценивайте эффективность используемых ресурсов, особенно инстансов
Часто бывает так, что мощные инстансы почти не загружены и за ними не следят. Их оптимизация может принести значительную экономию средств. Например, когда инстанс создан мощным для случаев пиковой нагрузки, которая происходит несколько раз в неделю. Для этого стоит рассмотреть внедрение автомасштабирования, и не держать постоянно запущенным дорогой инстанс топовой конфигурации.
В некоторых случаях приложение может оказаться требовательным к CPU, но не требовательным к RAM или наоборот — тогда может оказаться, что держать несколько инстансов более простой конфигурации будет дешевле.
Используйте CDN для статического контента
Часто статический контент раздается с инстансов или S3, что дороже, чем с CDN (content delivery network). Так происходит из-за географической удаленности серверов от конечных пользователей. Когда статический контент раздается с удаленных серверов или хранилищ, это увеличивает задержку в доставке контента до юзеров, особенно если они находятся далеко. Когда множество пользователей запрашивают статические ресурсы с одного сервера, это может привести к перегрузке и замедлению отклика. CDN, напротив, предоставляют высокую пропускную способность и специализированы на эффективной доставке такого контента.
CDN спроектированы так, чтобы обслуживать миллионы запросов от пользователей одновременно, что делает их более эффективными для работы с большими нагрузками. Стоимость использования CDN обычно основывается на тарифном плане, который предоставляет фиксированные расценки за объем передачи данных или количество запросов. Это делает расходы более предсказуемыми и позволяет снизить затраты, особенно при большом объеме трафика.
Особенно это важно для сайтов СМИ или электронной коммерции, где количество изображений большое и составляет львиную долю нагрузки. Часто трафик составляет половину или более стоимости всех расходов на облако, и перевод трафика в CDN позволит сэкономить ресурсы.
Наглядный пример. К нам пришел клиент — магазин e-commerce по продаже ювелирных изделий, который переехал в облако. Они привычно разместили статические файлы с картинками товаров непосредственно на инстансах и оттуда их и отдавали — никто особо не думал о стоимости трафика, пока магазин был на выделенном хостинге.
Надо понимать что картинки в карточках товаров — это регулярная передача огромного объема информации. Посетители часто хотят рассмотреть украшения поближе, поэтому магазин загрузил изображения в высоком качестве. После переезда 90% расходов клиента в облаке составил трафик — те самые картинки. Перенос в CDN позволил сократить расходы на инфраструктуру в 4 раза.
Оцените, нужны ли вам управляемые managed-решения
On-demand m5.large инстанс c Apache Kafka в AWS стоит $0.21, в то время как обычный EC2-инстанс m5.large стоит $0.09, если вы уверены в том, что сможете эксплуатировать Apache Kafka сами, то сможете снизить расходы на облако в два раза. То же самое касается и managed-решений баз данных, мониторинга и других сервисов.
Не злоупотребляйте использованием GPU в облаке
GPU инстансы стоят дорого, очень дорого. Для обучения ML моделей существует множество сервисов, где вы можете взять видеокарту в аренду на время по цене ниже облачных. Для продакшен-задач может быть выгоднее использовать не-облачные решения. GPU-инстансы на Hetnzer начинаются от 100 евро в месяц. Для постоянных задач обучения может подойти и покупка видеокарты на Авито.
У одного из наших клиентов было 3 GPU-инстанса под 3 микросервиса, чтобы изолировать каждый микросервис. На самом деле с этим вычислительными задачами справлялся бы один более мощный инстанс, а железный сервер в выделенном хостинге стоил бы значительно дешевле.
Подумайте, действительно нужна ли вам резервная инфраструктура
Улучшение и отказоустойчивости может сильно увеличить расходы. Например, резервные инстансы и балансировщики для критического приложения могут поднять стоимость облака в два раза. Оцените, нужно ли вам это. Да, быть доступным 24/7 хочется, но действительно ли потенциальные потери стоят таких расходов?
Рассмотрите возможность применения spot-инстансов
Spot-инстансы — это один из видов виртуальных серверов, предоставляемых облачными провайдерами, такими как Amazon Web Services (AWS), Google Cloud Platform (GCP) и Microsoft Azure. Они обычно значительно дешевле, чем инстансы на основе оплаты по запросу (on-demand) и предоставляются с большой скидкой, что делает их привлекательными для тех, кто хочет снизить расходы на облачные ресурсы.
Такие виртуальные сервера предоставляются на основе доступности неиспользуемых вычислительных ресурсов в облаке. Это означает, что их можно получить только в том случае, если в облаке есть свободные ресурсы. Если эти ресурсы потребуются для других целей, spot-инстансы могут быть завершены с предварительным уведомлением. Исходя из этого такие инстансы идеально подходят для задач, которые могут быть прерваны и продолжены без серьезных последствий.
Обычно провайдеры облачных услуг предоставляют средства для автоматического сохранения состояния приложений и перезапуска задач после завершения spot-инстансов.
Дважды подумайте о переносе в облако приложений с большим объемом трафика или потреблением GPU
Локальные решения могут быть для требовательных проектов значительно дешевле. Например, мощный GPU-сервер у Hetzner обойдется в 2–3 раза дешевле аналогичного облачного инстанса. Это прозвучит противоречиво, но возможно, облако вам просто не нужно.
Если конфигурация проекта уже устаканилась и не требует больших изменений, то переезд на выделенные сервера может быть значительно дешевле. Вот, например, кейс о миграции на железо 37signals: https://world.hey.com/dhh/we-stand-to-save-7m-over-five-years-from-our-cloud-exit-53996caa
Осторожно используйте гранты на облачные сервисы
Легко создать сложную и дорогую инфраструктуру, из которой потом сложно выбраться. У нас был клиент, получивший $100k от AWS на создание инфраструктуры для стартапа. Команда разработчиков создала распределенную инфраструктуру, изолированную по отдельным стейджинг/девелопмент/продакшн окружениям, завязанную на сервисы Amazon стоимостью около 8 тысяч долларов в месяц.
К окончанию гранта стало понятно, что легко это инфраструктуру не сократить, максимум — урезать до 6–7 тысяч долларов в месяц, поэтому потребовался серьезный рефакторинг, который позволил сократить расходы до 2 тысяч долларов в месяц, но это заняло 3-4 месяца работ.
Оцените, какие ресурсы вы будете использовать на протяжении долгого времени и зарезервируйте их
Этот совет вытекает из предыдущего. Если покупаете облако вдолгую, есть смысл связаться с сейлз-менеджером, чтобы выкупить под себя гарантированные мощности на гарантированный период, так вполне можно получить хорошую скидку.
Рациональное использование облачных ресурсов позволяет оптимизировать затраты и избежать ненужных расходов. А правильное планирование и мониторинг помогут сделать облако по-настоящему эффективным. Следуйте нашим советам и затраты облачную инфраструктуру точно уменьшатся.
Если у вас есть, чем дополнить список этих советов, будем рады вашим комментариям! А также подписывайтесь на ТГ-канал ITSumma и блог ITSumma Хабре— там мы публикуем разные полезные материалы о том, как не набить себе шишек при работе с облачной инфраструктурой.
vagon333
В основном пользуемся AWS и on-prem.
Несмотря на удобный AWS Cost Explorer и другие инструменты для отслеживания пиков издержек, хорошо бы иметь инструмент для:
1. планирования издержек (cost extrapolation);
2. предупреждалку - динамика роста цены выносит ваш бюджет в трубу;
3. рекомендательный движок, который подскажет - а вот с этими сервисами лучше перейти on-prem.
Может кто случайно сталкивался с похожим инструментом?
xSVPx
Так есть же клоудвотч по текущему ожидаемому счету. Настраиваешь в четверть половину и три четверти бюджета и если приходят раньше чем в 1-2-3 недели, то явно что-то не по плану... но в целом Амазон - это не про экономию...