|
--- |
|
title: '智能路由' |
|
description: '自动负载均衡和请求路由到最佳的 MCP 服务器实例' |
|
--- |
|
|
|
## 概述 |
|
|
|
MCPHub 的智能路由系统自动将传入请求路由到最适合的 MCP 服务器实例。系统考虑服务器负载、响应时间、功能可用性和业务规则来做出路由决策。 |
|
|
|
## 路由策略 |
|
|
|
### 轮询路由 |
|
|
|
最简单的路由策略,按顺序分发请求: |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "round-robin", |
|
"targets": [ |
|
{ |
|
"serverId": "server-1", |
|
"weight": 1, |
|
"enabled": true |
|
}, |
|
{ |
|
"serverId": "server-2", |
|
"weight": 1, |
|
"enabled": true |
|
}, |
|
{ |
|
"serverId": "server-3", |
|
"weight": 1, |
|
"enabled": true |
|
} |
|
] |
|
} |
|
} |
|
``` |
|
|
|
### 加权轮询 |
|
|
|
基于服务器容量分配不同权重: |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "weighted-round-robin", |
|
"targets": [ |
|
{ |
|
"serverId": "high-performance-server", |
|
"weight": 3, |
|
"specs": { |
|
"cpu": "8 cores", |
|
"memory": "32GB" |
|
} |
|
}, |
|
{ |
|
"serverId": "standard-server-1", |
|
"weight": 2, |
|
"specs": { |
|
"cpu": "4 cores", |
|
"memory": "16GB" |
|
} |
|
}, |
|
{ |
|
"serverId": "standard-server-2", |
|
"weight": 1, |
|
"specs": { |
|
"cpu": "2 cores", |
|
"memory": "8GB" |
|
} |
|
} |
|
] |
|
} |
|
} |
|
``` |
|
|
|
### 最少连接数 |
|
|
|
将请求路由到当前连接数最少的服务器: |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "least-connections", |
|
"balancingMode": "dynamic", |
|
"healthCheck": { |
|
"enabled": true, |
|
"interval": 10000 |
|
} |
|
} |
|
} |
|
``` |
|
|
|
### 基于响应时间 |
|
|
|
路由到响应时间最短的服务器: |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "fastest-response", |
|
"metrics": { |
|
"measurementWindow": "5m", |
|
"sampleSize": 100, |
|
"excludeSlowRequests": true, |
|
"slowRequestThreshold": "5s" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
## 基于功能的路由 |
|
|
|
### 工具特定路由 |
|
|
|
根据请求的工具类型路由到专门的服务器: |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "capability-based", |
|
"rules": [ |
|
{ |
|
"condition": { |
|
"tool": "filesystem" |
|
}, |
|
"targets": ["filesystem-server-1", "filesystem-server-2"], |
|
"strategy": "least-connections" |
|
}, |
|
{ |
|
"condition": { |
|
"tool": "web-search" |
|
}, |
|
"targets": ["search-server-1", "search-server-2"], |
|
"strategy": "round-robin" |
|
}, |
|
{ |
|
"condition": { |
|
"tool": "database" |
|
}, |
|
"targets": ["db-server"], |
|
"strategy": "single" |
|
} |
|
], |
|
"fallback": { |
|
"targets": ["general-server-1", "general-server-2"], |
|
"strategy": "round-robin" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
### 内容感知路由 |
|
|
|
基于请求内容进行智能路由: |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "content-aware", |
|
"rules": [ |
|
{ |
|
"condition": { |
|
"content.language": "python" |
|
}, |
|
"targets": ["python-specialized-server"], |
|
"reason": "Python代码分析专用服务器" |
|
}, |
|
{ |
|
"condition": { |
|
"content.size": "> 1MB" |
|
}, |
|
"targets": ["high-memory-server"], |
|
"reason": "大文件处理专用服务器" |
|
}, |
|
{ |
|
"condition": { |
|
"content.type": "image" |
|
}, |
|
"targets": ["image-processing-server"], |
|
"reason": "图像处理专用服务器" |
|
} |
|
] |
|
} |
|
} |
|
``` |
|
|
|
## 地理位置路由 |
|
|
|
### 基于客户端位置 |
|
|
|
根据客户端地理位置路由到最近的服务器: |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "geo-location", |
|
"regions": [ |
|
{ |
|
"name": "北美", |
|
"countries": ["US", "CA", "MX"], |
|
"servers": ["us-east-1", "us-west-1", "ca-central-1"], |
|
"strategy": "least-latency" |
|
}, |
|
{ |
|
"name": "欧洲", |
|
"countries": ["DE", "FR", "UK", "NL"], |
|
"servers": ["eu-west-1", "eu-central-1"], |
|
"strategy": "round-robin" |
|
}, |
|
{ |
|
"name": "亚太", |
|
"countries": ["CN", "JP", "KR", "SG"], |
|
"servers": ["ap-southeast-1", "ap-northeast-1"], |
|
"strategy": "fastest-response" |
|
} |
|
], |
|
"fallback": { |
|
"servers": ["global-server-1"], |
|
"strategy": "single" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
### 延迟优化 |
|
|
|
```bash |
|
# 配置延迟监控 |
|
curl -X PUT http://localhost:3000/api/routing/latency-config \ |
|
-H "Content-Type: application/json" \ |
|
-H "Authorization: Bearer $TOKEN" \ |
|
-d '{ |
|
"enabled": true, |
|
"measurementInterval": 30000, |
|
"regions": [ |
|
{"id": "us-east", "endpoint": "ping.us-east.example.com"}, |
|
{"id": "eu-west", "endpoint": "ping.eu-west.example.com"}, |
|
{"id": "ap-southeast", "endpoint": "ping.ap-southeast.example.com"} |
|
], |
|
"routing": { |
|
"preferLowLatency": true, |
|
"maxLatencyThreshold": "200ms", |
|
"fallbackOnTimeout": true |
|
} |
|
}' |
|
``` |
|
|
|
## 负载感知路由 |
|
|
|
### 实时负载监控 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "load-aware", |
|
"loadMetrics": { |
|
"cpu": { |
|
"threshold": 80, |
|
"weight": 0.4 |
|
}, |
|
"memory": { |
|
"threshold": 85, |
|
"weight": 0.3 |
|
}, |
|
"connections": { |
|
"threshold": 1000, |
|
"weight": 0.2 |
|
}, |
|
"responseTime": { |
|
"threshold": "2s", |
|
"weight": 0.1 |
|
} |
|
}, |
|
"adaptation": { |
|
"enabled": true, |
|
"adjustmentInterval": 60000, |
|
"emergencyThreshold": 95 |
|
} |
|
} |
|
} |
|
``` |
|
|
|
### 预测性负载均衡 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "predictive", |
|
"prediction": { |
|
"algorithm": "linear-regression", |
|
"trainingWindow": "7d", |
|
"predictionHorizon": "1h", |
|
"factors": ["historical_load", "time_of_day", "day_of_week", "seasonal_patterns"] |
|
}, |
|
"adaptation": { |
|
"preemptiveScaling": true, |
|
"scaleUpThreshold": 70, |
|
"scaleDownThreshold": 30 |
|
} |
|
} |
|
} |
|
``` |
|
|
|
## 故障转移和恢复 |
|
|
|
### 自动故障转移 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "high-availability", |
|
"failover": { |
|
"enabled": true, |
|
"detection": { |
|
"healthCheckFailures": 3, |
|
"timeoutThreshold": "10s", |
|
"checkInterval": 5000 |
|
}, |
|
"recovery": { |
|
"automaticRecovery": true, |
|
"recoveryChecks": 5, |
|
"recoveryInterval": 30000 |
|
} |
|
}, |
|
"clusters": [ |
|
{ |
|
"name": "primary", |
|
"servers": ["server-1", "server-2"], |
|
"priority": 1 |
|
}, |
|
{ |
|
"name": "secondary", |
|
"servers": ["backup-server-1", "backup-server-2"], |
|
"priority": 2 |
|
} |
|
] |
|
} |
|
} |
|
``` |
|
|
|
### 断路器模式 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"circuitBreaker": { |
|
"enabled": true, |
|
"failureThreshold": 10, |
|
"timeWindow": 60000, |
|
"halfOpenRetries": 3, |
|
"fallback": { |
|
"type": "cached-response", |
|
"ttl": 300000 |
|
} |
|
} |
|
} |
|
} |
|
``` |
|
|
|
## 会话亲和性 |
|
|
|
### 粘性会话 |
|
|
|
保持用户会话与特定服务器的关联: |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "session-affinity", |
|
"affinity": { |
|
"type": "cookie", |
|
"cookieName": "mcphub-server-id", |
|
"ttl": 3600000, |
|
"fallbackOnUnavailable": true |
|
}, |
|
"sessionStore": { |
|
"type": "redis", |
|
"config": { |
|
"host": "localhost", |
|
"port": 6379, |
|
"db": 1 |
|
} |
|
} |
|
} |
|
} |
|
``` |
|
|
|
### 基于用户 ID 的路由 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "user-based", |
|
"userRouting": { |
|
"algorithm": "consistent-hashing", |
|
"hashFunction": "sha256", |
|
"virtualNodes": 100, |
|
"replicationFactor": 2 |
|
} |
|
} |
|
} |
|
``` |
|
|
|
## 动态路由配置 |
|
|
|
### 运行时配置更新 |
|
|
|
```bash |
|
# 更新路由配置 |
|
curl -X PUT http://localhost:3000/api/routing/config \ |
|
-H "Content-Type: application/json" \ |
|
-H "Authorization: Bearer $TOKEN" \ |
|
-d '{ |
|
"strategy": "weighted-round-robin", |
|
"weights": { |
|
"server-1": 3, |
|
"server-2": 2, |
|
"server-3": 1 |
|
}, |
|
"applyImmediately": true |
|
}' |
|
``` |
|
|
|
### A/B 测试路由 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "ab-testing", |
|
"experiments": [ |
|
{ |
|
"name": "new-algorithm-test", |
|
"enabled": true, |
|
"trafficSplit": { |
|
"control": 70, |
|
"variant": 30 |
|
}, |
|
"rules": { |
|
"control": { |
|
"strategy": "round-robin", |
|
"servers": ["stable-server-1", "stable-server-2"] |
|
}, |
|
"variant": { |
|
"strategy": "ai-optimized", |
|
"servers": ["experimental-server-1"] |
|
} |
|
}, |
|
"metrics": ["response_time", "error_rate", "user_satisfaction"] |
|
} |
|
] |
|
} |
|
} |
|
``` |
|
|
|
## 路由分析和监控 |
|
|
|
### 实时路由指标 |
|
|
|
```bash |
|
# 获取路由统计 |
|
curl -X GET http://localhost:3000/api/routing/metrics \ |
|
-H "Authorization: Bearer $TOKEN" |
|
``` |
|
|
|
响应示例: |
|
|
|
```json |
|
{ |
|
"timestamp": "2024-01-01T12:00:00Z", |
|
"totalRequests": 15420, |
|
"routingDistribution": { |
|
"server-1": { "requests": 6168, "percentage": 40 }, |
|
"server-2": { "requests": 4626, "percentage": 30 }, |
|
"server-3": { "requests": 3084, "percentage": 20 }, |
|
"backup-server": { "requests": 1542, "percentage": 10 } |
|
}, |
|
"performance": { |
|
"avgResponseTime": "245ms", |
|
"p95ResponseTime": "580ms", |
|
"errorRate": "0.3%" |
|
}, |
|
"failovers": { |
|
"total": 2, |
|
"byServer": { |
|
"server-2": 1, |
|
"server-3": 1 |
|
} |
|
} |
|
} |
|
``` |
|
|
|
### 路由决策日志 |
|
|
|
```bash |
|
# 启用路由决策日志 |
|
curl -X PUT http://localhost:3000/api/routing/logging \ |
|
-H "Content-Type: application/json" \ |
|
-H "Authorization: Bearer $TOKEN" \ |
|
-d '{ |
|
"enabled": true, |
|
"level": "info", |
|
"includeDecisionFactors": true, |
|
"sampleRate": 0.1 |
|
}' |
|
``` |
|
|
|
## 自定义路由规则 |
|
|
|
### 基于业务逻辑的路由 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "custom-rules", |
|
"rules": [ |
|
{ |
|
"name": "premium-users", |
|
"priority": 1, |
|
"condition": "user.tier === 'premium'", |
|
"action": { |
|
"targetServers": ["premium-server-1", "premium-server-2"], |
|
"strategy": "least-connections", |
|
"qos": { |
|
"maxResponseTime": "1s", |
|
"priority": "high" |
|
} |
|
} |
|
}, |
|
{ |
|
"name": "high-volume-requests", |
|
"priority": 2, |
|
"condition": "request.size > 10MB", |
|
"action": { |
|
"targetServers": ["high-capacity-server"], |
|
"strategy": "single", |
|
"timeout": "60s" |
|
} |
|
}, |
|
{ |
|
"name": "batch-processing", |
|
"priority": 3, |
|
"condition": "request.type === 'batch'", |
|
"action": { |
|
"targetServers": ["batch-server-1", "batch-server-2"], |
|
"strategy": "queue-based", |
|
"queueConfig": { |
|
"maxSize": 1000, |
|
"timeout": "5m" |
|
} |
|
} |
|
} |
|
] |
|
} |
|
} |
|
``` |
|
|
|
### JavaScript 路由函数 |
|
|
|
```javascript |
|
// 自定义路由函数 |
|
function customRouting(request, servers, metrics) { |
|
const { user, content, timestamp } = request |
|
|
|
// 工作时间优先使用高性能服务器 |
|
const isBusinessHours = |
|
new Date(timestamp).getHours() >= 9 && new Date(timestamp).getHours() <= 17 |
|
|
|
if (isBusinessHours && user.priority === 'high') { |
|
return servers.filter((s) => s.tags.includes('high-performance')) |
|
} |
|
|
|
// 基于内容类型的特殊路由 |
|
if (content.type === 'code-analysis') { |
|
return servers.filter((s) => s.capabilities.includes('code-analysis')) |
|
} |
|
|
|
// 默认负载均衡 |
|
return servers.sort((a, b) => a.currentLoad - b.currentLoad) |
|
} |
|
``` |
|
|
|
## 路由优化 |
|
|
|
### 机器学习优化 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "ml-optimized", |
|
"mlConfig": { |
|
"algorithm": "reinforcement-learning", |
|
"rewardFunction": "response_time_weighted", |
|
"trainingData": { |
|
"features": [ |
|
"server_load", |
|
"response_time_history", |
|
"request_complexity", |
|
"user_pattern", |
|
"time_of_day" |
|
], |
|
"targetMetric": "overall_satisfaction" |
|
}, |
|
"updateFrequency": "hourly", |
|
"explorationRate": 0.1 |
|
} |
|
} |
|
} |
|
``` |
|
|
|
### 缓存感知路由 |
|
|
|
```json |
|
{ |
|
"routing": { |
|
"strategy": "cache-aware", |
|
"caching": { |
|
"enabled": true, |
|
"levels": [ |
|
{ |
|
"type": "local", |
|
"ttl": 300, |
|
"maxSize": "100MB" |
|
}, |
|
{ |
|
"type": "distributed", |
|
"provider": "redis", |
|
"ttl": 3600, |
|
"maxSize": "1GB" |
|
} |
|
], |
|
"routing": { |
|
"preferCachedServers": true, |
|
"cacheHitBonus": 0.3, |
|
"cacheMissThreshold": 0.8 |
|
} |
|
} |
|
} |
|
} |
|
``` |
|
|
|
## 故障排除 |
|
|
|
### 路由调试 |
|
|
|
```bash |
|
# 调试特定请求的路由决策 |
|
curl -X POST http://localhost:3000/api/routing/debug \ |
|
-H "Content-Type: application/json" \ |
|
-H "Authorization: Bearer $TOKEN" \ |
|
-d '{ |
|
"request": { |
|
"userId": "user123", |
|
"tool": "filesystem", |
|
"content": {"type": "read", "path": "/data/file.txt"} |
|
}, |
|
"traceRoute": true |
|
}' |
|
``` |
|
|
|
### 路由性能分析 |
|
|
|
```bash |
|
# 获取路由性能报告 |
|
curl -X GET http://localhost:3000/api/routing/performance \ |
|
-H "Authorization: Bearer $TOKEN" \ |
|
-G -d "timeRange=1h" -d "detailed=true" |
|
``` |
|
|
|
### 常见问题 |
|
|
|
1. **不均匀的负载分布** |
|
|
|
- 检查服务器权重配置 |
|
- 验证健康检查设置 |
|
- 分析请求模式 |
|
|
|
2. **频繁的故障转移** |
|
|
|
- 调整健康检查阈值 |
|
- 检查网络连接稳定性 |
|
- 优化服务器资源 |
|
|
|
3. **路由延迟过高** |
|
- 简化路由规则 |
|
- 优化路由算法 |
|
- 使用缓存加速决策 |
|
|
|
有关更多信息,请参阅 [监控](/zh/features/monitoring) 和 [服务器管理](/zh/features/server-management) 文档。 |
|
|