//------------------------------------------------------------------- //-------------------------------------------------------------------
Build Multi Region Hosting

How to Build Multi Region Hosting Architecture

Multi region hosting architecture distributes application infrastructure across multiple geographic locations to deliver high availability, reduced latency, and disaster recovery capabilities. Your servers, databases, and storage run in different regions around the world, so users connect to whichever location is closest to them.

This architecture removes single points of failure; if one region goes down, your other regions keep running, and it reduces the distance between users and servers, which means faster response times. When a region fails, traffic automatically switches to healthy regions without service interruption.

In this guide from PerLod Hosting, we want to discover how to design and implement multi region hosting for latency-sensitive and high-availability applications.

Multi Region Hosting Use Cases

Multi-region hosting solves problems that single-region setups cannot handle. Here are the most common use cases of multi-region hosting:

Latency-Sensitive Applications: Multi-region hosting speeds up applications that need response times under 100ms. By placing servers closer to users, you eliminate the lag caused by long physical distances and multiple network hops.

E-Commerce Performance: Multi-region hosting keeps your e-commerce platform fast for every global customer, which increases both user experience and revenue.

High-Availability Requirements: To achieve 99.99% availability, you need multi-region redundancy. This protects your app from major disasters like power outages that can take down an entire data center.

Financial Services Continuity: Financial systems can’t afford downtime. An active-active setup keeps transactions running during outages, which allows real-time failover that prevents massive financial losses.

Global SaaS Platforms: Global SaaS platforms must stay online during disruptions. Multi-region hosting deployments handle this automatically, which turns hours of potential downtime into just seconds of seamless transition.

Disaster Recovery and Compliance: Multi-region strategies are essential for meeting strict data recovery goals and local privacy laws.

Data Sovereignty Compliance: Laws like GDPR often require data to stay within specific borders. Multi-region hosting lets you keep European data strictly in the EU while serving other users globally, which ensures you stay compliant without sacrificing performance.

Business Continuity Planning: To hit targets like zero data loss and near-zero downtime, you need multi-region strategies. It is the only way to achieve 99.999% availability, as single-region setups simply cannot reach that level of reliability.

Traffic Routing Strategies for Multi-Region Apps

Traffic routing acts as the traffic controller for your application, which automatically directs every user request to the optimal data center based on specific rules. A good traffic routing strategy balances speed, uptime, and cost.​

DNS-Based Routing Methods

Domain Name System (DNS) is the most common way to direct traffic. It works by resolving your domain name to the IP address of the best region for that specific user.

Latency-Based Routing: Latency-based routing automatically connects users to the region that offers them the fastest speed. The system continuously measures network performance and routes traffic to the quickest available path for each user.

Here is a configuration example using AWS Route 53:

# Create hosted zone
aws route53 create-hosted-zone \
  --name example.com \
  --caller-reference $(date +%s)

# Create latency-based record for US East region
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "app.example.com",
        "Type": "A",
        "SetIdentifier": "US-East-1",
        "Region": "us-east-1",
        "TTL": 60,
        "ResourceRecords": [{"Value": "203.0.113.10"}]
      }
    }]
  }'

# Create latency-based record for EU West region
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "app.example.com",
        "Type": "A",
        "SetIdentifier": "EU-West-1",
        "Region": "eu-west-1",
        "TTL": 60,
        "ResourceRecords": [{"Value": "198.51.100.20"}]
      }
    }]
  }'

This setup creates two records for your domain, one for each region. Route 53 checks the speed from the user to both regions and automatically sends them to the faster one.

Geoproximity Routing with Bias: Geoproximity routing directs traffic based on physical distance. It allows you to set bias rules that expand or shrink the area a specific region serves. For example:

# Create geoproximity routing policy
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "app.example.com",
        "Type": "A",
        "SetIdentifier": "US-Region-Bias-Positive",
        "GeoProximityLocation": {
          "AWSRegion": "us-east-1",
          "Bias": 50
        },
        "TTL": 60,
        "ResourceRecords": [{"Value": "203.0.113.10"}]
      }
    }]
  }'

Bias allows you to manually expand or shrink a region’s service area. A positive number extends its reach to attract more traffic, while a negative number reduces it.

Biased distance = actual distance × [1 - (bias/100)]

For example, a bias of 50 makes a region appear twice as close, pulling in more users from further away.

Geolocation Routing for Compliance: This routing directs users based on their geographic location, which ensures data residency compliance.

Example route: European users to the EU region:

# Route European users to EU region
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "app.example.com",
        "Type": "A",
        "SetIdentifier": "Europe-Region",
        "GeoLocation": {
          "ContinentCode": "EU"
        },
        "TTL": 60,
        "ResourceRecords": [{"Value": "198.51.100.20"}]
      }
    }]
  }'

