Profile
Back to NewsBack
GitHub Trending 2 min
Reader Mode
linkxzhou/SimpleBase: LessDB a serverless SQLite service designed to simplify the use of cloud-based MySQL, PostgreSQL, and other databases.

linkxzhou/SimpleBase: LessDB a serverless SQLite service designed to simplify the use of cloud-based MySQL, PostgreSQL, and other databases.

8 hours ago

SimpleBase

基于 Turso/libSQL、S3 在线持久层与 Go 构建的云端数据库服务,并集成统一 LLM 转发能力。

架构概览

Clients / SDK / CLI
          │
          ▼
┌─────────────────────────────────────────────────────┐
│ SimpleBase Server(首期唯一可写实例)              │
│                                                     │
│ API Gateway                                         │
│ ├─ Auth / Project / Quota / Audit                   │
│ ├─ Database Management API                          │
│ ├─ SQL Query API                                    │
│ └─ LLM Gateway API                                  │
│                                                     │
│ Database Runtime                 LLM Runtime         │
│ ├─ DB Registry(每库唯一 writer)├─ litellm Router  │
│ ├─ libsql / database/sql         ├─ Provider Keys   │
│ ├─ Local Cache Manager           ├─ Streaming       │
│ └─ Recovery Manager              └─ Usage Metering  │
└───────────────┬──────────────────────────┬──────────┘
                │                          │
                ▼                          ▼
       S3 Compatible Storage        LLM Providers
       在线持久数据与元数据          OpenAI/Anthropic/...

核心设计

  • S3 是在线持久层:本地磁盘仅作缓存与工作集;节点丢失本地数据后可仅凭 S3 恢复。
  • 单写实例:首期固定副本数为 1,所有写请求经同一进程的 Registry 路由,保证单库唯一 writer。
  • Turso/libSQL 驱动:通过标准 database/sql 使用,业务模型不直接依赖驱动包。
  • 项目隔离:每个 tenant/project 拥有独立 logical database 与 S3 对象前缀,认证、配额、审计按 project 划分。
  • LLM Gateway:复用 /litellm 多供应商客户端,服务端封装鉴权、配额、流式转发与用量计量。

快速开始

构建

go build -o simplebased ./cmd/simplebased

配置

复制 config.example.yamlconfig.yaml 并按环境调整。所有字段可由 SIMPLEBASE_ 前缀环境变量覆盖。生产凭据(S3 密钥、catalog token、server_secret)必须从环境变量或 IAM 角色注入,禁止写入配置文件。

运行

./simplebased

默认监听 :8080。健康检查:

  • GET /health/live — 进程存活
  • GET /health/ready — Catalog 可用 + S3 可达

Docker

docker build -t simplebased .
docker run -p 8080:8080 --env-file .env simplebased

API

所有业务路由位于 /v1/projects/:projectID/...,需 Authorization: Bearer 认证并按 project 上下文校验权限。

数据库管理

| 方法 | 路径 | 权限 | 说明 | | --- | --- | --- | --- | | POST | /v1/projects/:p/databases | database:admin | 创建 logical database | | GET | /v1/projects/:p/databases | database:read | 列出 project 下数据库 | | GET | /v1/projects/:p/databases/:id | database:read | 查询状态与容量 | | POST | /v1/projects/:p/databases/:id/open | database:admin | 预热数据库 | | POST | /v1/projects/:p/databases/:id/close | database:admin | 释放本地资源 | | POST | /v1/projects/:p/databases/:id/backups | database:admin | 创建独立恢复点 | | POST | /v1/projects/:p/databases/:id/restore | database:admin | 恢复为新库后受控切换 | | DELETE | /v1/projects/:p/databases/:id | database:admin | 软删除,异步清理 S3 |

SQL 执行

| 方法 | 路径 | 权限 | 说明 | | --- | --- | --- | --- | | POST | /v1/projects/:p/databases/:id/query | database:read | 参数化查询 | | POST | /v1/projects/:p/databases/:id/execute | database:write | 单条写语句 | | POST | /v1/projects/:p/databases/:id/batch | database:write | 批量事务 |

约束:参数化 SQL、强制 context deadline、最大返回行数、请求体大小与并发数限制。DDL/恢复/删除单独授权并写入审计日志。

LLM Gateway

| 方法 | 路径 | 权限 | 说明 | | --- | --- | --- | --- | | POST | /v1/projects/:p/llm/chat | database:read | 非流式 Chat | | POST | /v1/projects/:p/llm/stream | database:read | SSE 流式响应 | | GET | /v1/projects/:p/llm/providers | database:read | 列出允许的 provider/model |

配额与审计

| 方法 | 路径 | 权限 | 说明 | | --- | --- | --- | --- | | GET | /v1/projects/:p/quota | database:read | 当前配额使用 | | GET | /v1/projects/:p/audit | database:read | 操作审计记录 |

部署

详见 docs/deployment.md。关键约束:

  • 副本数固定为 1:滚动升级必须先停旧实例、再启新实例。
  • S3 bucket 私有:启用 TLS、SSE-KMS、最小权限 IAM、版本控制。
  • Catalog 独立库:与用户库使用不同前缀和权限。
  • LLM 密钥:来自 KMS 或加密配置,日志仅输出 provider/key ID 摘要。

迁移

从旧版本(LessDB/ha-sqlite)迁移到新链路的工作流详见 docs/migration-guide.md

文档

目录结构

cmd/simplebased/        服务入口
internal/api/           HTTP 路由、请求校验、错误协议、流式响应
internal/app/           依赖装配与生命周期
internal/auth/          API Key、项目身份、权限与上下文
internal/audit/         不可变审计事件与脱敏
internal/catalog/       元数据:tenant/project/database/LLM 配置/usage
internal/config/        配置加载
internal/database/      libsql 连接、事务、查询、错误映射
  ├─ registry/          进程内每库唯一 writer、引用计数、空闲卸载
  ├─ cache/             本地缓存目录、配额、LRU 淘汰
  ├─ turso/             DSN 构建与连接工厂
  ├─ sqlguard/          SQL 执行边界(超时、行数、批量)
  └─ serialize.go       行序列化
internal/deploy/        Preflight 检查(缓存可写、S3 可达、flock)
internal/jobs/          持久化异步任务(删除/备份/恢复/校验)
internal/llmgateway/    litellm 服务端封装、流式转发、用量计量
internal/objectstore/   S3 client、KeyBuilder、descriptor、health
internal/observability/ 日志、指标、健康检查
internal/usage/         配额检查与用量聚合
litellm/                多供应商 LLM 客户端(独立保留)

技术栈

  • Go 1.25+
  • Turso/libSQL(驱动名 libsql
  • S3 兼容存储(AWS SDK v2)
  • Echo v4 HTTP 框架
  • litellm v1.5.8(LLM 客户端)
  • Zap 结构化日志
  • Prometheus 指标
Chat with me