Introduction

Three years ago, I was close to a team working on a project, it was really complicated because the customer requested a backend part that will interact with an existent embedded application and send a notification to a frontend part that makes some update according to a specific algorithm and a mobile application for final users. To minimize the cost, they worked in a monolith approach but after six months of work trying to deploy it manually and the client wanted some changes with more requirements but they were not able to maintain the solution and it starts to become more expensive.

Maybe it’s easy to build a monolithic application but moving to a containerized approach ensure the maintainability, the security, the agility, and the costs.

The benefit of the cloud:

The cloud was an alternative in case that we want to go faster and with a minimum of Costs but it was facing a lot of challenges like ensuring the security, the Scalability and the availability, keeping the agility and resiliency and minimizing the costs and more in term of data and development and data management, so, we started talking about Cloud Design Patterns as a new way of designing modern application regardless of your solution ideas.

And to explain the way of modernizing for a web and mobile apps in a faster way, we prepared a template that includes two projects, uploaded in GitHub as a prototype reference to Microsoft Ignite 2018 session.

https://github.com/didourebai/MSIgnite2018

Global architecture

The app architecture consists of two parts and it is based on Azure App Services, the needs of building an application that ensures an elastic scale to handle bursts of users at different times.

-          Several .NET Web API that we will deploy them on Azure Web Service or they can be deployed as microservices on Docker and a web application using Web API Core 2.1 and the frontend project was build using Angular 6, to interact with the database, we demonstrated the use of two ORMs: Fluent NHibernate with Criteria APIs and Querying and Entity Framework 2.1.

-          Xamarin.Forms mobile app for iOS, Android and Windows. (MVVP Pattern, Converters, HttpClient to consume the APIs), we used in the template the preview of Xamarin.Essentials that provides to the developers a cross-platform APIs for their mobile applications and the App Center to build, test on a real device and distribute it to beta testers.

Azure platform as a service (PaaS) tools

The Azure platform as a service (PaaS) tools used in this sample are:

-          Azure CDN: serves cache files like CSS and JS even static images, used to optimize page loading and reduce latency.

-          Azure Active Directory B2C: allow the user to sign in the application as an identity management service that enables customization and profiles management.

-          Azure Traffic Manager: it routes the request of the user to the hosted platform in Azure App Service.

-          Azure SQL Database is a fully managed relational cloud database service that provides the broadest SQL Server engine compatibility. In our sample, we used SQL Server and Postgresql.

-          Azure API Management:  used to publish APIs to external, partner, and internal developers to benefit from the potential of their data and services.

Deploy the application in Azure and Constrainers

To deploy this application, you can deploy manually each part. Additionally, there is a Resource Manager template to automate the deployment of most of the Azure resources. We can deploy our APIs as Microservices on Docker or Kubernates to optimize our application.

Continuous integration Azure DevOps

You can build apps in the cloud and deploy to Azure, each time you commit code, it’s automatically built and tested from Visual Studio even from your GitHub repository for example so bugs are detected faster. You can use monitoring functionalities to gain visibility into the performance, health, and use of your applications, workloads, and infrastructure.

Conclusion

For more details about the detailed architecture in Backend and frontend part, you can refer to the Session: https://myignite.techcommunity.microsoft.com/sessions/66364