性能优化:从响应时间到并发处理
前言
性能优化是生产环境的重要课题。本文介绍AI Agent系统的性能优化策略。
适合读者: 后端开发者、性能工程师
一、数据库优化
# 1. 索引优化
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String(50), unique=True, index=True) # 添加索引
email = Column(String(100), unique=True, index=True) # 添加索引
# 2. 连接池配置
engine = create_async_engine(
DATABASE_URL,
pool_size=20, # 连接池大小
max_overflow=10, # 最大溢出连接
pool_timeout=30, # 获取连接超时
pool_recycle=3600, # 连接回收时间
)
# 3. 批量操作
async def batch_create_messages(db: AsyncSession, messages: list):
db.add_all([Message(**msg) for msg in messages])
await db.flush()
二、缓存优化
# 1. 多级缓存
class CacheManager:
def __init__(self):
self.memory_cache = {} # 内存缓存
self.redis = redis.Redis() # Redis缓存
async def get(self, key: str):
# 先查内存
if key in self.memory_cache:
return self.memory_cache[key]
# 再查Redis
value = await self.redis.get(key)
if value:
self.memory_cache[key] = value
return value
return None
# 2. 缓存预热
async def warm_up_cache():
hot_data = await db.get_hot_data()
for item in hot_data:
await cache.set(f"item:{item.id}", item)
三、并发优化
# 1. 限流
from slowapi import Limiter
from slowapi.util import get_remote_address
limiter = Limiter(key_func=get_remote_address)
@app.post("/chat")
@limiter.limit("10/minute") # 每分钟10次
async def chat(request: Request):
pass
# 2. 并发控制
semaphore = asyncio.Semaphore(100) # 最多100个并发
async def process_request():
async with semaphore:
# 处理请求
pass
四、性能监控
# 1. 响应时间监控
import time
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
response.headers["X-Process-Time"] = str(process_time)
return response
# 2. 慢查询日志
async def log_slow_query(query, duration):
if duration > 1.0: # 超过1秒
logger.warning(f"慢查询: {query}, 耗时: {duration}s")
下一篇预告: 《智能客服系统:基于RAG的企业知识库问答》