How to create a globally distributed Azure App incredibly easy - high availability and low latency included!
Tags: azure, cloud, serverless, architecture
Published: 2024-05-20 11:13:41

With digitalization and globalization, where users are distributed worldwide, it is essential to develop applications that are both fast and reliable, regardless of where the user is located. A globally distributed Azure app enables exactly that: it ensures that your application is not only available anywhere in the world, but also offers low latency and fast response times. In this article, I show how such an app can be deployed incredibly easily and what benefits this brings.

### Why a globally distributed application makes sense

**Low latency:** If an application is used by users on different continents, the physical distance can lead to high latency, which affects the user experience. Distributing the application across multiple Azure regions ensures that data is processed as close to the user as possible, significantly reducing latency.

**High availability:** A globally distributed architecture increases the application's reliability. If one region fails or is overloaded, data traffic can be automatically redirected to other regions. This ensures that the application remains available at all times, which is particularly important for business-critical applications.

**Low costs:** Thanks to Azure Functions and other serverless services, the costs for a globally distributed application can be controlled and optimized. Azure Functions enables automatic scaling of resources based on actual demand, so you only pay for the resources you use. This results in an efficient cost structure that makes it possible to operate a globally distributed application without incurring significantly higher costs compared to an application in a single region. The pay-as-you-go model of Azure Functions ensures that costs remain low, even if the application is distributed globally.

By using Azure services such as Azure Cosmos DB, Azure Functions and Azure Front Door, these benefits can be easily realized and applications can be optimally tailored to the global needs of users.


### Basic concepts and tools for a globally distributed Azure app

Before a globally distributed Azure app can be deployed, it is important to understand the basic concepts and tools involved. Here are the essential Azure services used for global distribution and optimization of an application:

Azure Cosmos DB: Azure Cosmos DB is a globally distributed, multimodal database service that can be seamlessly distributed across multiple regions. It offers guaranteed low latency and high availability as well as the ability to automatically replicate data and keep it consistent. This is particularly important for applications that need to access real-time data worldwide.

Azure Functions: Azure Functions is a serverless service that makes it possible to scale applications quickly and efficiently. With Azure Functions, you only pay for the resources you use, which minimizes operating costs. Automatic scaling ensures that the application runs smoothly even with high data traffic.

Azure Front Door: Azure Front Door provides global load balancing and accelerated application delivery by acting as a global HTTP/HTTPS load balancing service. It optimizes traffic, increases resiliency and ensures fast response time regardless of where users are located. Azure Front Door also improves security with built-in DDoS protection mechanisms and Web Application Firewall (WAF) capabilities.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ols6odhlqedcdcwbc7tb.png)

These services work together to ensure that the application is globally available, fast and cost-efficient. The next section describes in detail how these tools can be configured and used in a few steps to deploy a globally distributed Azure app.


## Steps to deploy a globally distributed Azure app
The following steps are necessary to deploy a globally distributed Azure app.

### Create and configure the Cosmos DB

To lay the foundation for a globally distributed Azure app, setting up and configuring Azure Cosmos DB is a crucial step. Start by logging into the Azure portal and creating a new Azure Cosmos DB instance. Choose the API model that best suits the requirements of your application - be it SQL, MongoDB or Cassandra.

Once the instance has been created, it is important to configure the global replications. You can do this by adding the desired geographical regions in which your data should be replicated. This configuration ensures that your data is available worldwide and stored close to the users, which significantly reduces latency. In addition, the multi-region write function ensures high availability and consistency of the data, as it enables write operations in several regions.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h740yepatv9rdxfyuvvp.png)

In the Azure Cosmos DB settings, you will find options for managing the consistency levels and configuring the replication strategies. Here you can select the desired level of consistency that best suits the requirements of your application - from strong consistency to eventual consistency.

A major advantage of Azure Cosmos DB is the ability to add additional regions after the initial deployment. The Azure Cosmos DB instance can be opened via the Azure portal and the "Add regions" option can be selected in the "Replication" area. After selecting the desired regions, the process is completed by clicking on "Save". Azure Cosmos DB replicates the data to the new regions automatically and without downtime. This allows the database's reach and availability to be expanded flexibly and seamlessly.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/50vtlgw7f57on1ufe27u.png)

### Setup and configuration of Azure Functions

After setting up Azure Cosmos DB, the next step is to configure Azure Functions to use serverless functions that can scale automatically and interact efficiently with globally distributed data.

First, a new Azure Functions app is created in the Azure portal. A serverless plan (Consumption Plan) that supports automatic scaling is selected. A separate Azure Functions app is created for each desired region to ensure that the functions are executed close to the users and therefore offer low latency.

Once the Functions apps have been created in the respective regions, the desired functionality can be implemented. This ensures that the functions interact efficiently with Azure Cosmos DB to perform data operations. The code for the functions can be written directly in the portal or deployed from a local development environment.

Once the functions are implemented, they must be deployed to all Functions apps created in the respective regions. This ensures that the application is available in every region and that the benefits of low latency and high availability can be utilized.

Azure Functions uses automatic scaling to ensure that the application runs smoothly even with high data traffic. The serverless architecture means that you only pay for the resources you actually use, which keeps operating costs low.

### Configuration of the Azure Front Door

After setting up Azure Cosmos DB and Azure Functions, the next step is to configure Azure Front Door to ensure global load balancing and optimization of application deployment.

A new Azure Front Door instance is created in the Azure portal. The Azure Functions endpoints created are added as backend pools. In the Azure Front Door settings, load balancing methods can be configured to distribute traffic based on the geographical location of users. This ensures that user requests are routed to the closest or most available data center, minimizing latency and improving the user experience.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cl9za6jniozsynuqao08.png)

