El código de este proyecto se basa en un sistema monolítico de arquitectura limpia, con los siguientes componentes conceptuales típicos:
- Adaptadores de API
- Lógica de negocios de aplicación desacoplada
- Objetos de dominio principal
- Puertas de enlace de infraestructura
- Inversión de control (IoC)
Se trata de una solución sin estado, por lo que no contiene ninguna puerta de enlace para capas de persistencia. La solución no tiene interfaz de usuario, por lo que tampoco tiene controladores ni elementos de presentación.
La composición de componentes de software usa la clase GridwichConfigureServices para definir las clases específicas que están disponibles en el contenedor de IoC para la aplicación de funciones de Azure.
Architecture
La solución Gridwich tiene una biblioteca Core.EventGrid, que contiene lo siguiente:
- La solicitud de dominio y los objetos de transferencia de datos (DTO) de respuesta.
- Interfaces para todos los objetos de servicio o de lógica de negocios de aplicación.
- Las clases base que ayudan a lograr una lógica o actividades comunes basadas en dominios.
- Definiciones de registro, observabilidad y excepción para su uso en toda la aplicación.
Para encapsular Azure Event Grid como un agente de solicitud y respuesta, la biblioteca contiene los siguientes elementos:
- Un distribuidor de eventos que usa IoC para identificar los eventos y enviárselos a agentes de escucha.
- Un publicador de eventos para colocar las respuestas en el tema de Event Grid apropiado.
El adaptador de solicitud de Event Grid tiene el formato de un punto de conexión HTTP de Azure Functions. En la misma clase EventGridFunction, también hay un adaptador para convertir las solicitudes web en matrices de Event Grid.
La puerta de enlace de respuesta de Event Grid se compone de:
- La clase EventGridHandlerBase, que convierte un DTO de respuesta en un objeto
EventGridEvent
. - La clase EventGridDispatcher, que utiliza la clave del tema para colocar el evento de Event Grid en el URI de punto de conexión del tema de Event Grid de respuesta correcto.
La solución desacopla los participantes de saga en las siguientes bibliotecas, que son responsables de la lógica de negocios de aplicación específica del dominio. Las bibliotecas contienen las puertas de enlace de infraestructura necesarias y sus SDK, que acometen las acciones requeridas por la lógica de negocios.
- Gridwich.SagaParticipants.Analysis.MediaInfo
- Gridwich.SagaParticipants.Encode.CloudPort
- Gridwich.SagaParticipants.Encode.Flip
- Gridwich.SagaParticipants.Storage.AzureStorage
Para la reutilización y centralización del código, Gridwich consolida las puertas de enlace de infraestructura o de lógica de negocios que varios participantes utilizan en las siguientes bibliotecas compartidas:
Alternativa de microservicios
Nada en la arquitectura o el espacio de solución de problemas de Gridwich conduce expresamente la solución hacia una aplicación monolítica o hacia varios microservicios.
La aplicación se puede refactorizar fácilmente en microservicios. Cada uno de ellos es una aplicación de funciones que hospeda un único participante de saga. Cada aplicación de funciones vinculará las bibliotecas principales con las bibliotecas de Event Grid principales. Cada aplicación tiene una vinculación o usa una biblioteca común para las puertas de enlace de infraestructura.
La ventaja de este enfoque de microservicios es la posibilidad de escalar la infraestructura de forma diferente en función del tipo de solicitud. Si hubiera miles de solicitudes de un mismo tipo por segundo, pero únicamente cientos de solicitudes de otro tipo por día, la solución general se beneficiaría de tener funciones más pequeñas que permitan crear instancias fácilmente y se puedan ejecutar con rapidez para un elevado volumen de solicitudes.
El inconveniente de los microservicios es que los modelos compartidos requieren el lanzamiento sincronizado de los microservicios, o bien la purga y el cambio del grupo de solicitudes en el caso de que haya algún cambio en el esquema de datos. Este requisito complicaría los trabajos de desarrollo futuros, la implementación continua y las operaciones. Dado que el problema empresarial no evidenció la necesidad de microservicios, la arquitectura de Gridwich usa un enfoque monolítico limpio.
Pasos siguientes
- ¿Qué son los microservicios?: Descubra la arquitectura de microservicios.
- Introducción a Azure Functions: Obtenga más información sobre Azure Functions.