# Create default record for other locations
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "app.example.com",
        "Type": "A",
        "SetIdentifier": "Default-Region",
        "GeoLocation": {
          "ContinentCode": "*"
        },
        "TTL": 60,
        "ResourceRecords": [{"Value": "203.0.113.10"}]
      }
    }]
  }'

This setup routes European traffic to EU servers to comply with GDPR laws, while directing all other traffic to your default region.

Global Load Balancers: Network Edge Routing

Global load balancers operate at the network edge, which offer smarter and faster traffic control than standard DNS.

AWS Global Accelerator: AWS Global Accelerator provides you with fixed IP addresses that route user traffic through Amazon’s private network, rather than the public internet, ensuring the fastest path to your servers.

# Create Global Accelerator
aws globalaccelerator create-accelerator \
  --name multi-region-accelerator \
  --ip-address-type IPV4 \
  --enabled

# Output returns static IP addresses
# {
#   "Accelerator": {
#     "AcceleratorArn": "arn:aws:globalaccelerator::123456789012:accelerator/abcd1234",
#     "Name": "multi-region-accelerator",
#     "IpAddressType": "IPV4",
#     "Enabled": true,
#     "IpSets": [{
#       "IpFamily": "IPv4",
#       "IpAddresses": ["75.2.60.5", "99.83.190.51"]
#     }]
#   }
# }

# Create listener for TCP traffic
aws globalaccelerator create-listener \
  --accelerator-arn arn:aws:globalaccelerator::123456789012:accelerator/abcd1234 \
  --port-ranges FromPort=80,ToPort=80 \
  --protocol TCP

# Add endpoint group for US East region
aws globalaccelerator create-endpoint-group \
  --listener-arn arn:aws:globalaccelerator::123456789012:listener/ef123456 \
  --endpoint-group-region us-east-1 \
  --traffic-dial-percentage 100 \
  --endpoint-configurations \
    EndpointId=arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/us-east-alb/abc123,Weight=100

# Add endpoint group for EU West region
aws globalaccelerator create-endpoint-group \
  --listener-arn arn:aws:globalaccelerator::123456789012:listener/ef123456 \
  --endpoint-group-region eu-west-1 \
  --traffic-dial-percentage 100 \
  --endpoint-configurations \
    EndpointId=arn:aws:elasticloadbalancing:eu-west-1:123456789012:loadbalancer/app/eu-west-alb/def456,Weight=100

Global Accelerator constantly checks server health and routes traffic via Amazon’s private network, which reduces latency by about 25%. Its static IPs remove DNS delays, ensuring instant failover if a region goes down.

Google Cloud Load Balancing: Google Cloud’s global load balancer distributes traffic across regions using anycast IP addresses.

# Reserve global static IP address
gcloud compute addresses create global-lb-ip \
  --ip-version=IPV4 \
  --global

# Create health check
gcloud compute health-checks create http app-health-check \
  --port=80 \
  --request-path=/health \
  --check-interval=30s \
  --timeout=10s \
  --healthy-threshold=2 \
  --unhealthy-threshold=3

# Create backend service
gcloud compute backend-services create multi-region-backend \
  --protocol=HTTP \
  --health-checks=app-health-check \
  --global

# Add instance group from US region
gcloud compute backend-services add-backend multi-region-backend \
  --instance-group=us-instance-group \
  --instance-group-zone=us-central1-a \
  --balancing-mode=UTILIZATION \
  --max-utilization=0.8 \
  --global

# Add instance group from EU region
gcloud compute backend-services add-backend multi-region-backend \
  --instance-group=eu-instance-group \
  --instance-group-zone=europe-west1-b \
  --balancing-mode=UTILIZATION \
  --max-utilization=0.8 \
  --global

# Create URL map
gcloud compute url-maps create multi-region-urlmap \
  --default-service=multi-region-backend

# Create target HTTPS proxy
gcloud compute target-https-proxies create multi-region-https-proxy \
  --url-map=multi-region-urlmap \
  --ssl-certificates=ssl-cert

# Create forwarding rule
gcloud compute forwarding-rules create multi-region-forwarding-rule \
  --address=global-lb-ip \
  --global \
  --target-https-proxy=multi-region-https-proxy \
  --ports=443

This configuration creates a global load balancer that automatically routes users to the nearest healthy backend based on proximity. The load balancer terminates SSL at Google’s edge locations, which reduces handshake latency.

Azure Traffic Manager: Azure Traffic Manager provides DNS-based global traffic routing with multiple methods.

# Create Traffic Manager profile with performance routing
az network traffic-manager profile create \
  --name multi-region-tm \
  --resource-group production-rg \
  --routing-method Performance \
  --unique-dns-name multi-region-app \
  --ttl 30 \
  --protocol HTTPS \
  --port 443 \
  --path "/health"

