Burstable EC2 VPN: кредиты CPU Standard или Unlimited?
Один режим ограничивает на базовом уровне, другой продолжает работу и может выставить счёт. Посчитайте арифметику кредитов, прежде чем маленькая инстанция станет вашим шлюзом.
Небольшой VPN-шлюз проходит тест скорости, кажется нормальным, а после обеда начинает деградировать. Инстанция не лгала во время теста; она тратила кредиты, заработанные в простое. Burstable-инстанции созданы именно для этого, поэтому короткий benchmark плохо предсказывает целый день передачи. Два режима кредитов к тому же отказывают по-разному, и выбор между ними — это настоящее решение.
Откуда тест скорости взял результат
Один кредит CPU — это один vCPU, работающий на полной загрузке одну минуту. Burstable-инстанция зарабатывает кредиты со скоростью своего базового уровня и тратит их, когда превышает этот уровень. Простаивающая ночь накапливает баланс; занятое утро его расходует.
Поэтому первый тест выглядит хорошо. У инстанции был накопленный бюджет, она потратила его на шифрование и сообщила здоровую скорость. Ничто в результате не говорит, что произойдёт, когда баланс достигнет нуля. Benchmark измерил всплеск, а всплеск — это то, что инстанция должна обеспечивать. Он ни разу не измерил устойчивое состояние, на которое вы собираетесь опираться.
Арифметика, которую нужно выполнить
Входные данные — процент базового уровня на vCPU, число vCPU, накопленный баланс и ожидаемая нагрузка. Только для иллюстрации возьмём гипотетическую инстанцию с двумя vCPU, базовым уровнем десять процентов на vCPU, 24 накопленными кредитами и одним полностью занятым vCPU, пока второй простаивает. Эти числа — объявленные входные данные, а не спецификация конкретного размера инстанции.
Earn rate: 2 x 10% x 60 = 12 credits/hour
Workload usage: 1 x 100% x 60 = 60 credits/hour
Net draw: 60 - 12 = 48 credits/hour
Accrued budget: 24 / 48 = 0.5 hoursПри этих допущениях бюджет исчезает примерно за полчаса. Фоновая работа, меняющаяся нагрузка и собственная бухгалтерия инстанции сдвигают результат, и ничто из этого не предсказывает пропускную способность VPN. Оно предсказывает, когда начнёт сказываться устойчивое ограничение.
Обратите внимание и на второе прочтение: в этом примере один занятый vCPU — это примерно половина совокупной ёмкости CPU. Умеренный общий процент может скрывать насыщенное ядро, поэтому смотрите на поведение по ядрам вместе с цифрами кредитов.
Standard и Unlimited: тот же ноль, другое значение
В режиме Standard исчерпанный баланс ограничивает устойчивую работу CPU в сторону базового уровня. Инстанция продолжает работать, только медленнее, и потолок предсказуем. В режиме Unlimited инстанция может продолжать брать излишние кредиты после того, как баланс дошёл до нуля, а устойчивое использование выше базового уровня может приводить к списаниям по правилам учёта сервиса.
Значит, CPUCreditBalance равный нулю означает ограничение в одном режиме и возможное выставление счёта в другом. Это всё сравнение, и именно поэтому читать метрику без режима вводит в заблуждение.
Излишек тоже не простой счёт за каждый кредит. Последующая работа ниже базового уровня может погашать излишнее потребление, и действуют другие условия списаний. Проверьте настроенный режим и текущие правила сервиса, а не полагайтесь на утверждение о бесплатном уровне из старого поста в блоге.
За чем следить во время реальной работы
Записывайте CPUCreditUsage и CPUCreditBalance рядом с длительностью и скоростью передачи. В Unlimited добавьте CPUSurplusCreditBalance и CPUSurplusCreditsCharged. Руководство AWS по мониторингу кредитов CPU объясняет, что сообщает каждый из них и как часто.
Повторите тест с репрезентативной параллельностью и достаточной длительностью, чтобы увидеть тренд, и запишите начальный баланс. Простаивающее утро и занятой день — не один и тот же эксперимент, даже с одинаковыми командами.
Ограничения, которые не CPU
Пропускная способность сети имеет собственный базовый уровень и поведение всплесков, а ограничения по пакетам в секунду или по соединениям могут сработать раньше CPU. Память важна, когда реализация VPN хранит состояние на каждое соединение, и маленькая инстанция может исчерпать её гораздо раньше, чем кредиты.
Поэтому здоровый баланс кредитов доказывает одно: бюджет CPU не является текущим ограничением. Он ничего не говорит о сетевом пути и ничего не говорит о том, что будет при удвоенной параллельности. Следите за сетевыми метриками в том же окне, что и метрики кредитов, чтобы падение пропускной способности имело вероятную причину, а не теорию.
Осознанный выбор базового уровня
Используйте измеренную устойчивую нагрузку, чтобы выбрать базовый уровень, или явно примите всплески и заложите их в бюджет. Оба ответа защитимы, когда записаны; ни один не защитим, когда выведен из чужого успешного видеопотока.
Если шлюз несёт нагрузку, относитесь к режиму кредитов как к части плана ёмкости, а не как к настройке по умолчанию, которую вы ни разу не открывали. Выбранный режим — это отказ, который вы можете предсказать.