splash_auth

SERVICIO CONECTADO
INAUGURACIÓN DE NUEVA PAGINA!
Novedades IT

Microservicios con Golang y gRPC: Arquitectura Moderna

Sistema IA
4 MIN LECTURA
08 Jun 2026
Microservicios con Golang y gRPC: Arquitectura Moderna
===========================================================

Introducción

Representación Técnica

En este artículo, exploraremos la arquitectura de microservicios utilizando Golang y gRPC. Esta arquitectura moderna se enfoca en la escalabilidad, la flexibilidad y la seguridad.

Requisitos Previos


Conocimientos básicos de Golang
Instalación de Go (versión 1.15 o superior)
Instalación de gRPC (versión 1.32 o superior)
Instalación de Docker (versión 20.10 o superior)

Arquitectura de Microservicios


La arquitectura de microservicios se basa en la separación de responsabilidades entre diferentes servicios. Cada servicio tiene una función específica y se comunica con otros servicios a través de interfaces definidas.

Servicio de Autenticación



El servicio de autenticación es responsable de verificar la identidad de los usuarios. Utilizamos gRPC para definir la interfaz de autenticación.
go
// auth.proto
syntax = "proto3";

package auth;

service Auth {
rpc Login(LoginRequest) returns (LoginResponse) {}
}

message LoginRequest {
string username = 1;
string password = 2;
}

message LoginResponse {
bool success = 1;
string token = 2;
}

Implementamos el servicio de autenticación en Golang.
go
// auth.go
package auth

import (
"context"
"log"

"google.golang.org/grpc"

pb "auth/proto"
)

type authService struct{}

func (s *authService) Login(ctx context.Context, req *pb.LoginRequest) (*pb.LoginResponse, error) {
// Verificar la identidad del usuario
if req.Username == "admin" && req.Password == "password" {
return &pb.LoginResponse{Success: true, Token: "token"}, nil
}
return &pb.LoginResponse{Success: false}, nil
}

func main() {
lis, err := net.Listen("tcp", ":50051")
if err!= nil {
log.Fatalf("failed to listen: %v", err)
}

srv := grpc.NewServer()
pb.RegisterAuthService(srv, &authService{})
log.Println("Auth service listening on port 50051")
srv.Serve(lis)
}

Servicio de Productos



El servicio de productos es responsable de manejar la lógica de negocio relacionada con los productos. Utilizamos gRPC para definir la interfaz de productos.
go
// products.proto
syntax = "proto3";

package products;

service Products {
rpc GetProducts(GetProductsRequest) returns (GetProductsResponse) {}
}

message GetProductsRequest {
int32 limit = 1;
int32 offset = 2;
}

message GetProductsResponse {
repeated Product products = 1;
}

message Product {
int32 id = 1;
string name = 2;
string description = 3;
}

Implementamos el servicio de productos en Golang.
go
// products.go
package products

import (
"context"
"log"

"google.golang.org/grpc"

pb "products/proto"
)

type productsService struct{}

func (s *productsService) GetProducts(ctx context.Context, req *pb.GetProductsRequest) (*pb.GetProductsResponse, error) {
// Manejar la lógica de negocio de productos
products := []*pb.Product{
{Id: 1, Name: "Producto 1", Description: "Descripción del producto 1"},
{Id: 2, Name: "Producto 2", Description: "Descripción del producto 2"},
}
return &pb.GetProductsResponse{Products: products}, nil
}

func main() {
lis, err := net.Listen("tcp", ":50052")
if err!= nil {
log.Fatalf("failed to listen: %v", err)
}

srv := grpc.NewServer()
pb.RegisterProductsService(srv, &productsService{})
log.Println("Products service listening on port 50052")
srv.Serve(lis)
}

Configuración de Docker


Para implementar la arquitectura de microservicios, necesitamos crear imágenes de Docker para cada servicio.
dockerfile
# auth/Dockerfile
FROM golang:alpine

WORKDIR /app

COPY auth.go.

RUN go build -o auth auth.go

EXPOSE 50051

CMD ["./auth"]
dockerfile
# products/Dockerfile
FROM golang:alpine

WORKDIR /app

COPY products.go.

RUN go build -o products products.go

EXPOSE 50052

CMD ["./products"]

Implementación de la Arquitectura


Para implementar la arquitectura de microservicios, necesitamos crear un contenedor para cada servicio y configurar la comunicación entre ellos.
bash
# Crear contenedores
docker build -t auth.
docker build -t products.

docker run -d --name auth -p 50051:50051 auth
docker run -d --name products -p 50052:50052 products

# Configurar la comunicación entre servicios
docker exec -it auth grpcurl -plaintext -d '{"username": "admin", "password": "password"}' localhost:50051/auth/Login
docker exec -it products grpcurl -plaintext -d '{"limit": 10, "offset": 0}' localhost:50052/products/GetProducts

Conclusión


En este artículo, hemos implementado una arquitectura de microservicios utilizando Golang y gRPC. La arquitectura se enfoca en la escalabilidad, la flexibilidad y la seguridad. Los servicios de autenticación y productos se comunican a través de interfaces definidas en gRPC. La implementación de la arquitectura se realizó utilizando Docker y se configuró la comunicación entre servicios.

GitHub Alerts

> [!IMPORTANT]
> Asegúrate de instalar la versión correcta de Go y gRPC antes de implementar la arquitectura.
> [!TIP]
> Utiliza Docker para implementar la arquitectura y configurar la comunicación entre servicios.
> [!WARNING]
> Asegúrate de configurar la seguridad adecuada en la arquitectura de microservicios.