Design a complicated web system with Azure.
If you like this project, learn something or you are using it in your applications, please give it a star. Thanks!
Welcome to the Git repo that is associated with the Azure roadmap Azure Roadmap published by LinkedIn. This image is design a complicated web system with Azure.
Azure Roadmap |
---|
![]() |
We have customers for our application that using various types of devices.
The customers :
1) Could be humans using web browsers.
2) Could be other computers using web services.
In both cases, the traffic still flows over secure HTTP, and we could use Active Directory B2C to authenticate users and grant tokens for service calls.
We can deploy our application or APIs to an app service.
If we want to stick with an app service approach, then two resources that we could use would be:
1) Azure WebJobs
2) Azure Functions
Both of these technologies allow me to execute code when a message appears in a queue.
Now most systems that really need to scale and stay available, need to use some asynchronous processing. So we need to set up an Azure storage account and make use of message queues.
Queues are useful because they allow me to disconnect the application from some of the back-end processing that needs to take place. We often refer to this use of queues as load leveling, because we level the load and amortize the request over a slightly longer period of time.
When we deploy our application, we can push our static content into Blob storage and then a server that contents through an Azure content delivery network, a CDN.
The CDN is good for serving content, static content like images and movies, and even script and CSS files to serve that content as fast as possible.
But why use a content delivery network?
Well, if you want a fast, scalable website, a CDN can help reduce the page load time for your customers because content served from a CDN is probably closer to the user than the content in your app service, and therefore, the content arrives quicker.
Application insights are also a resource that you'll want to include in any non-trivial web application. Application insights can tell me where my application is slow, it can help me track down errors.
It's a vital source of information about the behavior and the well-being of the system. You can also integrate application insights data into your application because application insights offer an API.
So you might have a page that administrators can log into and view information about the recent errors and exceptions in the application, and they can do that without leaving the application and going to the Application Insights portal because you can make all the information available right in the application itself.
Another resource that you should consider using is Azure Key Vault. Key Vault is designed to protect secrets, secrets as access keys, passwords,and certificates. You definzitely do not want these secrets in your source code, and there's a good argument to be made that you don't want to copy these secrets around in the Azure portal either as an app setting.
With Key Vault, you can set up things so only your system administrators need to know the secrets and they can import those access keys and passwords into Azure Key Vault. Key Vault will store those secrets securely, even using hardware security modules and the administrator can provide URLs for an application to interact with the keys and monitor logs to see who is using those keys.
If we're building a scalable application, we will probably use some caching. Azure Redis Cache is one distributed cache that we can use.a distributed cache like Redis can give you quick access to data from all the services and instances running in your application.
You can scale up your app servicewith new instances and not need to worry about those instances having to warm up by populating a cache, and since Azure manages Redis as a service, as a platform, you can have 10s of gigabytes of cache available with guaranteed uptimes and a disaster recovery plan.
With Redis, you might cache query results from Cosmos DB or Azure SQL.
Not only will the cached results typically be faster to receive, but you'll also be reducing the load on your databases when the application is under stress.
For some applications, you might want to give your users the ability to search for data that is somewhere in the application. For this job, you might rely on Azure Search. Azure Search provides indexers that will crawl the data in Cosmos DB and Azure SQL and blob storage as well as other data sources, and then give you full-text search and language processing, including support for faceted navigation, Lucene query syntax, search suggestions, scoring, and all of this across 56 different languages.