Невеликий 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 не є поточним обмеженням. Він нічого не каже про мережевий шлях і нічого не каже про те, що буде за подвоєної паралельності. Стежте за мережевими метриками в тому самому вікні, що й метрики кредитів, щоб падіння пропускної здатності мало ймовірну причину, а не теорію.

Свідомий вибір базового рівня

Використовуйте виміряне усталене навантаження, щоб вибрати базовий рівень, або явно прийміть сплески й закладіть їх у бюджет. Обидві відповіді захищені, коли записані; жодна не захищена, коли виведена з чужого успішного відеопотоку.

Якщо шлюз несе навантаження, ставтеся до режиму кредитів як до частини плану ємності, а не як до налаштування за замовчуванням, яке ви жодного разу не відкривали. Обраний режим — це відмова, яку ви можете передбачити.

Схожі статті