# SLI/SLO/SLA ## Навигация - [🏠 Главная страница курса](../../../README.md) - [📚 Модуль 5](../README.md) --- ## SLI (Индикатор уровня сервиса) **SLI** — метрика, которая измеряет качество сервиса. ### Примеры SLI: - **Availability**: `successful_requests / total_requests` - **Latency**: `requests_completed_within_threshold / total_requests` - **Throughput**: `successful_requests_per_second` ```java @Component public class SLICalculator { public double calculateAvailability(String service, Duration window) { Counter successfulRequests = Counter.builder("requests.successful") .tag("service", service) .register(meterRegistry); Counter totalRequests = Counter.builder("requests.total") .tag("service", service) .register(meterRegistry); double successful = successfulRequests.count(); double total = totalRequests.count(); return total > 0 ? successful / total : 0.0; } public double calculateLatency(String service, Duration threshold) { Timer requestTimer = Timer.builder("request.duration") .tag("service", service) .register(meterRegistry); // логика расчета латентности return 0.95; // пример } } ``` ## SLO (Цель уровня сервиса) **SLO** — целевое значение для SLI. ### Примеры SLO: - **Availability**: 99.9% uptime - **Latency**: 95% of requests < 200ms - **Error Rate**: < 0.1% errors ```java @Component public class SLOMonitor { private final Map slos = Map.of( "availability", new SLO("availability", 0.999, "99.9% uptime"), "latency", new SLO("latency", 0.95, "95% < 200ms"), "error_rate", new SLO("error_rate", 0.001, "< 0.1% errors") ); public boolean checkSLO(String sloName, double currentValue) { SLO slo = slos.get(sloName); return currentValue >= slo.getTarget(); } } ``` ## SLA (Соглашение об уровне сервиса) **SLA** — соглашение с клиентами о качестве сервиса. ### Компоненты SLA: - **Service Description** — описание сервиса - **Performance Metrics** — метрики производительности - **Availability Targets** — цели доступности - **Remediation** — меры по устранению нарушений