架构指南#
本文档描述 Cloud Native MCP Server 的系统架构和设计原则。
目录#
概述#
Cloud Native MCP Server 是一个高性能的 Model Context Protocol (MCP) 服务器,用于管理 Kubernetes 和云原生基础设施。它采用模块化设计,支持多种运行模式和协议。
架构目标#
- 高性能: 优化的缓存、连接池和资源管理
- 可扩展性: 模块化设计,易于添加新服务
- 安全性: 多层认证、输入清理和审计日志
- 可观测性: 内置指标、日志和追踪
- 可靠性: 健康检查、重试机制和优雅降级
系统架构#
┌─────────────────────────────────────────────────────────────┐
│ 客户端 │
│ (Claude Desktop, Browser, Custom MCP Clients) │
└────────────────────┬────────────────────────────────────────┘
│
│ MCP Protocol (SSE/Streamable-HTTP)
│
┌────────────────────▼────────────────────────────────────────┐
│ HTTP Server │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 路由层 (SSE/Streamable-HTTP) │ │
│ └────────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 中间件层 │ │
│ │ - 认证 (API Key/Bearer/Basic) │ │
│ │ - 审计日志 │ │
│ │ - 速率限制 │ │
│ │ - 安全中间件 │ │
│ │ - 指标收集 │ │
│ └────────────────────────────────────────────────────────┘ │
└────────────────────┬────────────────────────────────────────┘
│
│
┌────────────────────▼────────────────────────────────────────┐
│ 服务管理层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Kubernetes│ │ Helm │ │ Grafana │ │Prometheus│ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Kibana │ │Elastic │ │ AlertMgr │ │ Jaeger │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Otel │ │Utilities │ │
│ └──────────┘ └──────────┘ │
└────────────────────┬────────────────────────────────────────┘
│
│
┌────────────────────▼────────────────────────────────────────┐
│ 基础设施层 │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 缓存层 (LRU/Segmented) │ │
│ └────────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 密钥管理 │ │
│ └────────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 日志系统 │ │
│ └────────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 指标系统 │ │
│ └────────────────────────────────────────────────────────┘ │
└────────────────────┬────────────────────────────────────────┘
│
│
┌────────────────────▼────────────────────────────────────────┐
│ 外部服务 │
│ Kubernetes Cluster, Grafana, Prometheus, ES, etc. │
└─────────────────────────────────────────────────────────────┘核心组件#
1. HTTP 服务器#
职责: 处理传入的 HTTP/SSE 请求和连接
特性:
- 支持多种运行模式 (SSE, Streamable-HTTP)
- 可配置的超时和连接限制
- 优雅关闭
- 健康检查端点
关键文件:
cmd/server/server.gointernal/middleware/
2. 路由层#
职责: 将请求路由到正确的服务和工具
特性:
- 动态路由注册
- 路径参数解析
- 查询参数验证
- 错误处理
关键文件:
internal/services/registry.go
3. 中间件层#
职责: 在请求处理之前和之后执行通用逻辑
中间件:
- 认证: API Key, Bearer Token, Basic Auth
- 审计日志: 记录所有操作
- 速率限制: 防止滥用
- 安全: 输入清理和验证
- 指标: 收集性能指标
关键文件:
internal/middleware/auth_middleware.gointernal/middleware/audit_middleware.gointernal/middleware/ratelimit.gointernal/middleware/security_middleware.gointernal/middleware/metrics_middleware.go
4. 服务管理器#
职责: 管理所有注册的服务和工具
特性:
- 服务注册和发现
- 工具调用路由
- 服务生命周期管理
- 健康检查协调
关键文件:
internal/services/manager/manager.go
5. 缓存层#
职责: 提供高性能缓存以减少外部服务调用
特性:
- LRU 缓存
- 分段缓存
- TTL 支持
- 缓存统计
关键文件:
internal/services/cache/
6. 密钥管理器#
职责: 安全地存储和管理敏感凭据
特性:
- 内存存储
- 密钥轮换
- 密钥生成
- 过期管理
关键文件:
internal/secrets/manager.go
7. 日志系统#
职责: 结构化日志记录
特性:
- 多级别日志 (debug, info, warn, error)
- JSON 和文本格式
- 结构化字段
- 上下文支持
关键文件:
internal/logging/logging.go
8. 指标系统#
职责: 收集和暴露性能指标
特性:
- Prometheus 格式
- 请求计数
- 延迟统计
- 缓存命中率
关键文件:
internal/observability/metrics/
服务集成#
服务接口#
所有服务都实现统一的接口:
| |
服务注册#
服务在启动时自动注册:
| |
工具调用流程#
- 客户端发送工具调用请求
- 路由层解析请求,确定服务和工具
- 中间件层执行认证、审计等
- 服务管理器路由到正确的服务
- 缓存层检查缓存
- 服务执行工具调用
- 结果返回给客户端
- 审计日志记录操作
数据流#
请求流#
客户端
│
├─> HTTP/SSE 连接
│
├─> 认证中间件
│ ├─> 验证 API Key/Token
│ └─> 检查权限
│
├─> 速率限制中间件
│ └─> 检查配额
│
├─> 路由层
│ └─> 解析服务和方法
│
├─> 审计中间件
│ └─> 记录请求开始
│
├─> 服务管理器
│ └─> 路由到服务
│
├─> 缓存层
│ ├─> 检查缓存
│ └─> 返回缓存或继续
│
├─> 服务
│ ├─> 调用外部 API
│ ├─> 处理响应
│ └─> 更新缓存
│
├─> 审计中间件
│ └─> 记录请求完成
│
├─> 指标中间件
│ └─> 记录指标
│
└─> 响应返回客户端响应流#
服务
│
├─> 处理结果
│
├─> 数据转换
│ ├─> 格式化
│ └─> 压缩
│
├─> 缓存更新
│ └─> 存储到缓存
│
├─> 指标更新
│ └─> 记录性能指标
│
└─> 返回响应设计原则#
1. 模块化#
每个服务都是独立的模块,可以单独启用/禁用:
| |
2. 可扩展性#
易于添加新服务:
- 创建服务目录
- 实现服务接口
- 注册工具
- 配置选项
3. 配置驱动#
所有行为都通过配置控制:
- 服务启用/禁用
- 认证方式
- 缓存策略
- 日志级别
4. 故障隔离#
服务故障不会影响其他服务:
| |
5. 优雅降级#
服务不可用时返回友好错误:
| |
性能优化#
1. 缓存策略#
LRU 缓存#
| |
适用场景:
- 读取密集型操作
- 数据变化不频繁
- 高延迟操作
分段缓存#
| |
适用场景:
- 不同类型的数据
- 需要不同的 TTL
- 并发访问
2. 连接池#
| |
3. 响应链路优化#
响应压缩/截断与 JSON 处理优化由服务内部实现。
性能调优请优先使用公开可配置项(server、kubernetes、ratelimit)。
4. JSON 编码池#
| |
5. 批处理#
| |
扩展性#
添加新服务#
- 创建服务目录
| |
- 实现服务接口
| |
- 注册服务
| |
- 添加配置
| |
自定义工具#
| |
可观测性#
指标#
请求指标#
| |
缓存指标#
| |
连接指标#
| |
日志#
结构化日志#
| |
追踪#
OpenTelemetry 集成#
| |
部署架构#
单节点部署#
┌─────────────────┐
│ MCP Server │
│ (All Services) │
└────────┬────────┘
│
├─> Kubernetes
├─> Grafana
├─> Prometheus
└─> ...多节点部署#
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ MCP Node 1 │ │ MCP Node 2 │ │ MCP Node 3 │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└─────────────────┴─────────────────┘
│
▼
┌──────────────────┐
│ Load Balancer │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ External Services│
└──────────────────┘微服务部署#
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ MCP Gateway │ │ MCP Service │ │ MCP Service │
│ (Router) │ │ (Kubernetes) │ │ (Grafana) │
└──────┬───────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────────┐
│ Service Mesh │
│ (mTLS, Routing) │
└──────────────────┘