Desplegando ms-locations: La Base Geográfica del Ecosistema
Continuamos poblando nuestro clúster con los componentes del ecosistema CodeDesignPlus. En este artículo, desplegaremos un servicio de datos fundamental que será consumido por muchas otras partes de nuestra aplicación: ms-locations
.
La gestión de datos geográficos es una necesidad común en casi cualquier aplicación (perfiles de usuario, direcciones de envío, configuración regional, etc.). ms-locations
resuelve este problema proporcionando una API centralizada y una fuente de verdad única para un rico modelo de datos que incluye Regiones, Países, Estados, Ciudades, Barrios, Zonas Horarias y Monedas.
Un Vistazo a la Arquitectura de ms-locations
Section titled “Un Vistazo a la Arquitectura de ms-locations”Flujo de la API a los Casos de Uso (CQRS)
Section titled “Flujo de la API a los Casos de Uso (CQRS)”ms-locations
expone una API REST muy amplia para gestionar todas las entidades de su dominio. El patrón de arquitectura interna, sin embargo, es consistente y repetible para cada una de ellas.
Este patrón de Commands para operaciones de escritura y Queries para operaciones de lectura se aplica a todas las demás entidades como City
, State
, Currency
, etc.
El Modelo de Dominio: Un Mundo de Datos Interconectados
Section titled “El Modelo de Dominio: Un Mundo de Datos Interconectados”El verdadero poder de ms-locations
reside en la riqueza y la interconexión de su modelo de dominio, diseñado siguiendo los principios de Domain-Driven Design (DDD).
Como muestra el diagrama, no se trata de listas aisladas. Es un modelo relacional completo donde cada Country
está asociado a una Region
, cada State
a un Country
, y así sucesivamente. Esta estructura garantiza la integridad y la consistencia de los datos geográficos en toda la plataforma.
Despliegue y Configuración Paso a Paso
Section titled “Despliegue y Configuración Paso a Paso”-
Configurando los Secretos en Vault
ms-locations
necesita las credenciales base para conectarse a RabbitMQ, Redis y MongoDB.Terminal window vault kv put -mount=inventory-keyvalue ms-roles `"RabbitMQ:UserName=<USERNAME_FROM_RABBITMQ_SECRET>" `"RabbitMQ:Password=<PASSWORD_FROM_RABBITMQ_SECRET>" `"Redis:Instances:Core:ConnectionString=<CONNECTION_STRING_FROM_REDIS>" `"Mongo:ConnectionString=<VAULT_TRANSIT_PASSWORD>"Verificamos que los secretos se hayan guardado correctamente en la interfaz web de Vault.
-
Desplegando con Helm desde ArtifactHub
ms-locations
solo expone una API REST, por lo que desplegaremos un único Helm Chart.-
Preparar el
values-rest.yaml
Local Creamos un archivovalues-rest.yaml
con la configuración de las variables de entorno no sensibles y la conexión a Vault. (Nota: El contenido es muy similar al de los microservicios anteriores, solo cambia elservice
en la sección de vault y elhost
yname
en la devirtualService
).# values-rest.yaml para ms-locations-restms-base:env:- name: RESOURCES__ENABLEvalue: "true"- name: RESOURCES__SERVERvalue: "http://ms-services-grpc.inventory.svc.cluster.local:5001"- name: SECURITY__VALIDISSUERvalue: "https://devcodedesignplus.ciamlogin.com/dfee7752-2c8a-4171-ad95-62ddc82d6ed8/v2.0/"- name: SECURITY__CLIENTIDvalue: "305f759d-d1d2-467b-9eab-4a61389c7329"- name: SECURITY__VALIDAUDIENCES__0value: "305f759d-d1d2-467b-9eab-4a61389c7329"- name: RABBITMQ__HOSTvalue: "rabbitmq-cluster.srv-rabbitmq.svc"- name: LOGGER__OTELENDPOINTvalue: "http://inventory-opentelemetry-collector.otel-inventory.svc.cluster.local:4317"- name: OBSERVABILITY__SERVEROTELvalue: "http://inventory-opentelemetry-collector.otel-inventory.svc.cluster.local:4317"vault:server: http://vault.vault.svc.cluster.local:8200solution: inventorytoken: ANGq0*B2acD1n5%FvirtualService:create: truenamespace: istio-ingresshosts:- services.codedesignplus.appgateways:- istio-ingress/istio-inventory-gatewayhttp:- name: ms-locationsmatch:- uri:prefix: /ms-locations/rewrite:uri: /route:- destination:host: ms-locations-rest.inventory.svc.cluster.localport:number: 5000 -
Ejecutar el Despliegue con Helm Usamos
helm upgrade --install
para desplegar el chart en el namespaceinventory
.Terminal window helm upgrade --install ms-locations-rest codedesignplus/ms-locations-rest -f ./values-rest.yaml --namespace inventory
-
Parte 3: Verificación del Despliegue
Section titled “Parte 3: Verificación del Despliegue”-
Verificar el Pod en Lens En Lens, bajo “Workloads > Pods”, ahora vemos nuestro nuevo pod
ms-locations-rest
corriendo en el namespaceinventory
. -
Verificar el
VirtualService
de Istio El Helm chart ha creado automáticamente elVirtualService
que enruta el tráfico desde nuestro Gateway. En Lens, podemos ver la nueva regla params-locations-rest
. -
Probar el Acceso a la API
-
Endpoint de Salud: Verificamos que el servicio está vivo accediendo a su endpoint de salud:
https://services.codedesignplus.app/ms-locations/health/ready
Deberías ver una respuesta “Healthy”.
-
Swagger UI: Para explorar la API completa, usamos la interfaz de Swagger UI:
https://services.codedesignplus.app/ms-locations/index.html
Aquí puedes ver la gran cantidad de endpoints disponibles para gestionar
City
,Country
,Currency
y todas las demás entidades del dominio.
-
Conclusión
Section titled “Conclusión”Has desplegado con éxito ms-locations
, un microservicio de datos fundamental que servirá como la fuente de verdad para toda la información geográfica en tu aplicación. Este servicio no solo ahorra un tiempo de desarrollo inmenso, sino que también garantiza la consistencia y la integridad de los datos en todo el ecosistema.
Cada microservicio que añadimos enriquece la funcionalidad global de la plataforma, acercándonos cada vez más a tener una base completa sobre la cual construir nuestra aplicación de inventario.