


Créez une passerelle API de microservices efficace basée sur le go-zero
Ces dernières années, l'application de l'architecture de microservices est devenue de plus en plus répandue. Elle est centrée sur les services et divise les applications en modules fonctionnels indépendants en découplant les services, améliorant ainsi la fiabilité et l'évolutivité des applications. Cependant, dans une architecture de microservices, en raison du grand nombre de services, la communication entre les services augmente inévitablement la complexité. À ce stade, la passerelle API devient un composant essentiel. Dans cet article, nous présenterons la méthode go-zero pour créer une passerelle API de microservice efficace.
Qu'est-ce qu'une passerelle API
Une passerelle API est un serveur qui gère le trafic entrant, transmet les requêtes et les réponses. C'est la couche intermédiaire entre le client et le serveur. Dans l'architecture des microservices, la passerelle API joue principalement les deux rôles suivants :
- Fournir une interface unifiée avec le monde extérieur
- Fournir le routage des requêtes et le proxy d'interface en interne
En tant que modèle architectural, la passerelle API présente également les caractéristiques suivantes :
- Responsable de l'acheminement des demandes externes entrantes vers les services internes
- Routage, filtrage et transformation des demandes selon différentes conditions
- Fournir des services tels que l'authentification, la sécurité et la limitation de courant
Cadre go-zero
go-zero est un framework web et rpc pour l'architecture de microservices, dédié à fournir des capacités de traitement hautement simultanées et des interfaces de programmation simples et faciles à utiliser. Il est construit sur la bibliothèque standard Golang et peut réaliser un traitement efficace des requêtes réseau basé sur les capacités de concurrence et les avantages de gestion de la mémoire du langage Go.
Le framework go-zero fournit un framework Web, un framework RPC, un framework de microservices et une série d'outils périphériques. Le composant le plus important est le framework de microservices go-zero. Ce framework est très flexible et peut être personnalisé en fonction des besoins spécifiques de l'entreprise. Il présente également les avantages suivants :
- Hautes performances : basé sur les fonctionnalités de haute concurrence et de faible consommation de mémoire de Golang, go-zero implémente un traitement et des ressources réseau hautes performances. utiliser.
- Évolutivité : go-zero prend en charge le développement en couches et peut isoler les services à forte charge en couches indépendantes pour garantir la stabilité et l'évolutivité.
- Haute fiabilité : go-zero utilise des méthodes de test complètes pour garantir l'exactitude des fonctions du système et intègre des conceptions à haute disponibilité telles que les nouvelles tentatives, les fusibles et la limitation de courant pour améliorer la fiabilité du système.
- Chaîne d'outils riche : go-zero fournit de nombreux outils pour nous aider à développer et déployer rapidement des services.
go-zero construit une passerelle API
Ensuite, nous présenterons les étapes permettant à go-zero de créer une passerelle API :
Étape 1 : Définir l'interface
Nous devons d'abord définir certaines interfaces API, en supposant que nous avons défini trois interfaces :
GET /api/user/{id} POST /api/user DELETE /api/user/{id}
Étape 2 : Écrire des microservices
Ensuite, nous devons écrire des microservices qui gèrent ces interfaces. En go-zero, les microservices peuvent être implémentés en définissant des Handlers
. Ces Handlers
peuvent être automatiquement générés par le framework et intégrés au service pour être appelés par la passerelle API. Handlers
来实现,这些Handlers
可以被框架自动生成,并集成到服务中提供给API网关调用。
示例代码如下:
package service import "github.com/tal-tech/go-zero/rest" type Request struct { Id int `json:"id"` } type Response struct { Data string `json:"data"` } type Service interface { GetUser(*Request) (*Response, error) AddUser(*Request) (*Response, error) DeleteUser(*Request) (*Response, error) } type UserService struct { } func NewUserService() *UserService { return &UserService{} } func (s *UserService) GetUser(req *Request) (*Response, error) { return &Response{ Data: "get user success", }, nil } func (s *UserService) AddUser(req *Request) (*Response, error) { return &Response{ Data: "add user success", }, nil } func (s *UserService) DeleteUser(req *Request) (*Response, error) { return &Response{ Data: "delete user success", }, nil } func (s *UserService) HttpHandlers() []rest.Handler { return []rest.Handler{ rest.Get("/api/user/:id", s.GetUser), rest.Post("/api/user", s.AddUser), rest.Delete("/api/user/:id", s.DeleteUser), } }
在上述代码中,我们定义了一个Service接口,其中包含三个方法,分别对应前面定义的三个接口。同时,我们需要实现HttpHandlers接口,该接口可以通过实现rest.Handler接口,直接将请求路由到对应的处理函数中。
第三步:配置API网关
接下来,我们需要在API网关中配置相关信息,如路由、限流策略、服务发现等。go-zero提供了一个名为goctl的工具,可以帮助我们快速创建和管理微服务和API网关。
安装goctl工具:
goctl工具的安装非常简单,只需要通过以下命名进行安装即可:
$ curl -sSL https://git.io/godev | bash
Copier après la connexion创建API网关:
可以使用以下命令创建API网关:
$ goctl api new gateway
Copier après la connexion执行该命令后,goctl会自动生成一个API网关的代码框架。
配置路由:
我们需要在定义
api
接口后,添加相关的路由配置。在go-zero中,可以使用Group
和Proxy
进行路由配置,同时也可以使用WithJwtAuth
、WithCircuitBreaker
等方法,进行路由过滤和控制。示例代码如下:
package api import ( "github.com/tal-tech/go-zero/rest" "github.com/tal-tech/go-zero/zrpc" "gateway/internal/service" ) type Api struct { rest.RestHandler } func NewApi() (*Api, error) { userService := service.NewUserService() cli := zrpc.MustNewClient(zrpc.RpcClientConf{ ServiceConf: zrpc.ServiceConf{ Name: "gateway", Etcd: zrpc.EtcdConf{ Endpoints: []string{"localhost:2379"}, Key: "rpc", Timeout: 5000, }, Middleware: []zrpc.Middleware{ zrpc.NewClientMiddleware(), }, }, }) handler := rest.NewGroupRouter("/api"). GET("/user/:id", rest.WithNoti(func(ctx *rest.RestContext) error { response, err := userService.GetUser(&service.Request{Id: ctx.Request.Params["id"]}) if err != nil { return nil } ctx.SendJson(response) return nil })). POST("/user", rest.WithNoti(func(ctx *rest.RestContext) error { response, err := userService.AddUser(&service.Request{}) if err != nil { return nil } ctx.SendJson(response) return nil })). DELETE("/user/:id", rest.WithNoti(func(ctx *rest.RestContext) error { response, err := userService.DeleteUser(&service.Request{Id: ctx.Request.Params["id"]}) if err != nil { return nil } ctx.SendJson(response) return nil })). Proxy(func(ctx *rest.RestContext) error { err := zrpc.Invoke(ctx, cli, "gateway", ctx.Request.Method, ctx.Request.URL.Path, ctx.Request.Params, &ctx.Output.Body) if err != nil { return err } return nil }) return &Api{ RestHandler: handler, }, nil }
Copier après la connexion
我们可以看到,在上述代码中,将api
的请求路由到了userService
定义的处理函数中,并使用Proxy
$ go run main.go -f etc/gateway-api.yaml
- Installer l'outil goctl :
- L'installation de l'outil goctl est très simple, il suffit de l'installer en le nommant :
- rrreee
- Créer une passerelle API :
- Vous pouvez utiliser la commande suivante pour créer une Passerelle API :
Après avoir exécuté cette commande, goctl générera automatiquement un framework de code de passerelle API.
🎜Configurer le routage : 🎜🎜Nous devons ajouter une configuration de routage pertinente après avoir défini l'interfaceapi
. En go-zero, vous pouvez utiliser Group
et Proxy
pour la configuration du routage, et vous pouvez également utiliser WithJwtAuth
et WithCircuitBreaker
et d'autres méthodes pour effectuer le filtrage et le contrôle des itinéraires. 🎜🎜L'exemple de code est le suivant : 🎜rrreee🎜🎜Nous pouvons voir que dans le code ci-dessus, la requête de api
est acheminée vers la fonction de traitement définie par userService et utilisez <code>Proxy
pour transmettre d'autres requêtes non définies au service spécifié. 🎜🎜Après avoir défini l'API, vous pouvez démarrer le service API gateway : 🎜rrreee🎜Après un démarrage réussi, vous pouvez accéder à l'interface fournie par la passerelle API. 🎜🎜Résumé🎜🎜Les étapes pour créer une passerelle API de microservices efficace basée sur le go-zero sont les suivantes : 🎜🎜🎜Définir l'interface API 🎜🎜Écrire des microservices 🎜🎜Configurer la passerelle API 🎜🎜Démarrer le service de passerelle API 🎜🎜🎜go-zero est un framework de microservices très flexible, hautes performances et évolutif. Il fournit non seulement un framework Web, un framework RPC et un framework de microservices, mais fournit également une série d'outils périphériques qui peuvent nous aider à créer rapidement des applications de microservices efficaces. 🎜🎜Grâce aux étapes ci-dessus, nous pouvons facilement créer une passerelle API de microservices efficace et puissante, fournissant ainsi une base architecturale hautement évolutive et hautes performances pour nos applications. 🎜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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Avantages de la combinaison du framework PHP avec des microservices : Évolutivité : étendez facilement l'application, ajoutez de nouvelles fonctionnalités ou gérez plus de charge. Flexibilité : les microservices sont déployés et maintenus de manière indépendante, ce qui facilite les modifications et les mises à jour. Haute disponibilité : la défaillance d'un microservice n'affecte pas les autres parties, garantissant une disponibilité plus élevée. Cas pratique : Déployer des microservices à l'aide de Laravel et Kubernetes Étapes : Créer un projet Laravel. Définissez le contrôleur de microservice. Créez un fichier Docker. Créez un manifeste Kubernetes. Déployez des microservices. Testez les microservices.

