JavaRush/ΠšΡƒΡ€ΡΡ‹/ΠœΠΎΠ΄ΡƒΠ»ΡŒ 5. Spring/ЛСкция 239: ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ состояния Circuit Breaker Π² Ρ€Π΅Π°Π»ΡŒΠ½...

ЛСкция 239: ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ состояния Circuit Breaker Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Π°

ΠœΡ‹ ΡƒΠΆΠ΅ успСли ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с основными ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΎΡ‚ΠΊΠ°Π·ΠΎΠ² Π² микросСрвисных систСмах ΠΈ ΡƒΠ³Π»ΡƒΠ±ΠΈΠ»ΠΈΡΡŒ Π² ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Circuit Breaker. ΠœΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ этот ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·ΠΎΡ€Π²Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΎΡ‚ΠΊΠ°Π·ΠΎΠ², прСдотвращая ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ сСрвисов с использованиСм состояний: Closed, Open ΠΈ Half-Open. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Circuit Breaker с использованиСм Resilience4j, настроили ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ запросы (Retry) ΠΈ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρ‹, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ fallback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, позволяя систСмС gracefully ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки. БСгодня ΠΌΡ‹ посмотрим, ΠΊΠ°ΠΊ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС Circuit Breaker Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наша систСма Π±Ρ‹Π»Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ, Π½ΠΎ ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ.


ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Circuit Breaker Π²Π°ΠΆΠ΅Π½ для систСмы

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ настроили ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Circuit Breaker, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Retry ΠΈ Fallback. БистСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ... Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ странноС происходит. НСкоторыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΆΠ°Π»ΡƒΡŽΡ‚ΡΡ Π½Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ нСдоступности Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡ‡Π΅ΠΌΡƒ это происходит? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Circuit Breaker постоянно находится Π² Open состоянии, ΠΈ Π²Ρ‹ ΠΎΠ± этом Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅! Π‘Π΅Π· ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ваша систСма β€” это Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ ящик, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ запросы.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Circuit Breaker ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚:

  • ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ пСрСрастут Π² катастрофу.
  • ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояния Circuit Breaker Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (сколько Ρ€Π°Π· сработало Open, сколько запросов ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π² Closed).
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ настройки Π½Π° основС Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Circuit Breaker

Для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Circuit Breaker ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Resilience4j, которая ΡƒΠΆΠ΅ встроСна Π² нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Resilience4j интСгрируСтся с Ρ‚Π°ΠΊΠΈΠΌΠΈ инструмСнтами, ΠΊΠ°ΠΊ:

  • Micrometer: ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ экспорт Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ²Ρ‹Π΅ систСмы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Prometheus.
  • Prometheus ΠΈ Grafana: ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ визуализация ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ.
  • Actuator: встроСнный Π² Spring Boot инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ основныС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ прилоТСния.

Настройка ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° для Resilience4j

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваш pom.xml (ΠΈΠ»ΠΈ build.gradle) ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ зависимости для Resilience4j ΠΈ Spring Boot Actuator. Если Π½Π΅Ρ‚, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΡ….

Настройка зависимостСй

Maven:

<dependencies>
    <!-- Resilience4j -->
    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-spring-boot2</artifactId>
        <version>1.7.1</version>
    </dependency>
    <!-- Micrometer для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠΌΠΈ -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
    <!-- Spring Boot Actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

Gradle:

