8. 性能与成本
8.1 弹性伸缩
伸缩策略
智能客服系统需要根据负载自动伸缩,确保服务稳定和成本优化:
水平伸缩(Horizontal Scaling)
自动伸缩规则:
- CPU使用率:>70%时扩容,<30%时缩容
- 内存使用率:>80%时扩容,<40%时缩容
- 请求队列长度:>100时扩容,<10时缩容
- 响应时间:P95>1000ms时扩容
Kubernetes HPA配置:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: customer-service-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: customer-service
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 50
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max
垂直伸缩(Vertical Scaling)
资源调整规则:
- 根据历史负载预测资源需求
- 在业务高峰期前提前扩容
- 在业务低峰期自动缩容
VPA配置:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: customer-service-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: customer-service
updatePolicy:
updateMode: "Auto"
resourcePolicy:
containerPolicies:
- containerName: customer-service
minAllowed:
cpu: 100m
memory: 128Mi
maxAllowed:
cpu: 4
memory: 8Gi
资源调度
调度策略
节点选择:
- GPU节点:用于AI模型推理
- CPU节点:用于业务逻辑处理
- 内存优化节点:用于缓存服务
Pod调度:
apiVersion: v1
kind: Pod
spec:
nodeSelector:
node-type: gpu
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
containers:
- name: ai-model
resources:
requests:
nvidia.com/gpu: 1
limits:
nvidia.com/gpu: 1
资源优化
资源请求和限制:
- 合理设置requests和limits
- 避免资源浪费
- 确保服务稳定性
多租户隔离:
- 使用命名空间隔离不同租户
- 设置资源配额
- 防止资源争抢
成本优化
成本优化策略
1. 使用Spot实例
- 非关键服务使用Spot实例
- 成本降低60-90%
- 需要容忍中断
2. 预留实例
- 长期稳定负载使用预留实例
- 成本降低30-50%
- 需要提前规划
3. 自动休眠
- 低峰期自动休眠非关键服务
- 节省计算资源
- 需要快速唤醒机制
4. 模型选择优化
- 简单问题使用低成本模型
- 复杂问题使用高性能模型
- 平衡成本和效果
8.2 缓存策略
缓存设计
多级缓存架构
1. CDN缓存
- 缓存静态资源(JS、CSS、图片)
- 缓存常见问题的回答
- 减少服务器压力
2. 应用缓存(本地缓存)
- 缓存热点数据
- 缓存用户会话
- 减少网络请求
3. Redis缓存(分布式缓存)
- 缓存知识库检索结果
- 缓存模型推理结果
- 缓存用户对话历史
缓存策略
1. 常见问题缓存
- Key:问题文本的MD5
- Value:标准回答
- TTL:24小时
- 更新策略:知识库更新时清除
2. 知识检索结果缓存
- Key:查询文本 + 知识库版本
- Value:检索到的文档列表
- TTL:1小时
- 更新策略:知识库更新时清除
3. 模型推理结果缓存
- Key:问题 + 上下文 + 模型版本
- Value:生成的回答
- TTL:根据问题类型动态调整
- 更新策略:模型更新时清除
实现示例:
import redis
import hashlib
import json
class CacheManager:
def __init__(self):
self.redis_client = redis.Redis(host='localhost', port=6379)
def get_cache_key(self, question, context=None):
key_data = {
"question": question,
"context": context or "",
"kb_version": self.get_kb_version()
}
key_str = json.dumps(key_data, sort_keys=True)
return f"answer:{hashlib.md5(key_str.encode()).hexdigest()}"
def get_answer(self, question, context=None):
cache_key = self.get_cache_key(question, context)
cached = self.redis_client.get(cache_key)
if cached:
return json.loads(cached)
return None
def set_answer(self, question, answer, context=None, ttl=3600):
cache_key = self.get_cache_key(question, context)
self.redis_client.setex(
cache_key,
ttl,
json.dumps(answer)
)
缓存更新
更新策略
1. 主动更新(Write-Through)
- 数据更新时同步更新缓存
- 保证数据一致性
- 适合写多读少的场景
2. 被动更新 (Write-Back)
- 数据更新时先更新缓存
- 异步更新数据库
- 适合写少读多的场景
3. 失效更新(Cache-Aside)
- 数据更新时删除缓存
- 下次读取时重新加载
- 简单可靠,推荐使用
4. 定时更新
- 定时刷新热点数据
- 保证数据新鲜度
- 适合数据变化不频繁的场景
缓存失效
失效场景:
- 知识库更新
- 模型更新
- Prompt更新
- 用户数据更新
失效策略:
class CacheInvalidator:
def invalidate_by_pattern(self, pattern):
"""按模式清除缓存"""
keys = self.redis_client.keys(pattern)
if keys:
self.redis_client.delete(*keys)
def invalidate_knowledge_cache(self):
"""清除知识库相关缓存"""
self.invalidate_by_pattern("answer:*")
self.invalidate_by_pattern("knowledge:*")
def invalidate_user_cache(self, user_id):
"""清除用户相关缓存"""
self.invalidate_by_pattern(f"user:{user_id}:*")
缓存命中率优化
优化策略
1. 预热缓存
- 系统启 动时加载热点数据
- 业务高峰期前预热
- 提升缓存命中率
2. 缓存分层
- 热点数据使用更快的存储
- 冷数据使用较慢的存储
- 平衡成本和性能
3. 缓存压缩
- 压缩缓存数据
- 减少内存占用
- 提升缓存容量
4. 智能淘汰
- 使用LRU(最近最少使用)算法
- 使用LFU(最不经常使用)算法
- 根据业务特点选择淘汰策略
监控指标
缓存命中率:
- 目标:>80%
- 监控:实时监控命中率
- 告警:命中率<70%时告警
缓存性能:
- 响应时间:<10ms
- 吞吐量:>10000 QPS
- 错误率:<0.01%
8.3 成本仪表盘
成本监控
成本分类
1. 计算成本
- 服务器成本
- GPU成本
- 容器服务成本
2. 存储成本
- 数据库存储成本
- 对象存储成本
- 备份存储成本
3. 网络成本
- 带宽成本
- CDN成本
- API调用成本
4. AI模型成本
- 大语言模型API调用成本
- 向量模型推理成本
- 模型训练成本
成本监控实现
成本数据收集:
class CostMonitor:
def __init__(self):
self.cost_data = {
"compute": 0,
"storage": 0,
"network": 0,
"ai_model": 0
}
def record_api_call(self, model, tokens):
"""记录API调用成本"""
cost = self.calculate_api_cost(model, tokens)
self.cost_data["ai_model"] += cost
def calculate_api_cost(self, model, tokens):
"""计算API调用成本"""
pricing = {
"gpt-4": {"input": 0.03, "output": 0.06}, # 每1K tokens
"gpt-3.5-turbo": {"input": 0.0015, "output": 0.002}
}
if model in pricing:
return (tokens["input"] * pricing[model]["input"] +
tokens["output"] * pricing[model]["output"]) / 1000
return 0
成本分析
成本分析维度
1. 按服务分析
- 各服务的成本占比
- 成本趋势分析
- 成本异常检测
2. 按用户分析
- 不同用户群体的成本
- 高价值用户识别
- 成本优化建议
3. 按时间分析
- 日/周/月成本趋势
- 高峰期成本分析
- 成本预测
4. 按模型分析
- 不同模型的调用成本
- 模型成本效益分析
- 模型选择建议
成本报表
日报:
- 当日总成本
- 各分类成本
- 成本趋势
周报:
- 本周总成本
- 成本环比分析
- 成本优化建议
月报:
- 本月总成本
- 成本预算对比
- 成本优化总结
成本优化建议
优化建议生成
1. 模型选择优化
- 分析各模型的使用场景
- 推荐成本效益最优的模型
- 预计节省成本
2. 缓存优化
- 分析缓存命中率
- 推荐缓存策略调整
- 预计节省成本
3. 资源优化
- 分析资源使用率
- 推荐资源调整方案
- 预计节省成本
4. 架构优化
- 分析系统架构瓶颈
- 推荐架构优化方案
- 预计节省成本
成本优化目标
短期目标(1-3个月):
- 成本降低20%
- 通过缓存和资源优化实现
中期目标(3-6个月):
- 成本降低40%
- 通过架构优化和模型选择实现
长期目标(6-12个月):
- 成本降低60%
- 通过全面优化实现