This is the initial release of the Modern Web App pattern for .NET. The Modern Web App pattern for .NET builds on the Reliable Web App Pattern for .NET, but extends the sample to include patterns for transforming an existing monolithic application into a modern web application.
Key changes in this release of the Modern Web App pattern for .NET include:
- Separated ticket image rendering into a standalone microservice in the Relecloud.TicketRenderer project.
- Upgraded the ticket image rendering project to run on .NET 8 in a Linux container.
- This involved replacing System.Drawing with SkiaSharp.
- Updated Relecloud.Web.CallCenter.Api to use Microsoft.FeatureManagement to dynamically toggle between rendering ticket images in-proc (as in RWA) or via the ticket rendering microservice. In the case where the ticket rendering microservice is used, the API displays placeholder data while the ticket image is being rendered.
- Added an Azure Service Bus namespace to decouple Relecloud.Web.CallCenter.Api from the ticket rendering microservice. Requests for ticket images are now sent to a Service Bus queue, and responses are sent to a different queue.
- Added an Azure Container App to host the ticket rendering microservice.
- Configured the microservice to automatically scale based on the number of messages in the Service Bus queue.
- Added an Azure Container Registry instance to store the ticket rendering service container image.
- Added distributed tracing using Application Insights to provide observability for requests through the entire distributed Relecloud application.
These updates allow the Modern Web App pattern to demonstrate additional patterns for building modern web applications on Azure, including:
- Strangler fig pattern for incrementally migrating a monolithic application to a service-oriented architecture.
- Queue-based load leveling and competing consumers patterns for improving reliability and scalability in a distributed system.
- Containerization and orchestration patterns for deploying and managing microservices on Azure.
- Distributed tracing and observability patterns for monitoring and troubleshooting distributed applications.
- Automatic horizontal scaling for optimizing cost and performance based on demand.