Как рассчитать общую надежность системы, зная надежность ее компонентов?

«Как рассчитать общую надежность системы, зная надежность ее компонентов?» — вопрос из категории Архитектура, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Общая надежность системы рассчитывается на основе того, как ее компоненты соединены между собой. Два основных типа соединения — последовательное и параллельное.

Надежность (R) — это вероятность безотказной работы, измеряемая от 0.0 (100% отказ) до 1.0 (100% надежность).

1. Последовательное соединение

Система выходит из строя, если отказывает хотя бы один компонент. Общая надежность всегда ниже надежности самого ненадежного компонента.

  • Формула: R_total = R₁ * R₂ * ... * Rₙ
import numpy as np

def series_reliability(reliabilities: list[float]) -> float:
    """Рассчитывает надежность для последовательного соединения."""
    return np.prod(reliabilities)

# Пример: два компонента с надежностью 99% и 95%
r = series_reliability([0.99, 0.95])
# r ≈ 0.9405 (94.05%)

2. Параллельное соединение (резервирование)

Система выходит из строя, только если отказывают все компоненты. Общая надежность всегда выше надежности самого надежного компонента.

  • Формула: R_total = 1 - (1 - R₁) * (1 - R₂) * ... * (1 - Rₙ)
import numpy as np

def parallel_reliability(reliabilities: list[float]) -> float:
    """Рассчитывает надежность для параллельного соединения."""
    # Вероятности отказа для каждого компонента
    failure_probabilities = [1 - r for r in reliabilities]
    # Вероятность отказа всей системы (все компоненты отказали)
    total_failure_probability = np.prod(failure_probabilities)
    return 1 - total_failure_probability

# Пример: два компонента с надежностью 90% каждый
r = parallel_reliability([0.90, 0.90])
# r = 0.99 (99%)

Для сложных систем со смешанным соединением расчет ведется по частям: сначала вычисляется надежность параллельных блоков, а затем они рассматриваются как единые компоненты в общей последовательной цепи.