# Add endpoint for US East region
az network traffic-manager endpoint create \
  --name us-east-endpoint \
  --profile-name multi-region-tm \
  --resource-group production-rg \
  --type azureEndpoints \
  --target-resource-id /subscriptions/sub-id/resourceGroups/us-rg/providers/Microsoft.Network/applicationGateways/us-appgw \
  --endpoint-status Enabled

# Add endpoint for West Europe region
az network traffic-manager endpoint create \
  --name eu-west-endpoint \
  --profile-name multi-region-tm \
  --resource-group production-rg \
  --type azureEndpoints \
  --target-resource-id /subscriptions/sub-id/resourceGroups/eu-rg/providers/Microsoft.Network/applicationGateways/eu-appgw \
  --endpoint-status Enabled

Traffic Manager supports multiple routing methods, including latency-based, failover, load distribution, and location-based. The TTL setting of 30 seconds controls how fast the system switches users to a new region during a failure.

Dedicated Servers in Multi-Region Setup: Some organizations combine cloud regions with dedicated servers in specific locations for maximum control and performance. Dedicated Server Hosting can serve as primary or backup endpoints routed through the same global load balancers, which offer flexibility when cloud-only solutions don’t meet specific compliance or performance requirements.

Content Delivery Networks: Edge Caching and Acceleration

CDNs enhance multi region hosting architectures by caching static content at edge locations closer to users.

CloudFront with Multi-Region Origins: Amazon CloudFront can route requests to different regional origins based on edge location.

# Create CloudFront distribution with multiple origins
aws cloudfront create-distribution \
  --distribution-config '{
    "CallerReference": "multi-region-'$(date +%s)'",
    "Origins": {
      "Quantity": 2,
      "Items": [
        {
          "Id": "us-origin",
          "DomainName": "us-alb-123456.us-east-1.elb.amazonaws.com",
          "CustomOriginConfig": {
            "HTTPPort": 80,
            "HTTPSPort": 443,
            "OriginProtocolPolicy": "https-only"
          }
        },
        {
          "Id": "eu-origin",
          "DomainName": "eu-alb-789012.eu-west-1.elb.amazonaws.com",
          "CustomOriginConfig": {
            "HTTPPort": 80,
            "HTTPSPort": 443,
            "OriginProtocolPolicy": "https-only"
          }
        }
      ]
    },
    "DefaultCacheBehavior": {
      "TargetOriginId": "us-origin",
      "ViewerProtocolPolicy": "redirect-to-https",
      "TrustedSigners": {
        "Enabled": false,
        "Quantity": 0
      },
      "ForwardedValues": {
        "QueryString": true,
        "Cookies": {"Forward": "none"}
      },
      "MinTTL": 0
    },
    "OriginGroups": {
      "Quantity": 1,
      "Items": [{
        "Id": "origin-group-1",
        "FailoverCriteria": {
          "StatusCodes": {
            "Quantity": 3,
            "Items": [500, 502, 503]
          }
        },
        "Members": {
          "Quantity": 2,
          "Items": [
            {"OriginId": "us-origin"},
            {"OriginId": "eu-origin"}
          ]
        }
      }]
    },
    "Enabled": true
  }'

This setup creates an automatic backup; if your US server fails (returns 5xx errors), CloudFront instantly switches to the EU server. You can also use Lambda@Edge for smarter routing based on location or custom rules.

Multi Region Failover Strategies

Multi region failover strategies are your plan for staying online when a region goes down. The setup you choose determines how quickly you recover, how much data you might lose, and how much it costs to run.

Active-Active Architecture

In an active-active setup, your full application runs in multiple regions at once, and every region serves users simultaneously.

Architecture Components Include:

User Traffic
    ↓
Global Load Balancer (Route 53, Global Accelerator, Traffic Manager)
    ↓
├── Region A (Active)           ├── Region B (Active)
│   ├── Load Balancer           │   ├── Load Balancer
│   ├── Application Servers     │   ├── Application Servers
│   └── Database (Read/Write)   │   └── Database (Read/Write)

Here is an implementation example with DynamoDB global tables:

# Create DynamoDB table in primary region
aws dynamodb create-table \
  --table-name users \
  --attribute-definitions \
    AttributeName=user_id,AttributeType=S \
  --key-schema \
    AttributeName=user_id,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST \
  --region us-east-1 \
  --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES

# Create global table (replicates to additional regions)
aws dynamodb create-global-table \
  --global-table-name users \
  --replication-group RegionName=us-east-1 RegionName=eu-west-1 RegionName=ap-southeast-1 \
  --region us-east-1

