splash_auth

SERVICIO CONECTADO
INAUGURACIÓN DE NUEVA PAGINA!
IT News

Microservices with Golang and gRPC: Modern Architecture

Sistema IA
4 MIN READING
08 Jun 2026
Microservices with Golang and gRPC: Modern Architecture
==============================================================

Introduction

Representation Technical

In this article, we will explore microservices architecture using Golang and gRPC. This modern architecture focuses on scalability, flexibility, and security.

Prerequisites


Basic knowledge of Golang
Go installation (version 1.15 or higher)
gRPC installation (version 1.32 or higher)
Docker installation (version 20.10 or higher)

Microservices Architecture


The microservices architecture is based on the separation of responsibilities between different services. Each service has a specific function and communicates with other services through defined interfaces.

Authentication Service



The authentication service is responsible for verifying the identity of users. We use gRPC to define the authentication interface.
go
// auth.proto
syntax = "proto3";

packageauth;

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

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

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

We implement the authentication service in 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) {
// Verify the user's identity
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)
}

Product Service



The product service is responsible for handling the business logic related to the products. We use gRPC to define the product interface.
go
// products.proto
syntax = "proto3";

package products;

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

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

message GetProductsResponse {
repeatedProductproducts = 1;
}

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

We implemented the product service in 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) {
// Manage product business logic
products := []*pb.Product{
{Id: 1, Name: "Product 1", Description: "Product Description 1"},
{Id: 2, Name: "Product 2", Description: "Product Description 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)
}

Docker configuration


To implement the microservices architecture, we need to create Docker images for each service.
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"]

Architecture Implementation


To implement the microservices architecture, we need to create a container for each service and configure communication between them.
bash
# Create containers
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

# Configure communication between services
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

Conclusion


In this article, we have implemented a microservices architecture using Golang and gRPC. The architecture focuses on scalability, flexibility and security. Authentication services and products communicate through interfaces defined in gRPC. The implementation of the architecture was carried out using Docker and communication between services was configured.

GitHub Alerts

> [!IMPORTANT]
> Make sure you install the correct version of Go and gRPC before deploying the architecture.
> [!TIP]
> Uses Docker to implement the architecture and configure communication between services.
> [!WARNING]
> Make sure you configure appropriate security in your microservices architecture.