Avec le développement d'Internet, l'architecture des microservices est devenue le choix de plus en plus d'entreprises. Dans l’architecture des microservices, la passerelle est un élément indispensable. En tant qu'élément important de l'architecture des microservices, la passerelle est responsable du routage des demandes et de l'équilibrage de charge, du contrôle de sécurité et de la conversion des protocoles, et peut effectuer efficacement une gestion unifiée et un contrôle d'accès des services back-end.
Actuellement, il existe de nombreux produits de passerelle couramment utilisés sur le marché, tels que Kong, APISIX, etc. Cependant, ces produits de passerelle présentent certains problèmes tels que des coûts d'apprentissage élevés et une configuration complexe. Ils peuvent être surqualifiés pour certains scénarios simples.
En tant que langage de programmation simple et efficace, Golang exploite pleinement ses avantages de concurrence et d'intégration élevées, et peut être utilisé pour créer un système de passerelle léger. Cet article expliquera les aspects suivants :
De manière générale, un système de passerelle doit mettre en œuvre les fonctions suivantes :
Nous utilisons le langage Golang pour implémenter les fonctions ci-dessus afin de garantir l'efficacité et l'efficience du système de passerelle Utilisation maximale des ressources.
Nous utiliserons les principales piles technologiques suivantes :
Ce système de passerelle adopte "inverse" Modèle d'architecture "Agent + ETCD + Redis".
Architecture à trois couches :
Plusieurs serveurs et chaque serveur dispose de plusieurs API Pour un accès simultané élevé, il doit être capable de prendre en charge des nœuds API croissants et décroissants de manière dynamique. Utilisez ETCD (un magasin de valeurs-clés hautement disponible) pour la maintenance de l'état et la découverte des nœuds d'API. Utilisez Redis comme cache de données protobuf pour l'API.
4.1 Installez golang, Gin et les dépendances associées
Une fois l'installation terminée, ajoutez les dépendances que vous devez utiliser dans le fichier govendor.yaml, comme indiqué ci-dessous :
dependencies: - github.com/gin-gonic/gin - github.com/coreos/etcd/clientv3 - github.com/go-redis/redis - github.com/dgrijalva/jwt-go
Utilisez la commande go pour exécutez la commande suivante :
go get -u github.com/kardianos/govendor govendor init govendor add +external govendor add github.com/gin-gonic/gin@v1.3.0
4.2 Utilisation de base de gin
Vous pouvez facilement créer un framework HTTP en utilisant gin, comme indiqué ci-dessous :
package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 }
4.3 Utilisation d'ETCD et Redis
ETCD est un magasin clé-valeur hautement disponible qui peut être utilisé pour la découverte de services et la configuration du partage. Dans Golang, nous utiliserons la bibliothèque clientv3 officiellement fournie pour faire fonctionner etcd.
Redis est une base de données clé-valeur hautes performances Nous utiliserons la bibliothèque go-redis pour utiliser Redis dans Golang.
4.4 Utilisation de JWT
Afin d'assurer la sécurité de l'interface, nous utiliserons JWT pour l'authentification de l'interface. JWT, JSON Web Token, est une méthode standard du Web pour transmettre des informations d'authentification et d'autorisation d'identité. Son principal scénario d'utilisation est l'autorisation et l'authentification des interfaces machine à machine.
4.5 Implémentation de la passerelle
Pour la passerelle elle-même, les principales fonctions incluent le routage des demandes et l'équilibrage de charge, le contrôle de sécurité et la journalisation, etc.
Pour le routage des requêtes et l'équilibrage de charge, nous pouvons utiliser le ReverseProxy du framework Gin pour y parvenir. La découverte de l'état et l'enregistrement de l'API doivent être mis en œuvre via ETCD.
Notre système de passerelle doit prendre en charge plusieurs nœuds API backend et effectuer un équilibrage de charge. L'algorithme d'équilibrage de charge peut utiliser la méthode d'interrogation, la méthode aléatoire, etc. Nous utilisons ici la méthode d'interrogation (RoundRobin) pour la sélection des nœuds.
En termes de contrôle de sécurité, nous pouvons passer JWT dans l'en-tête de la requête pour réaliser l'authentification de l'interface.
Enfin, insérez le journal dans la réponse et renvoyez le résultat de la réponse.
Cet article présente brièvement le processus de création d'un système de passerelle simple utilisant le langage Golang. Ce système de passerelle implémente le routage des requêtes et l'équilibrage de charge à l'aide du framework GIN, implémente la maintenance de l'état et la découverte des nœuds d'API via ETCD, utilise Redis comme cache de données protobuf de l'API, utilise JWT pour l'authentification de l'interface et ajoute enfin une fonction de journalisation. Le système de passerelle construit à l'aide de Golang est léger, efficace, facile à apprendre et à déployer, et convient parfaitement aux scénarios légers.
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!