23-性能优化:从响应时间到并发处理

18 阅读1分钟

性能优化:从响应时间到并发处理

前言

性能优化是生产环境的重要课题。本文介绍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的企业知识库问答》