Maison >développement back-end >Golang >Golang met en œuvre un disjoncteur

Golang met en œuvre un disjoncteur

王林
王林original
2023-05-05 20:39:06905parcourir

Avec la popularité de l'architecture des microservices, le mécanisme du disjoncteur est devenu un élément indispensable. Le mécanisme du disjoncteur peut éviter l'impact de certaines pannes de réseau ou de service sur l'ensemble du système et garantir la fiabilité et la stabilité du système. Cet article explique comment utiliser Golang pour implémenter un disjoncteur.

Qu'est-ce qu'un disjoncteur ?

Dans un système distribué, la communication entre les services peut être confrontée à des problèmes tels que des fluctuations du réseau, des pannes matérielles et des délais d'attente. Si l’anomalie de transmission provoquée par le défaut n’est pas découverte et traitée à temps, elle entraînera l’effondrement d’une partie ou de la totalité du système, entraînant de graves conséquences. L’émergence du mécanisme disjoncteur résout ce problème.

Les circuits sont un mécanisme permettant de faire face aux pannes. Lorsqu'un service échoue, le mécanisme du disjoncteur déconnecte rapidement l'appel de service et définit une fenêtre horaire. Dans ce laps de temps, toute demande de service sera interceptée directement et un message d'erreur sera renvoyé, évitant ainsi l'impact d'une panne d'avalanche sur le service appelé et permettant au système de continuer à fonctionner jusqu'à ce que le service revienne à la normale.

Golang implémente un disjoncteur

Golang est un langage efficace, concis et facile à apprendre, adapté au développement de systèmes distribués. L'environnement intégré du langage Go contient déjà de nombreuses bibliothèques de disjoncteurs, très pratiques à utiliser.

Ce qui suit explique comment utiliser Golang pour implémenter un disjoncteur.

Installez la bibliothèque de disjoncteurs

Dans Golang, le mécanisme du disjoncteur est généralement implémenté à l'aide de disjoncteurs. Afin d'utiliser le mécanisme du disjoncteur, la bibliothèque de disjoncteurs doit d'abord être installée. Des bibliothèques plus pratiques incluent Hystrix de Netflix et la bibliothèque de disjoncteurs de go-kit.

Ici, nous prenons la bibliothèque de disjoncteurs de go-kit comme exemple pour expliquer. Vous devez d’abord l’installer dans votre environnement local. Exécutez le code suivant dans le terminal :

go get github.com/go-kit/kit/v2/circuitbreaker

Utilisation de la bibliothèque de disjoncteurs

Après avoir installé la bibliothèque de disjoncteurs, vous pouvez commencer à utiliser le disjoncteur. Ce qui suit décrit comment utiliser la bibliothèque de disjoncteurs de go-kit pour implémenter un disjoncteur.

Définir un fusible

Le processus de définition d'un fusible est très simple, il suffit d'utiliser le code suivant :

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

Parmi eux, Timeout précise le délai d'expiration de la requête MaxRequests Contraint le nombre maximum de requêtes dans une période de temps ; la fonction <code>ReadyToTrip est utilisée pour vérifier si le disjoncteur doit être ouvert. Dans le code ci-dessus, lorsqu'une requête échoue plus de 3 fois, la fonction ReadyToTrip retournera vrai, c'est-à-dire que le fusible sera activé. 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)
  }
}

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

Appelez le fusible

Après avoir défini le fusible, vous pouvez commencer à appeler le service. Supposons que vous souhaitiez appeler un service, vous pouvez l'implémenter comme suit :

rrreee

Lorsque vous appelez réellement le service, encapsulez-le dans la fonction breaker.Call(). Si une erreur se produit lors de l'appel, le mécanisme du disjoncteur sera déclenché et la tolérance aux pannes pourra être implémentée dans le code. 🎜🎜Résumé🎜🎜Cet article présente la définition de base et le principe du mécanisme du disjoncteur, et explique en détail comment utiliser Golang pour mettre en œuvre un disjoncteur. Dans le développement de systèmes distribués, le mécanisme du disjoncteur joue un rôle très important. L'introduction du mécanisme de disjoncteur peut garantir la haute disponibilité et la stabilité du système et joue un rôle essentiel pour éviter les pannes du système. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn