跳转至

部署与运维

本文档提供在生产环境中部署和操作 GoVector 的指南。它涵盖了部署策略、配置选项、监控和最佳实践。

🚀 部署选项

嵌入式模式

嵌入式模式是最简单的部署选项,其中 GoVector 直接在您的应用程序进程中运行。

使用场景

  • 单实例应用
  • 边缘设备
  • 低流量应用
  • 开发和测试

部署步骤

  1. 添加依赖
go get github.com/yourusername/govector
  1. 在应用程序中初始化
import (
    "github.com/yourusername/govector/core"
)

// 初始化集合
collection, err := core.NewCollection(core.CollectionConfig{
    Name:       "my-collection",
    VectorLen:  768,
    Metric:     core.Cosine,
    IndexType:  core.HNSW,
    Quantize:   true, // 在生产环境中启量化
})
if err != nil {
    log.Fatalf("创建集合失败: %v", err)
}

// 在关闭时保存集合
defer func() {
    if err := collection.Save("/path/to/persistence"); err != nil {
        log.Printf("保存集合失败: %v", err)
    }
}()

微服务模式

微服务模式将 GoVector 作为独立服务器运行,可通过 HTTP API 访问。

使用场景

  • 多应用系统
  • 语言无关环境
  • 高流量应用
  • 集中式向量存储

部署步骤

  1. 构建服务器
go build -o govector-server ./cmd/server
  1. 运行服务器
./govector-server --host 0.0.0.0 --port 6333 --data ./data
  1. 使用 systemd

创建 systemd 服务文件 /etc/systemd/system/govector.service

[Unit]
Description=GoVector 向量数据库
After=network.target

[Service]
Type=simple
User=youruser
WorkingDirectory=/path/to/govector
ExecStart=/path/to/govector-server --host 0.0.0.0 --port 6333 --data ./data
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 启动并启用服务
sudo systemctl daemon-reload
sudo systemctl start govector
sudo systemctl enable govector

🔧 配置

服务器配置

标志 描述 默认值
--host 监听的主机 127.0.0.1
--port 监听的端口 6333
--data 数据目录 ./data
--log-level 日志级别 (debug, info, warn, error) info

环境变量

变量 描述 默认值
GOVECTOR_HOST 监听的主机 127.0.0.1
GOVECTOR_PORT 监听的端口 6333
GOVECTOR_DATA_DIR 数据目录 ./data
GOVECTOR_LOG_LEVEL 日志级别 info

📊 监控

健康检查

GoVector 提供健康检查端点:

curl http://localhost:6333/health

指标

GoVector 在 http://localhost:6333/metrics 暴露 Prometheus 兼容的指标:

  • govector_collection_count - 集合数量
  • govector_point_count{collection="name"} - 每个集合的点数量
  • govector_search_requests_total - 总搜索请求数
  • govector_search_duration_seconds - 搜索延迟
  • govector_upsert_requests_total - 总写入请求数
  • govector_upsert_duration_seconds - 写入延迟

日志

GoVector 默认登录到 stdout/stderr。对于生产环境,考虑将日志重定向到集中式日志系统:

./govector-server --host 0.0.0.0 --port 6333 --data ./data 2>&1 | tee -a /var/log/govector.log

🛡️ 安全

网络安全

  • 在生产环境中使用 HTTPS
  • 限制对可信客户端的网络访问
  • 使用反向代理(例如 Nginx)以获得额外的安全性

认证

虽然 GoVector 不包含内置认证,但您可以使用反向代理添加它:

server {
    listen 443 ssl;
    server_name govector.example.com;

    ssl_certificate /etc/ssl/certs/cert.pem;
    ssl_certificate_key /etc/ssl/private/key.pem;

    location / {
        proxy_pass http://localhost:6333;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;

        # 基本认证
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

💾 备份与恢复

备份

定期备份数据目录:

# 创建备份
mkdir -p /backup/govector
cp -r /path/to/data/* /backup/govector/

# 压缩备份
tar -czf /backup/govector-$(date +%Y%m%d).tar.gz /backup/govector/

恢复

从备份恢复:

  1. 停止 GoVector
  2. 恢复备份
# 从备份恢复
tar -xzf /backup/govector-20231201.tar.gz -C /path/to/

# 设置正确的权限
chown -R youruser:yourgroup /path/to/data
  1. 启动 GoVector

📈 性能调优

对于高流量

  • 使用 SSD 存储以获得更好的 I/O 性能
  • 启 SQ8 量化以减少内存使用
  • 调整 HNSW 参数以适应您的数据集大小
  • 对批量插入使用批处理操作

对于大型数据集

  • 增加内存分配
  • 使用多个集合来分散负载
  • 考虑在多个实例之间进行分片

🚩 常见问题

内存不足

  • 原因:大型数据集未启量化
  • 解决方案:启 SQ8 量化,增加内存分配

性能缓慢

  • 原因:HNSW 参数不当,磁盘速度慢
  • 解决方案:调整 HNSW 参数,使用 SSD 存储

数据损坏

  • 原因:意外关闭,磁盘错误
  • 解决方案:定期备份,使用日志文件系统

🔗 相关文档