Releases: leafcoder/litefs
Releases · leafcoder/litefs
LiteFS v0.8.3
重大改进
简化包导入结构
- 移除
__init__.py中的__getattr__延迟导入机制和庞大的__all__列表(203行 → 31行) - 所有代码改为从子模块直接导入(如
from litefs.core import Litefs),降低维护复杂度 - 同步更新所有测试文件(28个)、示例代码(10个)、文档(24个)中的导入方式
异步错误处理重构
- 提取
_build_error_parts公共方法,消除_handle_error_parts与_async_handle_error_parts的重复代码
WSGI 输入流修复
- 读取
wsgi.input后重置流位置(seek(0)),确保后续中间件可重新读取请求体 - 提取
_reset_input_stream静态方法,3处重复逻辑统一调用,增加try/except防御
限流中间件测试修复
- 修复
RateLimitMiddleware和ThrottleMiddleware测试用例,适配Response对象返回类型
日志系统健壮性
- 修复
log_info/log_error/log_debug在logger=None时的AttributeError,回退到logging模块级 logger DatabaseManager.close_all()改用有效 logger 而非传入None
Benchmark 测试脚本全面优化
- 修复
fastapi_uvicorn_server.py多 worker 启动问题(必须使用"module:app"字符串引用) - 修复
wait_for_server计时错误(原实际只等待 ~7.5s 却声称 15s) - 修复
median_of偶数长度中位数计算错误 - 增加信号处理(Ctrl+C 清理残留进程)、依赖检查、端口冷却等待
- 按进程组去重杀进程,避免重复操作
- LiteFS 服务器添加
session_secure=True消除开发环境警告
Bug 修复
- 修复服务器关闭时
DatabaseManager.close_all()的AttributeError - 修复
RateLimitMiddleware测试中'Response' object is not subscriptable错误 - 修复 WSGI 输入流读取后未重置位置导致后续中间件无法读取请求体的问题
Full Changelog: v0.8.2...v0.8.3
Release v0.8.2
v0.8.2 Release Notes
新增
- 性能基准测试框架(LiteFS vs FastAPI),支持多并发级别和多 Worker 配置
- 多迭代测试与中位数计算,减少结果波动
- 服务器预热(1000 次请求)与健康检查机制
- 性能基准测试报告文档
优化
- 性能测试脚本端口清理机制(SIGKILL + fuser + 进程组管理)
- 统一 FastAPI 测试响应格式(PlainTextResponse),避免 JSON 序列化开销
- FastAPI 测试代码改为 async 异步模式
修复
- 修复端口残留进程无法清理的问题
- 修复测试脚本中进程组管理问题
性能基准测试结果摘要
测试工具: Apache Benchmark (ab) | 总请求: 10000 | 预热: 1000 | 迭代: 3 (中位数)
1 Worker
| 并发 | LiteFS+HttpServer | LiteFS+Gunicorn | FastAPI+Gunicorn+Uvicorn | FastAPI+Uvicorn |
|---|---|---|---|---|
| 100 | 9,493 | 9,923 | 12,407 | 10,783 |
| 500 | 14,014 | 14,119 | 13,724 | 13,054 |
| 1000 | 13,937 | 15,055 | 14,671 | 14,694 |
4 Worker
| 并发 | LiteFS+HttpServer | LiteFS+Gunicorn | FastAPI+Gunicorn+Uvicorn | FastAPI+Uvicorn |
|---|---|---|---|---|
| 100 | 16,393 | 11,432 | 10,646 | 13,841 |
| 500 | 15,732 | 12,427 | 12,966 | 11,465 |
| 1000 | 15,270 | 13,975 | 15,406 | 14,784 |
8 Worker
| 并发 | LiteFS+HttpServer | LiteFS+Gunicorn | FastAPI+Gunicorn+Uvicorn | FastAPI+Uvicorn |
|---|---|---|---|---|
| 100 | 12,561 | 10,141 | 9,725 | 14,003 |
| 500 | 13,172 | 15,660 | 12,210 | 12,162 |
| 1000 | 17,303 | 13,882 | 12,666 | 13,943 |
单位: req/sec (中位数)
Release v0.8.1
Release v0.8.1
主要更新
性能测试优化
- FastAPI async 模式优化: 将 FastAPI 测试视图改为 async 异步模式,充分发挥异步性能优势
- 性能基准测试完成: 完成全面的性能基准测试,生成详细报告
性能测试结果
单核性能
- LiteFS: ~9,500 req/sec
- FastAPI: ~4,600 req/sec
- 性能提升: 2.06 倍
4核性能
- LiteFS: ~16,000-20,000 req/sec
- FastAPI: ~11,000 req/sec
- 性能提升: 1.40-1.92 倍
8核性能
- LiteFS: ~21,000 req/sec
- FastAPI: ~14,500 req/sec
- 性能提升: 1.44-1.47 倍
测试配置
- 测试工具: Apache Benchmark (ab)
- 总请求数: 10,000
- 并发级别: 100, 500, 1000
- 测试内容: 返回 "Hello world" 文本
文档更新
- 新增性能测试报告 performance-benchmark-v0.8.1.md
性能分析
- 单核优势: LiteFS 在单核模式下性能优势最明显,快 2 倍以上
- 多核扩展: 随着核心数增加,LiteFS 性能持续提升
- 高并发稳定: 在高并发场景下,LiteFS 性能优势稳定
- async 模式验证: 即使 FastAPI 使用 async 模式,LiteFS 仍显著领先
结论
LiteFS 是一个高性能的 Web 框架,在所有测试场景下均展现出显著的性能优势,特别适合处理高并发的 HTTP 请求。
Release v0.8.0
Release v0.8.0
主要更新
性能优化
- DatabaseCache 概率性清理机制: 避免每次操作都执行清理,提升性能
- DatabaseSession 连接池支持: 基于 SQLAlchemy 的高性能连接池
- 会话ID生成优化: 移除不必要的存储查找,性能提升 10-50倍
安全增强
- 密码泄露检查: 集成 HIBP API (Have I Been Pwned),支持智能缓存
- 环境感知配置: session_secure 根据环境自动设置
文档更新
- 所有新功能完整文档
- 使用示例和最佳实践
详细变更
1. DatabaseCache 概率性清理
问题: 原实现每次 get/exists 都执行 cleanup,影响性能
优化:
- 默认 1% 概率触发清理
- 支持阈值触发清理 (默认1000次操作)
- 可配置
cleanup_probability和cleanup_threshold
使用示例:
cache = DatabaseCache(
db_path="cache.db",
cleanup_probability=0.05, # 5% 概率触发清理
cleanup_threshold=500 # 每500次操作强制清理
)2. DatabaseSession 连接池
问题: 原实现无连接池,频繁创建/关闭连接影响性能
优化:
- 基于 SQLAlchemy 的高性能连接池
- 支持
pool_size,max_overflow,pool_timeout等配置 - 显著提升并发访问性能
使用示例:
session_store = DatabaseSession(
db_path="/path/to/sessions.db",
pool_size=10, # 连接池大小
max_overflow=20, # 最大溢出连接数
pool_timeout=60, # 获取连接超时时间
pool_recycle=1800 # 连接回收时间
)3. 密码泄露检查
问题: 原实现仅4个硬编码哈希,无实际安全价值
优化:
- 集成 HIBP API (Have I Been Pwned)
- 使用 k-anonymity 保护隐私
- 支持智能缓存 (性能提升 9440倍)
- 提供泄露次数查询
使用示例:
from litefs.auth.password import check_password_breach, get_breach_count
# 检查密码是否泄露
is_breached = check_password_breach("password123")
# 获取泄露次数
count = get_breach_count("password123")4. 环境感知配置
问题: session_secure 默认 False,生产环境不安全
优化:
- session_secure 根据环境自动设置
- 生产环境默认 True, 开发环境默认 False
- 自动安全警告
使用示例:
# 生产环境 - session_secure 自动设置为 True
app = Litefs(debug=False)
# 开发环境 - session_secure 自动设置为 False
app = Litefs(debug=True)5. 会话ID生成优化
问题: _new_session_id() 每次都检查存储,SHA-256 碰撞概率极低
优化:
- 移除不必要的存储查找
- SHA-256 碰撞概率约为 2^-128,几乎不可能发生碰撞
- 性能提升 10-50倍
测试验证
- ✅ 64个缓存和会话测试全部通过
- ✅ 18个认证测试全部通过
- ✅ 新增12个性能优化测试
- ✅ 新增6个密码泄露检查测试
- ✅ 所有文档已同步更新
升级说明
本次更新完全向后兼容,无需修改现有代码即可享受性能提升。
如需使用新功能,请参考上述使用示例。
贡献者
- Leafcoder (主要开发和维护)
完整变更日志
查看 CHANGELOG.md 获取完整的变更历史。