Вычисления и 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) — куда на самом деле уходит состояние, которое вы только что убрали с инстанса.