En este art铆culo quiero compartir nuestra experiencia con
SergeyMaslov para resolver problemas t铆picos usando la arquitectura de microservicios usando el ejemplo de la tarea "crear un blog" (con la esperanza de que el lector pueda imaginar c贸mo est谩 organizado el blog y esto no deber铆a plantear preguntas sobre la funcionalidad :)
Por lo tanto, nuestro blog constar谩 de 5 microservicios escritos en golang:
- Gateway API (api-gw): responsable del enrutamiento, autenticaci贸n, registro y rastreo de solicitudes
- Usuarios (usuario): registro / autenticaci贸n de usuarios, registro, seguimiento de solicitudes
- Art铆culos (publicaci贸n): crear / leer / modificar / eliminar art铆culos (CRUD), registro, seguimiento y autorizaci贸n de solicitudes
- Comentarios: crear / leer / modificar / eliminar comentarios (CRUD), registro, seguimiento y autorizaci贸n de solicitudes
- Categor铆as (categor铆a): creaci贸n / lectura / cambio / eliminaci贸n de categor铆as (CRUD), registro, seguimiento y autorizaci贸n de solicitudes
La aplicaci贸n cliente (web / frontend) se implementar谩 en vue.js e interactuar谩 con microservicios a trav茅s de la API REST, y los microservicios en s铆 interactuar谩n entre s铆 a trav茅s de gRPC.
Como almacenamiento usaremos MongoDB.
Mostraremos con una guinda separada sobre el pastel c贸mo mantener actualizada la documentaci贸n de la API (en formato swagger) en un proyecto en desarrollo activo con una mano de obra m铆nima.
Diagrama de componentes del blog

Cada microservicio se implementar谩 en un contenedor Docker separado, y el proyecto se lanzar谩 usando docker-compose.
Inmediatamente haga una reserva en el ejemplo, para simplificar el proceso de desarrollo, usar茅 dos supuestos que no deber铆an usarse en la producci贸n.
- La base de datos se implementa en un contenedor acoplable. Este enfoque reduce la confiabilidad del almacenamiento (con la excepci贸n del esquema discutido en HighLoad 2018).
- Todo el proyecto est谩 alojado en un repositorio git. Este enfoque contradice uno de los principios b谩sicos de la arquitectura de microservicios: el aislamiento y aumenta la probabilidad de conectividad entre componentes.
Puede ver la demostraci贸n del proyecto
aqu铆 , y el c贸digo fuente
aqu铆 .
Estructura del proyecto

C贸mo se construir谩 el proceso de desarrollo
Como dije anteriormente, la interacci贸n entre microservicios se construir谩 sobre la base de gRPC. En pocas palabras, gRPC es un marco de alto rendimiento desarrollado por Google para llamar a procedimientos remotos (RPC): funciona sobre HTTP / 2. GRPC se basa en el llamado protofile (ver ejemplo a continuaci贸n), cuya tarea principal es declarar dos cosas en una forma compacta:
- dar una lista completa de interfaces de servicio (an谩logas de interfaces API);
- describa lo que se alimenta a la entrada de cada interfaz y lo que obtenemos en la salida.
A continuaci贸n, como ejemplo, se proporciona el protofile del servicio Categor铆a.
syntax = "proto3"; package protobuf; import "google/api/annotations.proto";
Ahora que hemos descubierto en t茅rminos generales por qu茅 se necesita un protofile, veamos c贸mo se ver谩 el proceso de desarrollo de nuestros microservicios:
- Describimos la estructura del servicio en el protofile;
- Iniciamos el generador de c贸digo (./bin/protogen.sh), generar谩 la parte principal del c贸digo del servidor para nosotros + crear谩 c贸digo de cliente, por ejemplo, para API Gateway + crear谩 documentaci贸n actualizada en formato swagger;
- Todo lo que tenemos que hacer con nuestras propias manos es escribir el c贸digo para la implementaci贸n de las interfaces en un archivo especial /protobuf/functions.go.
Adem谩s, si queremos realizar cambios en uno de nuestros microservicios, procedemos de acuerdo con el algoritmo anterior: editamos el protofile, ejecutamos el protogen, editamos la implementaci贸n en functions.go, y los cambios "se ir谩n" autom谩ticamente a la documentaci贸n y a los clientes.
Contin煤a en el art铆culo
"Escribir un blog en microservicios, parte 2 de Gateway API" .