Routing rules are set up to define specific requirements and priorities for data traffic. This includes routing requests to specific backend pools based on URL paths or other criteria.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jxilq207yxj90u7h1f3e.png)

In addition, security features such as the Web Application Firewall (WAF) can be activated to protect the application from threats. Azure Front Door also offers integrated DDoS protection mechanisms that help secure the application from attacks and ensure availability.

After all configurations are completed, Azure Front Door is tested to ensure that traffic is distributed correctly and the application is available in all regions. This configuration allows the global reach and performance of the Azure app to be optimally utilized.

### Security configuration for Azure Functions

To ensure that only traffic from Azure Front Door is allowed and thus security mechanisms cannot be bypassed, appropriate settings must be made in Azure Functions. This configuration increases the security of the application by ensuring that all requests are routed through Azure Front Door and checked.

The Azure Functions app is opened in the Azure portal and the "Network" -> "Public network access" area is opened in the settings. Here, the access restriction is configured by adding a rule that only allows the IP range of Azure Front Door. Azure Front Door uses a specific set of IP addresses that are updated regularly. So that not all IP addresses have to be entered, the type "Service Tag" can be selected and then the service tag "AzureFrontDoor.Backend". This now configures that only traffic via Azure Front Door is allowed through to the Azure Function. Additional protection is provided by checking the X-Azure-FDID header. This is set by Azure Front Door and ensures that traffic is only allowed through from your own Azure Front Door.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kp51rc26ore5v3goykim.png)

These measures help to protect the application from direct access by only allowing validated and verified requests. This ensures that security features such as the Web Application Firewall (WAF) and DDoS protection mechanisms configured in Azure Front Door cannot be bypassed and the application remains protected from potential threats.

### Price considerations

One of the most attractive features of a globally distributed Azure app is its cost efficiency. With a high number of requests, for example 100 million globally distributed requests per month, the total cost for such an application is only about 353 USD. This estimate includes the use of Azure Cosmos DB, Azure Functions and Azure Front Door.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i4z4ovjbeu4n3avzxz5a.png)

Azure Functions offers a serverless billing model where you only pay for the resources you actually use. This means that costs are dynamically adjusted to demand, avoiding unnecessary expenditure. Azure Cosmos DB charges for usage based on the operations performed and the amount of storage required, while Azure Front Door takes care of managing global traffic and optimizing application delivery without incurring additional infrastructure costs.

The ability to automatically scale and efficiently utilize resources contributes significantly to cost efficiency. By only paying for actual consumption, companies can achieve high performance and global availability at a fraction of the cost of traditional infrastructure models. This price flexibility and transparency make Azure an excellent choice for deploying globally distributed applications.

## Best practices and tips for optimization

In order to exploit the full potential of a globally distributed Azure app, some best practices and tips for optimization and management should be followed:

**Select consistency model:** Select the most appropriate consistency model for your application in Azure Cosmos DB. Strict consistency ensures data integrity but can increase latency. Eventual consistency offers higher availability and lower latency, but with possible data inconsistency.

**Efficient data partitioning:** Ensure that your data is partitioned efficiently. Good partitioning in Azure Cosmos DB improves scalability and performance by preventing certain partitions from being overloaded.

**Caching strategies:** Implement caching strategies to speed up frequent data accesses and reduce the load on the database. Azure Redis Cache can be a useful addition here.

**Use serverless architectures:** Take advantage of serverless architectures like Azure Functions to scale automatically and save costs. Make sure to design functions so that they are short and precise in order to minimize execution costs.

**Optimize load balancing:** Configure Azure Front Door to optimally distribute traffic. Use geo-routing and other load balancing algorithms to achieve the best performance.

**Security measures:** Ensure that your application is protected by appropriate security measures. Enable the Web Application Firewall (WAF) in Azure Front Door and use Azure Security Center to detect and remediate potential threats.

**Automated scaling:** Use the automatic scaling of Azure Functions and Azure Cosmos DB to dynamically adapt resources to current demand. This helps to optimize costs while ensuring high availability.

**Regular review and adjustment:** Carry out regular performance reviews and adjust configurations if necessary. Regularly review metrics and reports from Azure Monitor and Application Insights to identify bottlenecks and optimization opportunities.


By implementing these best practices and tips, the performance and efficiency of the globally distributed Azure App can be significantly improved. Continuous optimization and management ensures that the application meets changing requirements and functions optimally.


## Summary
Deploying a globally distributed Azure app offers significant benefits in terms of performance, availability and cost efficiency. By using Azure Cosmos DB, Azure Functions and Azure Front Door, an application can be deployed quickly and securely worldwide. With just a few configurations, new regions can be added and security mechanisms implemented to ensure the protection of the application. In addition, the application remains cost-efficient, even with high data traffic. The combination of these powerful Azure services makes it possible to meet the demands of a globalized and digitized world while providing an optimal user experience.

## References
- [Azure Function global verteilt bereitstellen | Serverless global distributed Azure App](https://www.youtube.com/watch?v=9j22DodPimw)
- [Global verteilte Azure App unglaublich einfach bereitstellen – Hochverfügbarkeit und niedrige Latenz inklusive!](florian-lenz.io/blog/global-distributed-azure-app)
- [How to build globally distributed applications with Azure Cosmos DB and Pulumi](https://azure.microsoft.com/en-us/blog/how-to-build-globally-distributed-applications-with-azure-cosmos-db-and-pulumi/)
- [GitHub](https://github.com/florianlenz96/GlobalDistributedAzureFunctions)