«Нам нужно это поддержать»
Недавно пришлось вспоминать, как считать необходимый размер ЗИП-склада. Казалось бы – чего там считать? А результат оказался не совсем интуитивным.
Дано:
Планировали поставку 180 одинаковых сетевых коммутаторов производства одной из недружественных стран (назовем их условно Gin Berry, ягодки того самого куста).
Заказчик попросил поддержку на 1 год с заменами Next Business Day.
Вендорской поддержки нет (совсем).
Прилетает вопрос от коллеги: «Как думаешь, сколько нам нужно в ЗИП на год? 2-х коммутаторов наверное не хватит?»
Ладно, отложим в сторону вопрос обновлений, исправления багов и т.д. А что с заменами? Интуитивно кажется: ну ок, если всего 180, штук 6 за год сгорит точно – двух не хватит. С другой стороны, давно такое не считал, надо бы вспомнить методику.

Шаг 1. Исходные данные
Единственная цифра, которая у нас есть от производителя – это MTBF (Mean Time Between Failures). Для наших коммутаторов это, допустим, 250 000 часов.
Здесь пытливый ум может задаться вопросом – а что такое MTBF, что означает эта цифра? Значит ли это, что свич проработает 28 лет? Это маркетинг? Отчасти да, но проблема г��убже.
Чтобы понять физику процесса, представьте Город Студентов (любители Маркеса могут представить Макондо вскоре после того, как его основал Хосе Аркадио Буэндиа).
В этом городе живут только 20-летние. Никто не умирает от старости (до этого еще далеко). Но люди умирают от несчастных случаев. Статистика говорит: на 250 000 жителей приходится 1 несчастный случай в день (упал кирпич, ДТП и т.д.). Если поделить одно на другое, получится, что "среднее время между смертями" (MTBF) для жителя – 250 000 дней (685 лет). Значит ли это, что 20-летний студент проживет 685 лет? Нет. Он состарится и умрет в 80 (это его Lifetime, если медицина не придумает что-то радикальное).
Врет ли нам цифра MTBF? Нет. Цифра нужна, например, ритуальной службе не чтобы предсказать судьбу одного человека, а чтобы знать интенсивность потока смертей: «На каждые 250 000 жителей нужен 1 гроб в день».
Шаг 2. Считаем вероятность отказа одного устройства
Воспользуемся экспоненциальной моделью распределения отказов.
Год эксплуатации
часов.
Интенсивность отказов
.
Вероятность того, что один конкретный коммутатор выйдет из строя за год:
Подставляем числа:
Вывод: Каждый коммутатор имеет шанс 3,4% «отъехать» в течение года.

Шаг 3. Масштабируем на количество
У нас парк из 180 устройств. Чему равно математическое ожидание (среднее ожидаемое количество) отказов?
Округлим до 6,2 отказов в год.
Многие на этом останавливаются. «Ага, в среднем сгорит 6 штук. Значит, и на склад берем 6 штук». Это ошибка, так делать не стоит.
Среднее значение означает, что в 50% случаев вам этого хватит, а в 50% - нет. Если сгорит 7, 8 или 10 устройств - вы сорвали SLA и испортили репутацию. Нам нужен запас прочности.
Шаг 4. Добавляем паранойи
Поскольку отказы – события редкие и (в идеале) независимые, поток отказов подчиняется распределению Пуассона.
Нам нужно найти такое число запасных частей (), чтобы вероятность того, что реальное число отказов не превысит
, была достаточно высокой (например, 95% или 99%).
Для распределения Пуассона стандартное отклонение () равно корню из матожидания:
Применим правило «двух сигм». Диапазон в нормальном распределении (к которому стремится Пуассон) покрывает правую часть "хвоста" событий с вероятностью около 97.5%.
Считаем необходимый ЗИП:
Округляем до целого — 11 устройств.
Проверим по кумулятивной функции распределения Пуассона (Poisson CDF) при :
,
.
Отлично! С 11 устройствами мы покрываем риски на 97,5%.

Итоговый вердикт
В ответ на запрос коллеги я ответил следующее:
Матожидание потерь в год: 6 устройств.
Необходимый запас на год (с учетом рисков): 11 устройств.
Вывод: Если мы положим на склад 11 штук, то с вероятностью 97,5% мы пройдем год без проблем с нехваткой оборудования.

Нюансы реального мира
Конечно, наш "метод Ванги" имеет свои ограничения, о которых стоит помнить:
Bathtub Curve (U-кривая): В первый год эксплуатации интенсивность отказов может быть выше из-за заводского брака. MTBF не факт, что это учитывает, но на практике начало эксплуатации самое опасное. Лет через 7 со старением оборудования интенсивность отказов тоже будет возрастать.
Зависимые отказы: Если в серверной скакнет напряжение и выжжет половину стойки, никакой ЗИП по Пуассону вас не спасет.
Человеческий фактор: Кривые руки в формулу тоже не заложены.
Но такой расчет в любом случае лучше, чем "пол, палец, потолок". Он дает обоснованную цифру для бюджета и понимание уровня риска.

P.S.
Для тех, кто Python любит больше, чем калькулятор:
from scipy.stats import poisson
import math
n = 180
mtbf = 250000
hours = 8760
mu = n * (1 - math.exp(-hours/mtbf)) # Это матожидание
target_prob = 0.975
k = poisson.ppf(target_prob, mu)
print(f"Ожидаем отказов: {mu:.2f}")
print(f"Нужно устройств для {target_prob*100}% надежности: {int(k)}")