Multi-region architecture đảm bảo high availability, low latency cho users toàn cầu, và disaster recovery. Chi phí cao hơn đáng kể - chỉ áp dụng khi business requirements thực sự cần.
Khi nào cần Multi-Region?
Yếu tố
Single Region đủ
Cần Multi-Region
SLA yêu cầu
99.9% (8.76h downtime/năm)
99.99% (52 phút/năm)
Users
1 khu vực địa lý
Nhiều continents
Compliance
Không yêu cầu data residency đa vùng
GDPR, data sovereignty
RTO
> 1 giờ chấp nhận được
< 15 phút
RPO
> 1 giờ chấp nhận được
< 5 phút
Azure Traffic Manager vs Front Door
Tiêu chí
Traffic Manager
Azure Front Door
Layer
DNS-based (L4)
HTTP reverse proxy (L7)
Routing methods
Priority, Weighted, Performance, Geographic
Latency, Priority, Weighted, Session affinity
SSL offloading
Không
Có
WAF
Không
Có (tích hợp)
Caching
Không
Có (CDN built-in)
Health probes
TCP/HTTP
HTTP/HTTPS
Failover speed
DNS TTL (30-300s)
Near-instant (< 30s)
Giá
Rẻ ($0.54/million queries)
Đắt hơn (per request + data transfer)
Phù hợp
Non-HTTP (TCP), simple failover
Web apps, APIs, cần WAF + CDN
Khuyến nghị: Dùng Front Door cho web/API workloads. Dùng Traffic Manager cho non-HTTP protocols hoặc khi cần tiết kiệm chi phí.
Multi-Region Architecture
Deployment Stamps Pattern
Mỗi "stamp" là một bản sao hoàn chỉnh của toàn bộ stack, deploy độc lập ở mỗi region.
Đặc điểm Deployment Stamps:
Mỗi stamp self-contained - có đủ compute, data, cache
Scale bằng cách thêm stamps mới (scale unit)
Isolate failure - 1 stamp fail không ảnh hưởng stamps khác
Dễ rollout - canary deploy theo từng stamp
bash
# Deploy stamp mới bằng Bicep
az deployment sub create \
--location southeastasia \
--template-file main.bicep \
--parameters \
stampName=sea-01 \
region=southeastasia \
environment=production
az deployment sub create \
--location eastasia \
--template-file main.bicep \
--parameters \
stampName=ea-01 \
region=eastasia \
environment=production
Cosmos DB Multi-Region Writes
bash
# Tạo Cosmos DB với multi-region writes
az cosmosdb create \
--resource-group rg-global \
--name cosmos-myapp-global \
--locations regionName=southeastasia failoverPriority=0 isZoneRedundant=true \
--locations regionName=eastasia failoverPriority=1 isZoneRedundant=true \
--enable-multiple-write-locations true \
--default-consistency-level Session
Consistency Levels - Chọn đúng
Level
Latency
Consistency
Use Case
Strong
Cao nhất
100% consistent
Financial transactions
Bounded Staleness
Cao
Consistent within bound
Inventory counts
Session
Trung bình
Consistent per session
User profiles (phổ biến nhất)
Consistent Prefix
Thấp
Ordered, có thể stale
Activity feeds
Eventual
Thấp nhất
Có thể out-of-order
Analytics, logs
csharp
// Cấu hình Cosmos DB client với preferred regions
builder.Services.AddSingleton(sp =>
{
var client = new CosmosClient(connectionString, new CosmosClientOptions
{
ApplicationRegion = Regions.SoutheastAsia,
// Hoặc set preferred regions list
ApplicationPreferredRegions = new List<string>
{
Regions.SoutheastAsia,
Regions.EastAsia
},
ConsistencyLevel = ConsistencyLevel.Session
});
return client;
});
Azure SQL Geo-Replication
bash
# Tạo failover group
az sql failover-group create \
--resource-group rg-global \
--server sql-myapp-sea \
--name fog-myapp \
--partner-server sql-myapp-ea \
--partner-resource-group rg-global \
--failover-policy Automatic \
--grace-period 1
# Connection string dùng failover group endpoint# Read-write: fog-myapp.database.windows.net# Read-only: fog-myapp.secondary.database.windows.net
csharp
// Connection string sử dụng failover group// Tự động redirect khi failover xảy ra
{
"ConnectionStrings": {
"Default": "Server=tcp:fog-myapp.database.windows.net,1433;Database=MyAppDb;Authentication=Active Directory Managed Identity;",
"ReadOnly": "Server=tcp:fog-myapp.secondary.database.windows.net,1433;Database=MyAppDb;Authentication=Active Directory Managed Identity;ApplicationIntent=ReadOnly;"
}
}