Praca czasami skłania do śmiesznych kombinacji, akuratnie u mnie często pojawia się problem “stabilności procesu”, za cholerę nie mam pojęcia czym ta stabilność mogłaby być mierzona, ale siedziałem i kombinowałem, jak takową opisać i to za pomocą zmiennego algorytmu. Głównie chodzi o zbieranie prostych danych, które potem w razie potrzeby należy podstawić pod algorytm, żeby uzyskać odpowiednią wartość liczbową, najlepiej reprezentowaną w przedziale od “kicha” do “zajebiście”.

Nazwałem sobie to:

Indeks Stabilności Procesu CI/CD

Indeks stabilności procesu $S$ służy do oceny, na ile proces CI/CD jest przewidywalny i odporny na zakłócenia. Im wartość indeksu bliższa 1, tym proces jest bardziej stabilny. Wartość poniżej 0.6 może sugerować problemy systemowe lub inżynierskie. W przykładzie chodzi o podejście a nie konkretne rozwiązanie, głównie na zadadzie normalizacji danych oraz określenia wzoru do którego można by podstawiać konkretne wartości wraz z wagami.

Wzór ogólny:

$$S = \frac{1}{1 + w_E \cdot \hat{E} + w_R \cdot \hat{R} + w_F \cdot \hat{F} + w_T \cdot \hat{T} + w_{Re} \cdot \hat{Re} + w_D \cdot \hat{D}}$$

Gdzie:

$\hat{E}$ — znormalizowana liczba zapytań do systemów zewnętrznych (External Calls)
$\hat{R}$ — znormalizowana konsumpcja zasobów (CPU, RAM, IO)
$\hat{F}$ — znormalizowana liczba błędnych przebiegów (Failures)
$\hat{T}$ — znormalizowany czas trwania procesu (Duration)
$\hat{Re}$ — znormalizowana liczba ponownych uruchomień procesu (Retries)
$\hat{D}$ — znormalizowana liczba błędów zależności zewnętrznych (Dependency Failures)

Wagi:

$$w_E + w_R + w_F + w_T + w_{Re} + w_D = 1$$

Dla równomiernego rozkładu:

$$w_E = w_R = w_F = w_T = w_{Re} = w_D = \frac{1}{6}$$

Normalizacja danych

Każda zmienna $X$ jest normalizowana do przedziału $[0, 1]$ przy pomocy wzoru:

$$\hat{X} = \frac{X - X_{\min}}{X_{\max} - X_{\min}}$$

Możliwa interpretacja:

Wartość indeksu ( S ) Znaczenie
0.85 – 1.00 Proces stabilny
0.65 – 0.85 Proces umiarkowanie stabilny
0.50 – 0.65 Oznaki niestabilności
< 0.50 Proces niestabilny (wymaga interwencji)

Przykład obliczenia indeksu stabilności

Załóżmy, że dla danego tygodnia mamy następujące wartości surowe:

Parametr Symbol Wartość Zakres obserwowany Normalizacja \( \hat{X} \)
Zapytania zewnętrzne \( E \) 25 [15, 40] \( \hat{E} = \frac{25 - 15}{40 - 15} = 0.4 \)
Konsumpcja CPU/h \( R \) 2.5 [2.0, 3.5] \( \hat{R} = \frac{2.5 - 2.0}{3.5 - 2.0} = 0.333 \)
Liczba błędów \( F \) 6 [2, 10] \( \hat{F} = \frac{6 - 2}{10 - 2} = 0.5 \)
Czas trwania (minuty) \( T \) 14 [11, 20] \( \hat{T} = \frac{14 - 11}{20 - 11} = 0.333 \)
Retry (ponowne uruchomienia) \( Re \) 2 [0, 5] \( \hat{Re} = \frac{2 - 0}{5 - 0} = 0.4 \)
Błędy zależności \( D \) 1 [0, 3] \( \hat{D} = \frac{1 - 0}{3 - 0} = 0.333 \)

Przyjmując równe wagi:

\[ w_E = w_R = w_F = w_T = w_{Re} = w_D = \frac{1}{6} \]

Obliczamy indeks stabilności:

\[ S = \frac{1}{1 + \frac{1}{6}(0.4 + 0.333 + 0.5 + 0.333 + 0.4 + 0.333)} = \frac{1}{1 + \frac{1}{6} \cdot 2.299} \approx \frac{1}{1 + 0.383} \approx 0.723 \]


Wniosek:
Dla podanych danych indeks stabilności wynosi około \(0.72\), co oznacza umiarkowaną stabilność procesu. Warto obserwować retry oraz błędy, które mają znaczący wpływ na ten wynik.

Oczywiście jest to proof of concept, parametery użyte we wzorze można zmienić, mi chodziło raczej o mindset rozwiązania i podejście do metryki. Zapraszam do komentowania, bo jestem ciekaw jakie macie na to pomysł.