Golang implementiert einen Leistungsschalter

王林
Freigeben: 2023-05-05 20:39:06
Original
894 Leute haben es durchsucht

Mit der Popularität der Microservice-Architektur ist der Schutzschaltermechanismus zu einem unverzichtbaren Bestandteil geworden. Der Schutzschaltermechanismus kann die Auswirkungen einiger Netzwerk- oder Dienstausfälle auf das gesamte System verhindern und die Zuverlässigkeit und Stabilität des Systems gewährleisten. In diesem Artikel wird erläutert, wie Sie mit Golang einen Leistungsschalter implementieren.

Was ist ein Leistungsschalter?

In einem verteilten System kann es bei der Kommunikation zwischen Diensten zu Problemen wie Netzwerkschwankungen, Hardwarefehlern und Zeitüberschreitungen kommen. Wenn die durch den Fehler verursachte Übertragungsanomalie nicht rechtzeitig erkannt und behoben wird, führt dies zum Zusammenbruch eines Teils oder des gesamten Systems mit schwerwiegenden Folgen. Das Aufkommen des Leistungsschaltermechanismus löst dieses Problem.

Schaltkreise sind ein Mechanismus zur Bewältigung von Ausfällen. Wenn ein Service ausfällt, unterbricht der Schutzschaltermechanismus den Serviceanruf schnell und legt ein Zeitfenster fest. Innerhalb dieses Zeitfensters wird jede Anfrage für den Dienst direkt abgefangen und eine Fehlermeldung zurückgegeben, wodurch die Auswirkungen eines Lawinenausfalls auf den aufgerufenen Dienst vermieden werden und das System den Betrieb fortsetzen kann, bis der Dienst wieder normal ist.

Golang implementiert Leistungsschalter

Golang ist eine effiziente, prägnante und leicht zu erlernende Sprache, die sich für die Entwicklung verteilter Systeme eignet. Die integrierte Umgebung der Go-Sprache enthält bereits viele Leistungsschalterbibliotheken, die sehr bequem zu verwenden sind.

Im Folgenden wird erläutert, wie Sie mit Golang einen Leistungsschalter implementieren.

Installieren Sie die Leistungsschalterbibliothek

In Golang wird der Leistungsschaltermechanismus normalerweise mithilfe von Leistungsschaltern implementiert. Um den Schutzschaltermechanismus nutzen zu können, muss zunächst die Schutzschalterbibliothek installiert werden. Zu den praktischeren Bibliotheken gehören die Hystrix von Netflix und die Circuit Breaker-Bibliothek von Go-Kit.

Hier nehmen wir zur Erläuterung die Leistungsschalterbibliothek von Go-Kit als Beispiel. Zuerst müssen Sie es in Ihrer lokalen Umgebung installieren. Führen Sie den folgenden Code im Terminal aus:

go get github.com/go-kit/kit/v2/circuitbreaker
Nach dem Login kopieren

Verwenden der Leistungsschalterbibliothek

Nach der Installation der Leistungsschalterbibliothek können Sie mit der Verwendung des Leistungsschalters beginnen. Im Folgenden wird beschrieben, wie Sie die Leistungsschalterbibliothek von Go-Kit zum Implementieren von Leistungsschaltern verwenden.

Eine Sicherung definieren

Der Prozess zum Definieren einer Sicherung ist sehr einfach. Verwenden Sie einfach den folgenden Code:

breaker := circuitbreaker.NewCircuitBreaker(circuitbreaker.Config{
  Timeout:      2 * time.Second, // 超时时间
  MaxRequests:  1, // 最大请求数
  ReadyToTrip: func(counts circuitbreaker.Counts) bool {
    return counts.ConsecutiveFailures > 3 // 连续3次失败后打开断路器
  },
})
Nach dem Login kopieren

Unter anderem gibt Timeout den Timeout-Zeitraum der Anforderung an; /code> Beschränkt die maximale Anzahl von Anfragen innerhalb eines Zeitraums. Mit der Funktion ReadyToTrip wird überprüft, ob der Leistungsschalter geöffnet werden muss. Wenn im obigen Code eine Anfrage mehr als dreimal fehlschlägt, gibt die Funktion ReadyToTrip true zurück, d. h. die Sicherung wird aktiviert. Timeout指定了请求的超时时间;MaxRequests约束了一个时间周期内最大的请求数;ReadyToTrip函数用于检查是否需要打开断路器。在上面的代码中,当某次请求失败次数超过3次时,ReadyToTrip函数将返回true,即打开熔断器。

调用熔断器

在定义完熔断器后,可以开始调用服务。假设要调用一个服务,可以如下实现:

func main() {
  breaker := circuitbreaker.NewCircuitBreaker(circuitbreaker.Config{
    Timeout:      2 * time.Second,
    MaxRequests:  1,
    ReadyToTrip: func(counts circuitbreaker.Counts) bool {
      return counts.ConsecutiveFailures > 3
    },
  })
  
  if err := breaker.Call(func() error {
    // 调用远端服务
    return remoteCall()
  }); err != nil {
    // 熔断后的处理
    fmt.Println("断路器已开启:", err)
  }
}
Nach dem Login kopieren

在实际调用服务时,将其封装在breaker.Call()

Sicherung anrufen

Nachdem Sie die Sicherung definiert haben, können Sie mit dem Anrufen des Dienstes beginnen. Angenommen, Sie möchten einen Dienst aufrufen, können Sie ihn wie folgt implementieren:

rrreee

Wenn Sie den Dienst tatsächlich aufrufen, kapseln Sie ihn in die Funktion breaker.Call(). Wenn beim Aufruf ein Fehler auftritt, wird der Schutzschaltermechanismus ausgelöst und Fehlertoleranz kann im Code implementiert werden. 🎜🎜Zusammenfassung🎜🎜In diesem Artikel werden die grundlegende Definition und das Prinzip des Leistungsschaltermechanismus vorgestellt und ausführlich erläutert, wie Golang zur Implementierung des Leistungsschalters verwendet wird. Bei der Entwicklung verteilter Systeme ist der Leistungsschaltermechanismus eine sehr wichtige Funktion. Die Einführung des Leistungsschaltermechanismus kann die hohe Verfügbarkeit und Stabilität des Systems gewährleisten und spielt eine entscheidende Rolle bei der Vermeidung von Systemabstürzen. 🎜

Das obige ist der detaillierte Inhalt vonGolang implementiert einen Leistungsschalter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage