Thursday, March 7, 2013

Coping with the the Flash: Das Circuit Breaker Pattern

In Backend-lastigen Projekten hat die Anwendung des von Michael Nygard geprägten Circuit Breaker Pattern (Blitzableiter) viel zur Stabilität beigetragen.

Dabei handelt es sich um ein relativ neues Pattern mit der folgenden Kernidee:
The essence of the pattern is that when one of your dependencies stops responding, you need to stop calling it for a little while. A file system that has exhausted its operation queue is not going to recover while you keep hammering it with new requests. A remote web service is not going to come back any faster if you keep opening new TCP connections and mindlessly waiting for the 30 second timeout. Worse yet, if your application normally expects that web service to respond in 100ms, suddenly starting to block for 30s is likely to deteriorate the performance of your own application and trigger a cascading failure.

Die Implementierung orientiert sich grob am Design eines Blitzableiters oder Fehlerstromschutzschalters (FI), daher der Name.

Für .NET habe ich das sehr leichtgewichtige NuGet-Package Reliability Patterns von Nygard selbst verwendet.

In Java gibt es mehrere Implementierungen, eine davon z.B. in der JRugged library. Diese waren jedoch für unseren Geschmack so schwergewichtig und überladen, dass wir das einfache Pattern gerade selbst implementiert haben.

Die typische Nutzung verwendet einen Decorator mit CircuitBreaker als Proxy für die Real-Implementierung.

Ich habe zum ersten Mal vom CircuitBreaker-Pattern aus dem Buch Dependency Injection with .NET von Mark Seemann gehört. Lesen bildet also nicht nur.

No comments:

Post a Comment