就近路由
场景
多地域部署后,需要智能路由。
现状:
- 所有用户都解析到同一 IP
- 无法自动路由到最近地域
- 跨地域访问延迟高
目标:
- 北京用户 → 北京服务器
- 上海用户 → 上海服务器
- 广州用户 → 广州服务器解决方案
1. GeoDNS 智能解析
域名:api.kuaiyizhi.cn
地域映射:
- 华北地区 → 北京 IP:1.2.3.4
- 华东地区 → 上海 IP:5.6.7.8
- 华南地区 → 广州 IP:9.10.11.12
实现方式:
1. 使用 DNS 服务商的 GeoDNS 功能
2. 自建 BIND 服务器
3. 使用智能 DNS 服务2. HTTP 重定向
@app.before_request
def redirect_to_nearest_region():
"""重定向到最近地域"""
# 跳过 API 请求
if request.path.startswith('/api/'):
return None
# 获取用户地域
user_region = detect_user_region()
# 检查当前地域
current_region = get_current_region()
# 如果用户不在当前地域,重定向
if user_region != current_region:
region_urls = {
'beijing': 'https://beijing.kuaiyizhi.cn',
'shanghai': 'https://shanghai.kuaiyizhi.cn',
'guangzhou': 'https://guangzhou.kuaiyizhi.cn'
}
return redirect(region_urls[user_region])
def detect_user_region():
"""检测用户地域"""
# 方法 1:根据 IP 地址
client_ip = request.remote_addr
ip_region = get_ip_region(client_ip)
if ip_region in ['beijing', 'shanghai', 'guangzhou']:
return ip_region
# 方法 2:根据用户偏好
if 'user_id' in session:
user = get_user(session['user_id'])
if user.get('preferred_region'):
return user['preferred_region']
# 默认:北京
return 'beijing'3. CDN 全球加速
使用 CDN 的全球加速功能:
1. 接入 CDN 服务(Cloudflare, Akamai 等)
2. 配置源站地址
3. 启用智能路由
4. 配置边缘节点
架构:
用户请求
↓
CDN 边缘节点(就近)
↓
判断是否有缓存
├─ 有 → 返回缓存
└─ 无 → 回源到最近地域监控和优化
延迟监控
def monitor_region_latency():
"""监控各地域延迟"""
regions = ['beijing', 'shanghai', 'guangzhou']
for region in regions:
try:
# 检查健康端点
start = time.time()
response = requests.get(
f'https://{region}.kuaiyizhi.cn/health',
timeout=5
)
latency = (time.time() - start) * 1000
# 记录延迟
record_latency(region, latency)
# 告警
if latency > 500:
send_alert(f'High latency in {region}: {latency}ms')
except Exception as e:
send_alert(f'Failed to check {region}: {e}')
# 定时监控
scheduler.add_job(
monitor_region_latency,
'interval',
seconds=60,
id='monitor_latency'
)效果验证
优化前
全国访问北京服务器:
- 北京用户:20ms
- 上海用户:100ms
- 广州用户:150ms
- 平均:90ms优化后(就近路由)
就近访问:
- 华北用户(北京服务器):20ms
- 华东用户(上海服务器):30ms
- 华南用户(广州服务器):25ms
- 平均:25ms
提升:72%本节小结
✅ 完成的工作:
- 配置了 GeoDNS 智能解析
- 实现了 HTTP 重定向
- 接入了 CDN 全球加速
- 添加了延迟监控
✅ 效果:
- 平均延迟降低 72%
- 用户体验提升
- 全球用户访问优化
🎯 完成!我已经学会了多地域部署