Le framework Java prend en charge l'expansion horizontale des microservices. Les méthodes spécifiques incluent : Spring Cloud fournit Ribbon et Feign pour l'équilibrage de charge côté serveur et côté client. NetflixOSS fournit Eureka et Zuul pour mettre en œuvre la découverte de services, l'équilibrage de charge et le basculement. Kubernetes simplifie la mise à l'échelle horizontale avec la mise à l'échelle automatique, les vérifications de l'état et les redémarrages automatiques.

Créez un système distribué à l'aide du framework de microservices Golang : installez Golang, sélectionnez un framework de microservices (tel que Gin), créez un microservice Gin, ajoutez des points de terminaison pour déployer le microservice, créez et exécutez l'application, créez un microservice de commande et d'inventaire, utilisez le point final pour traiter les commandes et l'inventaire Utiliser des systèmes de messagerie tels que Kafka pour connecter des microservices Utiliser la bibliothèque sarama pour produire et consommer des informations sur les commandes

SpringBoot joue un rôle crucial dans la simplification du développement et du déploiement dans l'architecture des microservices : en fournissant une configuration automatique basée sur des annotations et en gérant les tâches de configuration courantes, telles que les connexions à la base de données. Prend en charge la vérification des contrats API via des tests de contrat, réduisant ainsi les changements destructeurs entre les services. Possède des fonctionnalités prêtes pour la production telles que la collecte de métriques, la surveillance et les contrôles de santé pour faciliter la gestion des microservices dans les environnements de production.

