lolly/README.md
xfy 530ba5e36e docs: 添加项目 README 文档
介绍项目特性、安装、配置、架构等信息

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-03 16:23:51 +08:00

243 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Lolly
高性能 HTTP 服务器与反向代理,使用 Go 语言编写。
基于 [fasthttp](https://github.com/valyala/fasthttp) 构建,提供比标准 net/http 更高的性能。支持 HTTP/3、WebSocket、虚拟主机、多种负载均衡算法以及完整的安全与性能优化特性。
## 特性
### 核心功能
- **静态文件服务** - 零拷贝传输sendfile、文件缓存、预压缩支持
- **反向代理** - 完整的代理功能,支持请求头/响应头修改、超时控制
- **HTTP/3 (QUIC)** - 基于 quic-go支持 0-RTT 连接
- **WebSocket** - 完整的 WebSocket 代理支持
- **虚拟主机** - 单进程支持多域名独立配置
- **TCP/UDP Stream** - 四层代理,支持 MySQL、Redis 等服务
### 负载均衡
| 算法 | 说明 |
|------|------|
| Round Robin | 轮询,均匀分配 |
| Weighted Round Robin | 加权轮询,按权重分配 |
| Least Connections | 最少连接,选择活跃连接最少的目标 |
| IP Hash | IP 哈希,同一客户端始终路由到同一目标 |
| Consistent Hash | 一致性哈希,支持虚拟节点,最小化节点变更影响 |
### 安全
- **访问控制** - IP/CIDR 白名单与黑名单
- **速率限制** - 令牌桶与滑动窗口算法
- **认证** - Basic Auth支持 bcrypt 与 argon2id
- **安全头部** - HSTS、X-Frame-Options、CSP、Referrer-Policy
- **SSL/TLS** - OCSP Stapling、TLS 1.2/1.3、加密套件配置
### 性能优化
- **Goroutine 池** - 限制并发 worker 数量,避免 goroutine 爆炸
- **文件缓存** - LRU 淘汰策略,内存上限控制
- **连接池** - 空闲连接复用,减少连接建立开销
- **零拷贝** - 大文件传输使用 sendfile 系统调用
### 运维
- **热升级** - USR2 信号触发,零停机升级
- **配置热重载** - HUP 信号触发,动态更新配置
- **日志轮转** - USR1 信号触发,重新打开日志文件
- **优雅关闭** - QUIT 信号触发,等待请求完成
- **状态监控** - 内置状态端点,统计连接数、请求数、流量
## 安装
### 构建
```bash
# 克隆仓库
git clone https://github.com/xfy/lolly.git
cd lolly
# 本地构建
make build
# 生产构建(优化体积)
make build-prod
# 跨平台构建
make build-all
```
构建产物位于 `bin/` 目录。
### 运行
```bash
# 使用默认配置
./bin/lolly
# 指定配置文件
./bin/lolly -c /path/to/lolly.yaml
# 生成默认配置
./bin/lolly --generate-config -o lolly.yaml
# 显示版本
./bin/lolly -v
```
## 配置
配置文件使用 YAML 格式。以下是基本示例:
```yaml
server:
listen: ":8080"
static:
root: "/var/www/html"
index: ["index.html", "index.htm"]
proxy:
- path: "/api"
targets:
- url: "http://backend1:8080"
weight: 2
- url: "http://backend2:8080"
weight: 1
load_balance: "weighted_round_robin"
health_check:
interval: 10s
path: "/health"
timeout: 5s
ssl:
cert: "/etc/ssl/certs/server.crt"
key: "/etc/ssl/private/server.key"
compression:
type: "gzip"
level: 6
min_size: 1024
security:
rate_limit:
request_rate: 100
burst: 200
http3:
enabled: true
listen: ":443"
max_streams: 100
logging:
format: "json"
access:
path: "/var/log/lolly/access.log"
error:
path: "/var/log/lolly/error.log"
level: "info"
performance:
goroutine_pool:
enabled: true
max_workers: 1000
file_cache:
max_entries: 10000
max_size: 100MB
```
完整配置说明请参考源码 `internal/config/config.go`
## 架构
```
internal/
app/ # 应用入口、信号处理、生命周期
config/ # 配置加载、验证、默认值
server/ # HTTP 服务器、虚拟主机、Goroutine 池
handler/ # 路由器、静态文件处理器
proxy/ # 反向代理、WebSocket、健康检查
loadbalance/ # 负载均衡算法
middleware/ # 中间件链
compression/ # Gzip/Brotli 压缩
security/ # 访问控制、限流、认证、安全头部
rewrite/ # URL 重写
accesslog/ # 访问日志
http3/ # HTTP/3 服务器
stream/ # TCP/UDP Stream 代理
ssl/ # TLS 配置、OCSP Stapling
cache/ # 文件缓存、代理缓存
logging/ # 日志系统
```
## 信号处理
| 信号 | 行为 |
|------|------|
| SIGTERM, SIGINT | 快速停止 |
| SIGQUIT | 优雅停止,等待请求完成 |
| SIGHUP | 重载配置 |
| SIGUSR1 | 重新打开日志文件 |
| SIGUSR2 | 热升级 |
## 测试
```bash
# 运行测试
make test
# 测试覆盖率
make test-cover
# 基准测试
make bench
# 代码检查
make check
```
## 性能
基于 fasthttp相比标准 net/http 有显著性能提升:
- 避免不必要的内存分配
- 优化的事件循环
- 高效的连接池管理
- 零拷贝传输
建议生产环境配置:
```yaml
performance:
goroutine_pool:
enabled: true
max_workers: 10000
file_cache:
max_entries: 50000
max_size: 256MB
transport:
max_idle_conns: 1000
max_idle_conns_per_host: 100
idle_conn_timeout: 90s
```
## 与 NGINX 对比
| 特性 | Lolly | NGINX |
|------|-------|-------|
| HTTP/3 | 支持 | 1.25+ 支持 |
| 配置格式 | YAML | 自定义格式 |
| 热升级 | 支持 | 支持 |
| 扩展方式 | Go 代码 | C 模块/Lua |
| 部署 | 单二进制 | 需安装 |
| 内存占用 | 较低 | 较低 |
## 依赖
- [fasthttp](https://github.com/valyala/fasthttp) - 高性能 HTTP 服务器
- [quic-go](https://github.com/quic-go/quic-go) - QUIC/HTTP/3 实现
- [zerolog](https://github.com/rs/zerolog) - 高性能日志库
- [klauspost/compress](https://github.com/klauspost/compress) - 压缩算法
## 许可证
MIT License
## 作者
xfy