DynamoDB Global Tables allow you to read and write data in any region with near-instant updates. It automatically handles conflicts by keeping the most recent version of the data.

Active-active setups offer the best uptime and nearly instant failover since all regions are already running. It increases performance by connecting users to the nearest server, cutting latency by up to 60%, and allowing for updates without any downtime.

Note: Running active-active is expensive because you double your infrastructure costs. Also, it complicates data handling, as you must manage conflicting updates from different regions and design your app to handle slight delays in data syncing.

Active-Passive Architecture

Active-passive setups use one primary region for all traffic, keeping a backup region on standby to take over only if the primary one fails.

Architecture Components Include:

User Traffic
    ↓
Global Load Balancer (Primary endpoint weighted 100%)
    ↓
├── Region A (Active - Primary)      ├── Region B (Passive - Standby)
│   ├── Load Balancer                │   ├── Load Balancer (standby)
│   ├── Application Servers          │   ├── Application Servers (minimal)
│   └── Database (Primary)           │   └── Database (Read Replica)

Here is an example implementation with RDS read replicas:

# Create primary database in us-east-1
aws rds create-db-instance \
  --db-instance-identifier primary-db \
  --db-instance-class db.r5.xlarge \
  --engine postgres \
  --master-username admin \
  --master-user-password SecurePassword123 \
  --allocated-storage 100 \
  --backup-retention-period 7 \
  --multi-az \
  --region us-east-1

# Create cross-region read replica in eu-west-1
aws rds create-db-instance-read-replica \
  --db-instance-identifier replica-db \
  --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:primary-db \
  --db-instance-class db.r5.xlarge \
  --region eu-west-1

# Promote replica to standalone instance during failover
aws rds promote-read-replica \
  --db-instance-identifier replica-db \
  --region eu-west-1

Read replica promotion typically takes 1 to 5 minutes, which is your downtime during a failure. Because data copies over with a slight delay, you might lose a few seconds or minutes of data if the primary region crashes suddenly.

Standby Configuration Levels Include:

Hot Standby: A fully running backup system that sits idle until needed. It offers the fastest recovery but is the most expensive option.

# Configure Route 53 failover with hot standby
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [
      {
        "Action": "CREATE",
        "ResourceRecordSet": {
          "Name": "app.example.com",
          "Type": "A",
          "SetIdentifier": "Primary",
          "Failover": "PRIMARY",
          "TTL": 60,
          "ResourceRecords": [{"Value": "203.0.113.10"}],
          "HealthCheckId": "health-check-primary"
        }
      },
      {
        "Action": "CREATE",
        "ResourceRecordSet": {
          "Name": "app.example.com",
          "Type": "A",
          "SetIdentifier": "Secondary",
          "Failover": "SECONDARY",
          "TTL": 60,
          "ResourceRecords": [{"Value": "198.51.100.20"}]
        }
      }
    ]
  }'

Warm Standby: A smaller version of your infrastructure runs in the backup region. It saves money but takes longer to scale up during a failure.

Pilot Light: Only your essential data is kept in sync, with no application servers running. It’s the cheapest option, but takes the longest to launch everything when needed.

This Active-Passive setup saves money because you only run full power in one place. It’s also simpler to manage since data is written to just one region, avoiding conflicts. It makes disaster planning easier because you know exactly how the switch will happen.

Note: Users far from the active region will see slower performance. Also, there is a small risk of data loss if the primary region fails before syncing, and you need a solid plan to manually switch everything over.

FAQs

What’s the difference between Multi-region active-active and active-passive failover strategies?

Active-active runs everywhere at once for max performance. Active-passive uses one main region and only turns on the backup if things fail. Active-active is faster; active-passive is cheaper.

How much latency improvement can I expect in multi region hosting?

It typically cuts lag by 40 to 80% for distant users by connecting them to nearby servers instead of one far-away location.

Will I lose data if a region fails in multi-region deployments?​

It depends on your setup. With synchronous replication, you lose zero data. With asynchronous replication, you might lose a few seconds of data if the backup hasn’t fully updated yet.

Conclusion

Multi region hosting is the best option to build fast and reliable applications. By spreading your infrastructure across the globe, you ensure that users always connect to a server near them, which reduces lag by up to 80%, while guaranteeing that your service stays online even if an entire data center fails.

You can choose Active-Active for instant performance, or Active-Passive for a cheaper and more reliable backup plan.

We hope you enjoy this guide on Multi region Hosting architecture. Subscribe to our X and Facebook channels to get the latest updates and articles.

For further reading:

Best redundancy models for GPU infrastructure

How to Create a High Availability Setup with Pacemaker and Corosync

Post Your Comment

PerLod delivers high-performance hosting with real-time support and unmatched reliability.

Contact us

Payment methods

payment gateway
Perlod Logo
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.