La garantie de cohérence des données dans l'architecture de microservices est confrontée aux défis des transactions distribuées, de la cohérence éventuelle et des mises à jour perdues. Les stratégies comprennent : 1. Gestion distribuée des transactions, coordination des transactions interservices ; 2. Cohérence éventuelle, permettant des mises à jour indépendantes et une synchronisation via des files d'attente de messages ; 3. Contrôle de version des données, utilisant le verrouillage optimiste pour vérifier les mises à jour simultanées.

Surveillance et alerte de l'architecture de microservices dans le framework Java Dans une architecture de microservices, la surveillance et les alertes sont essentielles pour garantir la santé et la fiabilité du système. Cet article explique comment utiliser le framework Java pour implémenter la surveillance et l'alarme de l'architecture des microservices. Cas pratique : Utiliser SpringBoot+Prometheus+Alertmanager1 Intégrer Prometheus@ConfigurationpublicclassPrometheusConfig{@BeanpublicSpringBootMetricsCollectorspringBootMetric.

Construire une architecture de microservices à l'aide d'un framework Java implique les défis suivants : Communication interservices : choisissez un mécanisme de communication approprié tel que l'API REST, HTTP, gRPC ou une file d'attente de messages. Gestion des données distribuées : maintenez la cohérence des données et évitez les transactions distribuées. Découverte et enregistrement de services : intégrez des mécanismes tels que SpringCloudEureka ou HashiCorpConsul. Gestion de la configuration : utilisez SpringCloudConfigServer ou HashiCorpVault pour gérer les configurations de manière centralisée. Surveillance et observabilité : intégrez Prometheus et Grafana pour la surveillance des indicateurs et utilisez SpringBootActuator pour fournir des indicateurs opérationnels.

Dans l'architecture de microservices PHP, la cohérence des données et la gestion des transactions sont cruciales. Le framework PHP fournit des mécanismes pour implémenter ces exigences : utilisez des classes de transaction, telles que DB::transaction dans Laravel, pour définir les limites des transactions. Utilisez un framework ORM, tel que Doctrine, pour fournir des opérations atomiques telles que la méthode lock() afin d'éviter les erreurs de concurrence. Pour les transactions distribuées, pensez à utiliser un gestionnaire de transactions distribuées tel que Saga ou 2PC. Par exemple, les transactions sont utilisées dans des scénarios de boutique en ligne pour garantir la cohérence des données lors de l'ajout à un panier. Grâce à ces mécanismes, le framework PHP gère efficacement les transactions et la cohérence des données, améliorant ainsi la robustesse des applications.
