Системы с несколькими потребителями, как правило, следят за тем, как потребители расходуют вычислительные ресурсы. Следят разными способами: через квоты, привязанные к чеку, через жёсткие и мягкие лимиты. Учёт некоторых ресурсов превращается в продолжительный квест.
Один такой квест мы рассмотрим на примере приватного вычислительного облака Яндекса. Потребители облака, сервисы Яндекса, запускаются в миллионах контейнеров на более, чем 100 тысячах серверных ЭВМ. Через контейнер потребителям облака предоставляется гарантия на вычислительные ресурсы облака.
Наиболее важным ресурсом вычислительного облака является время, которое треды в контейнере могут выполняться на ядрах центральных процессоров. Процессорное время напрямую влияет на количество обрабатываемых запросов. Закончилось выделенное процессорное время — пользователь начал получать пятисотки.
Мы в очередной раз столкнулись с тем, что контейнеры с одной и той же начинкой под сходной нагрузкой имеют разный резерв свободного процессорного времени. Быстро стало ясно, что влияние оказывает скорость, с которой данные передаются между оперативной памятью и кэшем процессора. Придумать решение заняло больше времени, но мы справились.