8. 性能与成本
8.1 弹性伸缩
伸缩策略
智能金融解决方案采用自动弹性伸缩策略,根据负载自动调整资源:
水平伸缩(Horizontal Scaling)
-
基于CPU使用率:
- 扩容阈值:CPU使用率 > 70% 持续5分钟
- 缩容阈值:CPU使用率 < 30% 持续10分钟
- 扩容步长:每次增加2个实例
- 最大实例数:20个
-
基于内存使用率:
- 扩容阈值:内存使用率 > 80% 持续5分钟
- 缩容阈值:内存使用率 < 40% 持续10分钟
- 扩容步长:每次增加2个实例
-
基于请求量:
- 扩容阈值:QPS > 1000 持续3分钟
- 缩容阈值:QPS < 500 持续10分钟
- 扩容步长:每次增加2个实例
-
基于队列长度:
- 扩容阈值:任务队列长度 > 1000 持续5分钟
- 缩容阈值:任务队列长度 < 100 持续10分钟
垂直伸缩(Vertical Scaling)
- 基于资源需求:
- 监控实例的资源使用情况
- 自动升级实例规格(CPU、内存)
- 适用于资源密集型任务
Kubernetes HPA配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: finance-ai-api
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: finance-ai-api
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleUp:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 2
periodSeconds: 60
scaleDown:
stabilizationWindowSeconds: 600
policies:
- type: Pods
value: 1
periodSeconds: 300
资源调度
调度策略
-
节点选择:
- 优先选择资源充足的节点
- 避免将Pod调度到资源紧张的节点
- 支持节点亲和性和反亲和性
-
Pod优先级:
- 关键业务Pod优先级高
- 非关键业务Pod优先级低
- 低优先级Pod可以被驱逐
-
资源限制:
- 设置Pod的CPU和内存限制
- 防止单个Pod占用过多资源
- 保证系统稳定性
Kubernetes调度配置
apiVersion: v1
kind: Pod
metadata:
name: finance-ai-api
spec:
containers:
- name: api
image: finance-ai:latest
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2000m"
memory: "4Gi"
nodeSelector:
node-type: compute
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- finance-ai-api
topologyKey: kubernetes.io/hostname
成本优化
成本优化策略
-
使用Spot实例:
- 对于非关键任务,使用Spot实例
- Spot实例价格比按需实例低60-90%
- 适用于可以容忍中断的任务
-
预留实例:
- 对于长期运行的任务,使用预留实例
- 预留实例价格比按需实例低30-50%
- 适用于稳定负载
-
自动启停:
- 非业务时间自 动停止非关键服务
- 业务时间自动启动服务
- 节省非业务时间的成本
-
资源优化:
- 定期分析资源使用情况
- 调整资源分配,避免资源浪费
- 使用资源配额限制资源使用
成本优化实现
class CostOptimizer:
def __init__(self, k8s_client):
self.k8s_client = k8s_client
def optimize_resources(self):
"""优化资源使用"""
# 分析资源使用情况
usage = self.analyze_resource_usage()
# 识别资源浪费
waste = self.identify_waste(usage)
# 优化资源分配
for pod in waste:
self.scale_down_pod(pod)
def schedule_spot_instances(self):
"""调度Spot实例"""
# 识别可以使用Spot实例的任务
tasks = self.identify_spot_tasks()
# 将任务调度到Spot实例
for task in tasks:
self.schedule_to_spot(task)
def auto_start_stop(self):
"""自动启停服务"""
current_hour = datetime.now().hour
# 非业务时间(22:00-08:00)停止非关键服务
if current_hour >= 22 or current_hour < 8:
self.stop_non_critical_services()
else:
self.start_non_critical_services()
8.2 缓存策略
缓存设计
缓存层级
-
L1缓存(本地缓存):
- 存储位置:应用内存
- 容量:较小(几MB到几十MB)
- 速度:最快
- 用途:存储热点数据、频繁访问的数据
-
L2缓存(分布式缓存):
- 存储位置:Redis集群
- 容量:较大(几GB到几十GB)
- 速度:快
- 用途:存储共享数据、会话数据
-
L3缓存(数据库缓存):
- 存储位置:数据库查询缓存
- 容量:取决于数据库配置
- 速度:中等
- 用途:缓存查询结果
缓存策略
-
Cache-Aside(旁路缓存):
- 应用先查询缓存,缓存未命中时查询数据库
- 更新数据时,先更新数据库,再删除缓存
- 适用于读多写少的场景
-
Write-Through(写穿透):
- 更新数据时,同时更新缓存和数据库
- 保证缓存和数据库的一致性