Microservizi con Golang e gRPC: architettura moderna
==============================================================
Introduzione
In questo articolo esploreremo l'architettura dei microservizi utilizzando Golang e gRPC. Questa architettura moderna si concentra su scalabilità, flessibilità e sicurezza.
Prerequisiti
Conoscenza di base del Golang
Vai all'installazione (versione 1.15 o successiva)
Installazione gRPC (versione 1.32 o successiva)
Installazione Docker (versione 20.10 o successiva)
Architettura dei microservizi
L'architettura dei microservizi si basa sulla separazione delle responsabilità tra i diversi servizi. Ogni servizio ha una funzione specifica e comunica con altri servizi attraverso interfacce definite.
Servizio di autenticazione
Il servizio di autenticazione è responsabile della verifica dell'identità degli utenti. Usiamo gRPC per definire l'interfaccia di autenticazione.
"vai."
//proto.aut
sintassi = "proto3";
autenticazione del pacchetto;
autenticazione del servizio {
rpc Login(LoginRequest) restituisce (LoginResponse) {}
}
messaggio Richiesta di accesso {
stringa nome utente = 1;
stringa password = 2;
}
messaggio LoginResponse {
successo bool = 1;
token di stringa = 2;
}
Implementiamo il servizio di autenticazione a Golang.
"vai."
// aut.go
autenticazione del pacchetto
importare (
"contesto"
"registro"
"google.golang.org/grpc"
pb "autenticazione/protocollo"
)
digitare la struttura authService{}
func (s *authService) Login(ctx context.Context, req *pb.LoginRequest) (*pb.LoginResponse, errore) {
// Verifica l'identità dell'utente
if req.Nomeutente == "admin" && req.Password == "password" {
return &pb.LoginResponse{Success: true, Token: "token"}, nil
}
return &pb.LoginResponse{Success: false}, zero
}
funzione principale() {
lis, err := net.Listen("tcp", ":50051")
se erra!= zero {
log.Fatalf("Impossibile ascoltare: %v", err)
}
srv := grpc.NewServer()
pb.RegisterAuthService(srv, &authService{})
log.Println("Servizio di autenticazione in ascolto sulla porta 50051")
srv.Serve(lis)
}
Servizio prodotto
Il servizio del prodotto è responsabile della gestione della logica aziendale relativa ai prodotti. Usiamo gRPC per definire l'interfaccia del prodotto.
"vai."
// prodotti.proto
sintassi = "proto3";
pacchetto di prodotti;
servizio Prodotti {
rpc GetProducts(GetProductsRequest) restituisce (GetProductsResponse) {}
}
messaggio OttieniRichiestaProdotti {
limite int32 = 1;
offset int32 = 2;
}
messaggio GetProductsResponse {
prodottiprodottiripetuti = 1;
}
messaggio Prodotto {
int32id = 1;
nome stringa = 2;
descrizione stringa = 3;
}
Abbiamo implementato il servizio del prodotto a Golang.
"vai."
// prodotti.go
prodotti confezionati
importare (
"contesto"
"registro"
"google.golang.org/grpc"
pb "prodotti/protocollo"
)
tipo prodottiService struct{}
func (s *productsService) GetProducts(ctx context.Context, req *pb.GetProductsRequest) (*pb.GetProductsResponse, errore) {
// Gestire la logica aziendale del prodotto
prodotti := []*pb.Prodotto{
{ID: 1, Nome: "Prodotto 1", Descrizione: "Descrizione prodotto 1"},
{ID: 2, Nome: "Prodotto 2", Descrizione: "Descrizione prodotto 2"},
}
return &pb.GetProductsResponse{Prodotti: prodotti}, zero
}
funzione principale() {
lis, err := net.Listen("tcp", ":50052")
se erra!= zero {
log.Fatalf("Impossibile ascoltare: %v", err)
}
srv := grpc.NewServer()
pb.RegisterProductsService(srv, &productsService{})
log.Println("Servizio prodotti in ascolto sulla porta 50052")
srv.Serve(lis)
}
Configurazione della finestra mobile
Per implementare l'architettura dei microservizi, dobbiamo creare immagini Docker per ciascun servizio.
"dockerfile
autenticazione/Dockerfile
DA golang:alpino
DIR LAVORO /app
COPIA aut.go.
ESEGUI vai build -o auth auth.go
ESPORRE 50051
CMD ["./auth"]
"dockerfile
# prodotti/Dockerfile
DA golang:alpino
DIR LAVORO /app
COPIA prodotti.go.
ESEGUI go build -o prodotti prodotti.go
ESPORRE 50052
CMD ["./prodotti"]
Implementazione dell'architettura
Per implementare l'architettura dei microservizi, dobbiamo creare un contenitore per ciascun servizio e configurare la comunicazione tra di loro.
"bash."
Crea contenitori
finestra mobile build -t autenticazione.
prodotti docker build -t.
docker run -d --name auth -p 50051:50051 auth
docker run -d --name prodotti -p 50052:50052 prodotti
Configura la comunicazione tra i servizi
docker exec -it auth grpcurl -plaintext -d '{"nome utente": "admin", "password": "password"}' localhost:50051/auth/Login
docker exec -it prodotti grpcurl -plaintext -d '{"limit": 10, "offset": 0}' localhost:50052/products/GetProducts
```
Conclusione
In questo articolo abbiamo implementato un'architettura di microservizi utilizzando Golang e gRPC. L'architettura si concentra su scalabilità, flessibilità e sicurezza. I servizi e i prodotti di autenticazione comunicano tramite le interfacce definite in gRPC. L'implementazione dell'architettura è stata effettuata utilizzando Docker ed è stata configurata la comunicazione tra i servizi.
Avvisi GitHub
> [!IMPORTANTE]
> Assicurati di installare la versione corretta di Go e gRPC prima di distribuire l'architettura.
> [!CONSIGLIO]
> Utilizza Docker per implementare l'architettura e configurare la comunicazione tra i servizi.
> [!ATTENZIONE]
> Assicurati di configurare la sicurezza adeguata nella tua architettura di microservizi.