Лучшие DevOps практики и кейсы

Как уменьшить затраты на AWS EC2

AWS - самый часто используемый Cloud-провайдер, согласно исследованиям Statista. К сожалению, очень часто не придаем значения небольшим затратам, которые могут вылиться в огромные затраты в конце месяца. Несмотря на то что в AWS дает кучу инструментов для экономии и оптимизации затрат не очень многие их используют. В этой статье мы рассмотрим общие рекомендации, Reserved Instances, EC2 Spot, Spot Fleet, и Autoscaling groups.

В одной из статей мы уже рассмотрели общие советы по экономии на AWS, вкратце стоит:
  • выбирать минимальный инстанс, удовлетворяющий Вашим требованиям
  • отключайте все неиспользуемые AWS ресурсы
  • проверьте использование Amazon S3
  • анализ счетов
  • автомасштабирование

Reserved Instances

Вы можете легко сэкономить до 72% от цены на on-demand инстансы, резервируя используемые машины на 1 или 3-года для конкретной зоны доступности(местоположение сервера). Однако необходимо оплатить цену на год вперед сразу. Поэтому целесообразно резервировать инстансы, которые требуют постоянной работы, чтобы затраты, связанные с их запуском, могли быть снижены.

В зависимости от требований бизнеса, даже инстансы для не prod систем могут быть зарезервированы, если они требуются для продолжительной работы. Также может быть рассмотрено резервирование БД и даже CDN. Вы можете прочитать тут подробнее про Reserved Instances

Spot Instances

Согласно сайту AWS, вы можете сэкономить до 90% по сравнению с on-demand EC2 инстансами.

Также, стоит учитывать, что EC2 Spot работает со спросом и предложением для установки цен. Если кто-то другой заплатил больше и ему требуется EC2 сервер, то Spot Instance прекращает свою работу с двухминутной отсрочкой, чтобы удовлетворить этот спрос. При этом Spot инстансы не работают бесконечно. Мы должны строить нашу архитектуру, учитывая непредвиденные прерывания работы инстансов, следуя таким подходам:
  • Stateless - данные не сохраняются в оперативную или постоянную память сервера. Лучше записывать ваши данные в какую-либо БД или сохранять небольшие файлы в S3
  • Минимизация зависимостей, никакие части системы не должны зависеть от этого сервера
  • Множество зон доступность (AZ - Availability Zones) - чем больше зон доступности, тем больше инстансов вам будет доступно. Ваши пользователи смогут быстрее и комфортнее работать с сервисом. Поэтому рекомендуем, как минимум две AZ.

Spot Fleet

При обычном запросе на spot инстансы вы размещаете ставку на определенный тип в одной конкретной AZ и надеетесь, что получите ее. С помощью Spot Fleet вы можете запросить различные типы экземпляров, которые отвечают вашим требованиям. Кроме того, вы можете распределить ставку spot-fleet по нескольким AZ, чтобы увеличить вероятность получения инстанса. Такой подход значительно увеличивает шансы на то, что вы получите экземпляры, доступные по цене spot ставки.

Честно говоря, в большинстве случаев не имеет значения, какой именно сервер вы используете, если у него достаточно нужных ресурсов. Обычно нас интересуют CPU и объем RAM, а для ML/DL задач - GPU. Например, оба инстанса m4.xlarge и m5.xlarge имеют 16 ГБ оперативной памяти и 4 CPU. Поэтому имеет смысл запрашивать оба типа экземпляров с помощью Spot Fleet запроса, а Spot Fleet даст вам самый дешевый вариант. 

В случае с spot fleet, вы также можете применить специальные весовые коэффициенты для каждого типа инстанса. Взвешивание подсказывает spot fleet, какую общую производительность мы хотим. Например, нам нужен общий объем оперативной памяти в 10 ГБ, и мы выбираем два типа инстансов, один из которых имеет 2 ГБ, а другой - 4 ГБ.

Если мы присвоим каждому инстансу вес, равный объему оперативной памяти, то мы можем сказать спот флоту, чтобы он дал нам 10 единиц емкости. Spot fleet использует информацию о весе для обеспечения 10 единиц. Это могут быть пять экземпляров по 2 ГБ или два по 4 ГБ и один по 2 ГБ. Это не имеет значения. Мы все еще получаем в общей сложности 10 единиц или 10 ГБ емкости.

Для Spot Fleet нужно проектировать fault-tolerant систему, так же как и для обычных Spot инстансов, описанных в предыдущем пункте.

Настройка Autoscaling group

EC2 Autoscaling group позволяет вашим EC2 масштабироваться или отключать ненужные ресурсы в зависимости от нагрузки. Вы можете просмотреть настройки масштабирования на консоли с помощью описанных здесь шагов. Проанализируйте результат, чтобы увидеть, можно ли настроить политику масштабирования для добавления экземпляров менее агрессивно. Также проверьте настройки, чтобы уменьшить минимальное количество инстансов, которые обслуживают запросы конечных пользователей.

AWS предоставляет множество инструментов и выгодных предложений для экономии на стоимости EC2, как при регулярном и длительном пользовании, так и для непостоянных вычислений. Так же часть сервисов призывает cледовать хорошим практикам разработки, таким как 12 Factor App, чтобы сделать качество своих приложений лучше.

Если все еще остались вопросы или  вы хотите оптимизировать ваши затраты на AWS сервисы, пишите нам.

Статьи