当前位置:网站首页>Principe et mise en œuvre de l'enregistrement et de la découverte des services

Principe et mise en œuvre de l'enregistrement et de la découverte des services

2021-09-15 07:44:35 Tarzan d'Ali

Qu'est - ce que la découverte de l'inscription au service?

Pour les étudiants en micro - service,Inscription au service、Le concept de découverte de service ne devrait pas être trop étrange.

En termes simples,Quand le ServiceABesoin de services dépendantsBHeure,Nous devons juste informer le serviceA,Où appeler le serviceB,C'est le problème que l'inscription au service a résolu.

  • Service B Inscrivez - vous à Service Registry Appelé Inscription au service
  • Service A De Service Registry Découverte Service B L'information du noeud pour est appelée Découverte de services

Inscription au service

L'inscription au service s'adresse au serveur,L'inscription est requise après le démarrage du service,Divisé en plusieurs parties:

  • Démarrer l'inscription
  • Renouvellement programmé
  • Retrait

Démarrer l'inscription

Quand un noeud de service se lève,Vous devez vous inscrire auprès de Service Registry Allez.,Pour que d'autres noeuds puissent se trouver.L'inscription n'est requise que lorsque le démarrage du service est terminé et que la demande est acceptable pour vous inscrire,Et la date d'expiration sera fixée,Empêcher que le processus ne soit toujours accessible après une sortie anormale.

Renouvellement programmé

Les renouvellements périodiques correspondent à keep alive,Prévenez régulièrement Service Registry Je suis toujours,Capacité de poursuivre le service.

Retrait

Quand le processus sort,Nous devrions prendre l'initiative d'annuler l'inscription,Faciliter la distribution rapide de la demande par l'appelant à d'autres noeuds.En même temps,go-zero L'équilibrage adaptatif de la charge garantit que même si le noeud sort sans déconnexion active,Le noeud peut également être enlevé à temps.

Découverte de services

La découverte de service s'adresse au côté de l'appel,Il existe généralement deux types de questions:

  • Acquisition de stocks
  • Écouter progressivement

Un autre problème d'ingénierie courant est

  • Dépannage du Service

Quand le service découvre le service(Par exemple, etcd, consul, nacosAttendez.)Quand il y a un problème,Ne modifions pas ce que nous avons endpoints Liste,Pour mieux s'assurer que etcd Les services qui dépendent d'un arrêt peuvent encore interagir normalement.

Acquisition de stocks

Quand Service A Au démarrage,Besoin de Service Registry Accès Service B Liste des noeuds existants pour:Service B1, Service B2, Service B3,Ensuite, sélectionnez le noeud approprié pour envoyer la demande en fonction de votre algorithme d'équilibrage de charge.

Écouter progressivement

L'image ci - dessus a déjà Service B1, Service B2, Service B3,Si ça recommence Service B4,Alors nous devons informer Service A Il y a un nouveau noeud.Comme le montre la figure:

Dépannage du Service

Pour l'appelant de service,Nous mettons tous en cache une liste de noeuds disponibles en mémoire.Peu importe l'utilisation etcd,consul Ou nacos Attendez.,Nous pourrions tous faire face à une défaillance du cluster de découverte de service,Par etcd Par exemple,Quand on rencontre etcd En cas de défaillance,On va devoir geler Service B Informations sur les noeuds sans changement,Vous ne devez pas vider les informations du noeud pour le moment,Une fois vidé, il n'y a pas d'accès,Et maintenant Service B Les noeuds sont probablement normaux,Et go-zero Isole et récupère automatiquement les noeuds défaillants.

Inscription au service、La raison d'être de la découverte de service est en gros,Bien sûr, c'est encore plus compliqué à réaliser,Ensuite, regardons go-zero Quelles méthodes de découverte de services sont prises en charge dans.

go-zero Découverte de services intégrés

go-zero Trois modes de découverte de service sont pris en charge par défaut:

  • Connexion directe
  • Basé sur etcd Service Discovery for
  • Basé sur kubernetes endpoints Service Discovery for

Connexion directe

La connexion directe est le moyen le plus simple,Quand notre service sera assez simple,Par exemple, une seule machine peut transporter nos affaires,On peut juste utiliser ça.

In rpc Spécifié directement dans le fichier de configuration de endpoints C'est tout.,Par exemple,:

Rpc:
  Endpoints:
  - 192.168.0.111:3456
  - 192.168.0.112:3456

