Microsserviços com Golang e gRPC: Arquitetura Moderna
============================================================
Introdução
Neste artigo, exploraremos a arquitetura de microsserviços usando Golang e gRPC. Essa arquitetura moderna concentra-se em escalabilidade, flexibilidade e segurança.
Pré-requisitos
Conhecimento básico de Golang
Vá para instalação (versão 1.15 ou superior)
instalação gRPC (versão 1.32 ou superior)
Instalação do Docker (versão 20.10 ou superior)
Arquitetura de microsserviços
A arquitetura de microsserviços é baseada na separação de responsabilidades entre diferentes serviços. Cada serviço tem uma função específica e se comunica com outros serviços através de interfaces definidas.
Serviço de autenticação
O serviço de autenticação é responsável por verificar a identidade dos usuários. Usamos gRPC para definir a interface de autenticação.
vá
//auth.proto
sintaxe = "proto3";
pacoteauth;
autenticação de serviço {
rpc Login(LoginRequest) retorna (LoginResponse) {}
}
mensagem Solicitação de login {
string nome de usuário = 1;
string senha = 2;
}
mensagem LoginResponse {
bool sucesso = 1;
token de sequência = 2;
}
Implementamos o serviço de autenticação em Golang.
vá
//auth.go
autenticação do pacote
importar (
"contexto"
"registro"
"google.golang.org/grpc"
pb "autenticação/proto"
)
digite estrutura authService{}
func (s *authService) Login(ctx context.Context, req *pb.LoginRequest) (*pb.LoginResponse, erro) {
//Verifica a identidade do usuário
if req.Username == "admin" && req.Password == "senha" {
return &pb.LoginResponse{Sucesso: verdadeiro, Token: "token"}, nil
}
return &pb.LoginResponse{Sucesso: falso}, nulo
}
função principal() {
lis, err := net.Listen("tcp", ":50051")
se errar! = nulo {
log.Fatalf("falha ao escutar: %v", err)
}
srv := grpc.NewServer()
pb.RegisterAuthService(srv, &authService{})
log.Println("Serviço de autenticação escutando na porta 50051")
srv.Serve(lis)
}
Atendimento ao Produto
O serviço de produto é responsável por lidar com a lógica de negócios relacionada aos produtos. Usamos gRPC para definir a interface do produto.
vá
//produtos.proto
sintaxe = "proto3";
produtos embalados;
serviço Produtos {
rpc GetProducts(GetProductsRequest) retorna (GetProductsResponse) {}
}
mensagem GetProductsRequest {
limite int32 = 1;
deslocamento int32 = 2;
}
mensagem GetProductsResponse {
produtos repetidos = 1;
}
mensagem Produto {
int32 id = 1;
nome da string = 2;
descrição da string = 3;
}
Implementamos o serviço de produto em Golang.
vá
//produtos.go
produtos de pacote
importar (
"contexto"
"registro"
"google.golang.org/grpc"
pb "produtos/proto"
)
digite estrutura de produtosService{}
func (s *productsService) GetProducts(ctx context.Context, req *pb.GetProductsRequest) (*pb.GetProductsResponse, erro) {
//Gerencie a lógica de negócios do produto
produtos := []*pb.Produto{
{Id: 1, Nome: "Produto 1", Descrição: "Descrição do Produto 1"},
{Id: 2, Nome: "Produto 2", Descrição: "Descrição do Produto 2"},
}
return &pb.GetProductsResponse{Produtos: produtos}, nulo
}
função principal() {
lis, err := net.Listen("tcp", ":50052")
se errar! = nulo {
log.Fatalf("falha ao escutar: %v", err)
}
srv := grpc.NewServer()
pb.RegisterProductsService(srv, &productsService{})
log.Println("Serviço de produtos escutando na porta 50052")
srv.Serve(lis)
}
###Configuração do Docker
Para implementar a arquitetura de microsserviços, precisamos criar imagens Docker para cada serviço.
dockerfile
#auth/Dockerfile
DE golang:alpino
WORKDIR /aplicativo
COPIAR auth.go.
EXECUTAR vá construir -o auth auth.go
EXPOSIÇÃO 50051
CMD ["./auth"]
dockerfile
#produtos/Dockerfile
DE golang:alpino
WORKDIR /aplicativo
COPIE produtos.go.
EXECUTAR vá construir -o produtos produtos.go
EXPOSIÇÃO 50052
CMD ["./produtos"]
Implementação de Arquitetura
Para implementar a arquitetura de microsserviços, precisamos criar um container para cada serviço e configurar a comunicação entre eles.
bash
# Cria contêineres
docker build -t autenticação.
docker build -t produtos.
docker run -d --name autenticação -p 50051:50051 autenticação
docker run -d --name produtos -p 50052:50052 produtos
#Configurar a comunicação entre serviços
docker exec -it auth grpcurl -plaintext -d '{"nome de usuário": "admin", "senha": "senha"}' localhost:50051/auth/Login
docker exec -it produtos grpcurl -plaintext -d '{"limit": 10, "offset": 0}' localhost:50052/products/GetProducts
Conclusão
Neste artigo, implementamos uma arquitetura de microsserviços usando Golang e gRPC. A arquitetura se concentra em escalabilidade, flexibilidade e segurança. Os serviços e produtos de autenticação comunicam-se através de interfaces definidas no gRPC. A implementação da arquitetura foi realizada utilizando Docker e configurada a comunicação entre serviços.
Alertas do GitHub
> [!IMPORTANTE]
> Certifique-se de instalar a versão correta do Go e do gRPC antes de implantar a arquitetura.
> [!TIP]
> Utiliza Docker para implementar a arquitetura e configurar a comunicação entre serviços.
> [!AVISO]
> Certifique-se de configurar a segurança apropriada em sua arquitetura de microsserviços.