Вычисления и EC2

Что это такое

EC2 — это виртуальная машина, которую вы арендуете посекундно: вы выбираете семейство инстансов, образ операционной системы и размер, а AWS загружает её для вас. Вокруг неё выстроена лестница управляемых вычислений — группы автомасштабирования, контейнерные сервисы и функции, каждая из которых берёт на себя решение, которое иначе принимали бы вы. Вычисления — то, с чего обычно начинается счёт в AWS, поэтому первый полезный навык — не «запустить сервер», а «выбрать самое маленькое, что справится с задачей».

Почему это важно

Привычка, унаследованная от физического железа, — закладывать запас на худший случай и оставлять машину работать. В облаке обе половины этой привычки стоят денег: инстанс завышенного размера простаивает по полной цене, а остановленная и забытая машина продолжает платить за свой диск. Лестница управляемых сервисов существует потому, что большинству нагрузок вообще не нужен сервер общего назначения. Подъём по лестнице убирает обновления, планирование мощностей и часть обработки отказов — ценой контроля и некоторых жёстких ограничений. Понимание, где вы стоите на этой лестнице, отличает счёт, следящий за нагрузкой, от счёта, следящего за численностью вашей команды.

Ключевые идеи

Инстанс — это размер, образ и место в сети

Запустить его значит выбрать, сколько CPU и памяти (семейство и размер инстанса), какое ПО он запускает (Amazon Machine Image) и где он живёт в сети. Машина рассчитана на замену: её можно уничтожить и создать из того же образа идентичную. Это верно только если на её локальном диске не лежит ничего важного.

образ (ПО)  +  тип инстанса (железо)  +  подсеть (сеть)  ->  один инстанс

Управляемые вычисления поднимают вас по лестнице

Над «сырыми» инстансами стоят группы автомасштабирования, которые заменяют отказавшие машины и добавляют новые под нагрузкой; оркестраторы, которые запускают контейнеры без принадлежащих вам хостов; и функции, которые работают только во время обработки запроса. Каждая ступень убирает операционную работу и добавляет ограничения. Выбирайте самую низкую ступень, удовлетворяющую требованию, потому что каждая ступень выше стоит либо контроля, либо предсказуемости.

ec2  ->  группа автомасштабирования  ->  контейнерный сервис  ->  функция
больше операций ->  меньше операций
больше контроля ->  меньше контроля

Стоимость следует форме нагрузки

Ровная нагрузка дешевле всего на зарезервированном или долгосрочном плане; пиковая должна масштабироваться до нуля или почти до него; пакетная задача не должна быть постоянно работающим сервером. Цена инстанса также зависит от семейства и региона, поэтому одна и та же работа может стоить в несколько раз дороже в зависимости от того, где и как она выполняется. Подбор правильного размера — постоянная деятельность, а не разовое решение при запуске.

Образ — это контракт

Поскольку машина рассчитана на замену, всё, что ей нужно, должно воспроизводиться из её образа или из скрипта запуска. Сервер, который полгода патчили руками, больше не воспроизводим, и его замена поведёт себя иначе. Именно хранение определения образа в системе контроля версий делает заменяемость реальной.

Лимиты — часть интерфейса

У каждого управляемого сервиса есть квоты — сколько инстансов, какого размера, как долго может работать функция — и эти квоты часть проекта. Нагрузка, которой нужна более долгая функция или больший инстанс, чем допускает сервис, относится на ступень ниже, и обнаружить это после того, как вы построили на неправильной ступени, дорого.

Практика

Подберите размер инстанса по измерениям

Возьмите известный вам сервис и наблюдаемое потребление CPU и памяти в пике. Выберите семейство и размер инстанса, которые укладываются в этот пик с небольшим запасом, и запишите, почему вы отвергли следующий размер.

Готово, когда: вы можете назвать ожидаемую пиковую загрузку и разницу в месячной стоимости между вашим выбором и следующим размером.

Проведите запрос по лестнице управляемых сервисов

Возьмите небольшой HTTP-эндпоинт и опишите, как он выглядел бы инстансом, контейнером за балансировщиком нагрузки и функцией. Для каждого перечислите, чем вы больше не управляете и чего больше не можете.

Готово, когда: вы можете назвать одно требование, которое исключает вариант с функцией, или сказать, что такого нет.

Частые ошибки

  • Размер под худший случай, оставленный работать — вы платите за мощность, простаивающую большую часть месяца; исправить: подбирайте под измеренный пик, а пики отдайте автомасштабированию.
  • Хранение важного состояния на диске инстанса — уничтожение машины его разрушает; исправить: держите состояние в управляемом хранилище, а инстанс считайте заменяемым.
  • Патчинг руками вместо пересборки образа — замены перестают совпадать с машинами, которые вы тестировали; исправить: определите образ в системе контроля версий и развёртывайте из него.
  • Использование управляемого сервиса для неподходящей нагрузки — квота или тайм-аут всплывает поздно и вынуждает переделку; исправить: проверьте лимиты сервиса, прежде чем на него полагаться.
  • Игнорирование региона и семейства в цене — одна и та же нагрузка может стоить в несколько раз дороже; исправить: сравнивайте цену осознанно, а не по привычке.

Что читать дальше

  • AWS (06-cloud-devops/02-aws) — аккаунт, каталог и словарь, которые предполагает этот дочерний урок.
  • Хранилище и базы данных (06-cloud-devops/02-aws/02-storage-and-databases) — куда на самом деле уходит состояние, которое вы только что убрали с инстанса.