Skip to content

Resilience, Monitoring, Logging and Disaster Recovery Strategies (Marion Bruns, Komal Ahluwalla)

MaxSimon95 edited this page Feb 16, 2019 · 5 revisions

Resilience

Was ist das Ziel?

Bei Ausfällen sollen die Auswirkungen auf das System so weit wie möglich beschränkt werden (Fail gracefully).

Es ist NICHT Ziel alle Ausfälle zu verhindern oder Veränderungen zu vermeiden.

Ausfälle

Ausfälle können diverse Gründe für Nichtverfügbarkeit sein. Z.B. Netzwerkprobleme, Überladung oder Absturz der Datenbank, Service2Service-Kommunikationsprobleme (in Folge von Veränderungen) und weitere. Sie sind unausweichlich und zum Großteil auf Veränderungen des Systems zurückzuführen.

Maßnahmen

  • Grundvoraussetzungen
    • Continuous delivery pipeline
    • Monitoring, Logging und Tracing der Application
    • Tests: Unit tests, Integration tests, consumer driven contract tests, functional tests, performance tests
    • So viel wie möglich sollte in Codeform realisiert werden (einschließlich Infrastruktur und CD pipelines) → durch ein Version-Control-System verwaltet
  • Vorbereitung
    • Häufige Backups (Funktionsfähigkeit sicherstellen)
    • Regelmäßige Neustarts
    • Pre-Production-Environment nutzen
    • Stress-Test des Production-Systems
  • Reaktion auf Ausfälle
    • Automatisiertes Skalieren des Systems
    • Availability regions
    • Feature toggles
    • Circuit breaker
    • Isolation
    • Caching

Observability

Instrumentation and Monitoring

Verwendung eines Dashboards um Metriken in geeigneter grafischer Form darzustellen:

  • System (CPU, Memory, Java Memory, Java Garbage Collector, ...)
  • Request-basierte Metriken (z.B. Anzahl der Requests, Antwortzeit, ...)

Logging

  • Errors, Events, u.a.
  • Namenskonventionen folgen
  • Tools: ELK Stack: Elasticsearch, Logstash, Kibana (OpenSource) - Fluend (anstelle von Logstash) - Splunk (commercial)

Tracing

  • Nachverfolgen der Systemaktivitäten, die ein Request ausgelöst hat

Alerting

  • Benachrichtigungen wenn bestimmte Bedingungen eintreten
  • Sinnvolle Bedingungen und Grenzwerte setzen, sonst ist die Wahrnehmbarkeit kritischer Meldungen eingeschränkt
  • Tools: Email, Slack, Hichat, Webhooks, OpsGenie, u.A.

Disaster Recovery

Messzahl ist die mean time to recover (mttr). Ein Ausfall kann schneller behoben werden je früher er erkannt wird. Automatisiertes Monitoring kann Ausfälle erkennen bevor sie tatsächlich stattfinden.

Maßnahmen

Rollback: Wiederherstellung der letzten funktionsfähigen Version (automatisiert)

Blue-green deployment: Alte und neue Version laufen in der Übergangsphase gleichzeitig, die ältere als Fallback.

Fixing forward: Korrektur des Fehlers durch neue Version. Abhängig von Länge des Path-to-Production.

Kubernetes: Software die starke Unterstützung bei der Automatisierung bietet, im Setup aber kompliziert sein kann.

ESCALATION: Es sollte ein Eskalationsplan existieren für den Fall, dass es zum Desaster kommt. Dort wird festgelegt welche Stakeholder bei welchem Katastrophenlevel benachrichtigt werden.

Clone this wiki locally