dependencies {
    implementation 'io.github.resilience4j:resilience4j-spring-boot2:1.7.1'
    implementation 'io.micrometer:micrometer-registry-prometheus'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Resilience4j для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°

Resilience4j автоматичСски интСгрируСтся с micrometer, поэтому Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ убСдимся, Ρ‡Ρ‚ΠΎ Π² нашСм application.yml Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Actuator ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ.

management:
  endpoints:
    web:
      exposure:
        include: health, metrics, prometheus
  metrics:
    tags:
      application: my-spring-app

Π—Π΄Π΅ΡΡŒ:

  • ΠœΡ‹ добавляСм metrics ΠΈ prometheus ΠΊ доступным HTTP endpoint-Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ систСма ΠΌΠΎΠ³Π»Π° ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ для Circuit Breaker

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Circuit Breaker, Ссли Π²Ρ‹ Π΅Ρ‰Ρ‘ этого Π½Π΅ сдСлали, ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚.

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Service;

@Service
public class ExternalService {

    @CircuitBreaker(name = "externalService", fallbackMethod = "fallbackMethod")
    public String getDataFromExternalService() {
        // Π‘ΠΈΠΌΡƒΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ
        throw new RuntimeException("External service is not available");
    }

    public String fallbackMethod(Throwable throwable) {
        return "Fallback response";
    }
}

ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ для externalService Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ:

  • resilience4j_circuitbreaker_state: Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС.
  • resilience4j_circuitbreaker_calls: количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².
  • resilience4j_circuitbreaker_successful: ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹.
  • resilience4j_circuitbreaker_failed: Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹.

ВСстированиС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Ρ‡Π΅Ρ€Π΅Π· Actuator

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ запрос Π² Actuator:

curl http://localhost:8080/actuator/metrics

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ список ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ вашСм Circuit Breaker, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

curl http://localhost:8080/actuator/metrics/resilience4j.circuitbreaker.state

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚Π°:

{
  "name": "resilience4j.circuitbreaker.state",
  "measurements": [
    {
      "statistic": "value",
      "value": 1.0
    }
  ],
  "availableTags": [
    {
      "tag": "name",
      "values": ["externalService"]
    }
  ]
}

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1.0 соотвСтствуСт Closed ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ. Если Π±Ρ‹ состояниС Π±Ρ‹Π»ΠΎ Open, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ стало Π±Ρ‹ 2.0.


Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Prometheus

Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг: настроим Prometheus для сбора ΠΈ хранСния ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Prometheus

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» prometheus.yml с настройками:

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: 'spring-app'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['localhost:8080']

ЗапуститС Prometheus с этой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Prometheus Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн):

prometheus --config.file=prometheus.yml

ПослС этого Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ состоянии вашСго Circuit Breaker Π½Π°Ρ‡Π½ΡƒΡ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² Prometheus.


Визуализация ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Π² Grafana

Π‘ Prometheus ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Grafana для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Настройка Grafana

  1. УстановитС Grafana (доступна Ρ‡Π΅Ρ€Π΅Π· Docker, Homebrew, yum, apt ΠΈ Ρ‚.Π΄.).
  2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Prometheus ΠΊΠ°ΠΊ источник Π΄Π°Π½Π½Ρ‹Ρ…:
    • Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² Grafana, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² "Configuration" -> "Data Sources".
    • Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ URL Prometheus: http://localhost:9090.
  3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Dashboard:
    • Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ "Visualization" Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊ.
    • Π’Π²Π΅Π΄ΠΈΡ‚Π΅ запрос ΠΊ Prometheus, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
      resilience4j_circuitbreaker_state{name="externalService"}
    • НастройтС Π³Ρ€Π°Ρ„ΠΈΠΊ Π² соотвСтствии с вашими прСдпочтСниями.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

  1. НастраивайтС Π°Π»Π΅Ρ€Ρ‚Ρ‹: Ссли Circuit Breaker ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС Open, отправляйтС увСдомлСния Π² Slack, ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ инструмСнт ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.
  2. Π˜Π·ΡƒΡ‡Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ использования: Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ваша систСма справляСтся с Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ настроСк.
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ историчСскиС Π΄Π°Π½Π½Ρ‹Π΅: Prometheus позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Π°Π½Π°Π»ΠΈΠ·Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, вСроятно, стало ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, насколько Π²Π°ΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° состояниСм Circuit Breaker Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π΅Π΄ΡŒ Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ скаТСт Π²Π°ΠΌ: "Моя систСма Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡƒΠΏΠ°Π»Π°", Π²Ρ‹ смоТСтС спокойно ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ: "Π― ΡƒΠΆΠ΅ знаю, ΠΈ ΠΎΠ½Π° сама собой восстановится Ρ‡Π΅Ρ€Π΅Π· 10 сСкунд. ΠŸΡ€ΠΈΡΡ‚Π½ΠΎΠ³ΠΎ дня!"

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ
  • популярныС
  • Π½ΠΎΠ²Ρ‹Π΅
  • старыС
Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
Π£ этой страницы Π΅Ρ‰Π΅ Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ коммСнтария