zrpc L'appelant répartit la charge sur ces deux noeuds,Quand l'un des noeuds a un problème zrpc Sera automatiquement retiré,Une fois le noeud récupéré, la charge est redistribuée.

L'inconvénient de cette méthode est qu'elle n'augmente pas dynamiquement les noeuds,Chaque fois qu'un nouveau noeud est ajouté, la configuration de l'appelant doit être modifiée et redémarrée.

Basé sur etcd Service Discovery for

Quand notre service aura une certaine échelle,Parce qu'un service peut être dépendant de plusieurs services,Nous avons besoin de pouvoir augmenter et diminuer dynamiquement les noeuds,Sans modifier beaucoup de configuration de l'appelant et redémarrer.

Les solutions de découverte de service les plus courantes sont etcd, consul, nacos Attendez..

go-zeroIntégration intégrée basée sur etcd Service Discovery Scheme for,La méthode d'utilisation spécifique est la suivante:

Rpc:
  Etcd:
     Hosts:
     - 192.168.0.111:2379
     - 192.168.0.112:2379
     - 192.168.0.113:2379
     Key: user.rpc
  • Hosts - Oui. etcd Adresse du Groupe
  • Key C'est le service qui s'est inscrit key

Basé sur Kubernetes Endpoints Service Discovery for

Si tous nos services sont déployés dans Kubernetes Les mots du cluster,Kubernetes C'est par soi - même etcd Gérer l'état du cluster,Tous les services enregistrent leurs propres informations de noeud à Endpoints Objet,On peut le donner directement à deployment Permission de lire le cluster Endpoints L'objet obtient les informations du noeud.

  • Service B Chaque Pod Au démarrage,S'inscrira au cluster Endpoints - Oui.
  • Service A Chaque Pod Au démarrage,Peut être obtenu à partir de Endpoints Accès Service B Informations sur le noeud pour
  • Quand Service B Quand les noeuds changent,Service A Peut passer watch Cluster Endpoints Perception

Avant que ce mécanisme ne fonctionne,Nous devons configurer le courant namespace Intérieur pod Pour les grappes Endpoints Accès,Voici trois concepts:

  • ClusterRole
    • Définir les rôles de permission à l'échelle du cluster,Non. namespace Contrôle
  • ServiceAccount
    • Définition namespace Portée service account
  • ClusterRoleBinding
    • Sera défini ClusterRole Et différent namespace De ServiceAccount Faire la liaison

Attention!:Quand le temps de démarrage n'a pas la permission d'obtenir Endpoints N'oubliez pas de vérifier si ces configurations sont en place :)

zrpc Basé sur Kubernetes Endpoints La méthode d'utilisation de la découverte de service pour:

Rpc:
  Target: k8s://mynamespace/myservice:3456

Parmi eux:

  • mynamespace:Appelé rpc Où se trouve le service namespace
  • myservice:Appelé rpc Nom du service
  • 3456:Appelé rpc Port du Service

Création deployment Assurez - vous d'ajouter serviceAccountName Pour spécifier quel ServiceAccount,Voici quelques exemples:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: alpine-deployment
  labels:
    app: alpine
spec:
  replicas: 1
  selector:
    matchLabels:
      app: alpine
  template:
    metadata:
      labels:
        app: alpine
    spec:
      serviceAccountName: endpoints-reader
      containers:
      - name: alpine
        image: alpine
        command:
        - sleep
        - infinity

Attention! serviceAccountName Spécifiez ce deployment Créé pod Avec quoi? ServiceAccount.

server Et client Tous déployés à Kubernetes Après le cluster, vous pouvez faire défiler toutes les commandes suivantes pour redémarrer server Noeud

kubectl rollout restart deploy -n adhoc server-deployment

Utilisez la commande suivante pour voir client Journal des noeuds:

kubectl -n adhoc logs -f deploy/client-deployment --all-containers=true

Vous pouvez voir que notre mécanisme de découverte de service suit parfaitement server Changement de noeud,Et il n'y a pas eu de demande d'exception pendant la mise à jour du service.

Pour un exemple complet de code, voir https://github.com/zeromicro/zero-examples/tree/main/discovery/k8s

Le prochain article que j'expliquerai est go-zero Comment mettre en œuvre consul, nacos Service Registration Discovery for etc,Attendez avec impatience.!

版权声明
本文为[Tarzan d'Ali]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/09/20210915073252791c.html

随机推荐