The following diagrams show the architecture for each multi-cloud configuration option:
Each cloud deployment gets its own hostname. Clients use the hostname for the cloud they want to target:
flowchart LR
client1["Client"] --> aws_dns["aws.api.example.com"]
client2["Client"] --> azure_dns["azure.api.example.com"]
client3["Client"] --> gcp_dns["gcp.api.example.com"]
aws_dns --> aws["AWS DCGW"]
azure_dns --> azure["Azure DCGW"]
gcp_dns --> gcp["GCP DCGW"]
aws --> aws_up["AWS upstreams"]
azure --> azure_up["Azure upstreams"]
gcp --> gcp_up["GCP upstreams"]
You can optionally use api.example.com (geo‑routed) for generic global access or disaster recovery.
A single hostname routes traffic to the nearest cloud deployment based on the client’s geographic location.
flowchart LR
client["Client"] --> dns["api.example.com (geo-proximity DNS)"]
dns --> aws["AWS DCGW"]
dns --> azure["Azure DCGW"]
dns --> gcp["GCP DCGW"]
aws --> aws_up["AWS upstreams"]
azure --> azure_up["Azure upstreams"]
gcp --> gcp_up["GCP upstreams"]
A CDN or global load balancer sits in front of all cloud deployments and routes traffic based on path, header, or tenant.
flowchart LR
client["Client"] --> hostname["api.example.com"]
hostname --> edge["Global L7 edge (CDN/global load balancer)"]
edge --> aws["AWS DCGW"]
edge --> azure["Azure DCGW"]
edge --> gcp["GCP DCGW"]
aws --> aws_up["AWS upstreams"]
azure --> azure_up["Azure upstreams"]
gcp --> gcp_up["GCP upstreams"]
The global L7 edge would have:
- Path-based routing (
/aws/*, /azure/*, /gcp/*)
- Header-based or tenant-based routing
- Centralized WAF/TLS termination