面向企业 DBA 的 SkillFlaw 数据库指南
SkillFlaw 数据库存储了支撑 SkillFlaw 运行所必需的数据,包括启动、流程执行、用户交互以及管理操作。 数据库同时支撑前端(可视化编辑器)与后端(API)能力,因此其可用性对 SkillFlaw 的稳定性与功能完整性至关重要。 关于数据库 schema 详情,请参阅 内存管理选项。
本指南面向企业数据库管理员(DBA)与生产环境运维人员,解释如何为 SkillFlaw 配置 PostgreSQL,包括高可用(HA)与 Active-Active 形态,以及监控、维护与安全方面的最佳实践。
使用 PostgreSQL 配置 SkillFlaw
PostgreSQL 是 SkillFlaw 官方支持的应用数据库,也是推荐的生产选择,原因在于它具备较好的可扩展性、性能与稳定性。
以下步骤说明如何为单实例或多实例部署配置 PostgreSQL。 更多背景请参阅 配置外部 PostgreSQL 数据库。
-
准备 PostgreSQL:
- 部署 PostgreSQL 实例(建议版本 12 及以上),可运行在本地服务器、Kubernetes 或托管云服务上。
- 为 SkillFlaw 创建数据库。
- 为 SkillFlaw 创建具备最小必要权限的 PostgreSQL 用户,用于管理并写入数据库,例如在 SkillFlaw 所用表上具备 CREATE、SELECT、INSERT、UPDATE、DELETE 权限。
-
获取连接串,格式为
postgresql://user:password@host:port/dbname,例如postgresql://skillflaw:securepassword@postgres:5432/skillflaw。如果你使用高可用 部署,应使用虚拟 IP 或代理主机名,而不是直接数据库主机。 详见下文 PostgreSQL 高可用。
-
通过
.env文件或部署平台的环境变量管理能力配置 SkillFlaw。-
在 SkillFlaw 部署目录中创建
.env文件:_10touch .env -
把连接串写入
.env:_10SKILLFLAW_DATABASE_URL="postgresql://skillflaw:securepassword@postgres:5432/skillflaw"更多变量说明请参阅 环境变量。
-
-
使用 PostgreSQL 连接启动 SkillFlaw:
_10uv run skillflaw run --env-file .env -
可选:执行迁移。
SkillFlaw 使用迁移机制维护数据库 schema。 当 SkillFlaw 首次连接到 PostgreSQL 时,会自动运行迁移并创建所需表结构。
直接手改 schema 可能会与 SkillFlaw 内建的 schema 管理冲突。 如果你需要更新 schema,可以使用 SkillFlaw CLI 手动执行迁移:
-
先运行
skillflaw migration预览变更。 -
审核变更,确认迁移是安全的。
-
运行
skillflaw migration --fix正式执行迁移。这是一个可能删除数据的破坏性操作。 更多说明请参阅
skillflaw migration。
-
-
为了验证配置,可以在可视化编辑器或 API 中随便创建一个流程,然后检查数据库中是否已记录相应表与活动。 流程内容本身不重要,重点是确认数据确实落到了 PostgreSQL 中。
例如可执行:
_10SELECT * FROM pg_stat_activity WHERE datname = 'skillflaw';
PostgreSQL 高可用
为了进一步提升性能、可靠性与可扩展性,建议在生产环境中采用高可用(HA)或 Active-Active HA PostgreSQL 架构。 当多个 SkillFlaw 实例依赖同一个数据库时,这一点尤其重要,因为它可以降低停机风险,并在数据库节点故障时维持服务连续性。
- High Availability (HA)
- Active-Active HA
-
配置流复制:
-
配置一个主库负责写入。
-
配置一个或多个副本用于读取与故障切换。
根据你的延迟与一致性要求,在同步复制与异步复制之间做选择。
-
-
通过以下任一方案实现自动故障切换:
-
将 PostgreSQL 连接串更新为指向 HA 入口。 如果你采用多实例 SkillFlaw 部署,请确保所有实例连接到同一个 HA PostgreSQL。
连接串形式取决于你的 HA 方案:
- 使用一个总是指向当前主库的虚拟 IP 或 DNS 名,例如
postgresql://skillflaw:securepassword@db-proxy:5432/skillflaw?sslmode=require。 - 使用托管服务提供的官方 endpoint,例如
skillflaw.cluster-xyz.us-east-1.rds.amazonaws.com。
- 使用一个总是指向当前主库的虚拟 IP 或 DNS 名,例如
-
可选:为读密集型场景增加读负载均衡:
- 使用如 PgBouncer 之类的连接池,把读请求分发给多个副本。
- 让 SkillFlaw 仍通过一个统一连接串连接到主 PostgreSQL 或代理入口。
若要实现 Active-Active HA,你必须部署多个 SkillFlaw 实例,并通过负载均衡把请求分发到这些实例,同时确保所有实例都连接同一个 HA PostgreSQL:
-
使用 Kubernetes 或其他编排平台部署多个 SkillFlaw 实例。
所有实例都必须配置为使用共享 PostgreSQL。 更多说明请参阅 SkillFlaw 在 Kubernetes 上的最佳实践。
-
配置流复制:
-
配置一个主库负责写。
-
配置一个或多个副本用于读与故障切换。
根据你的延迟与一致性要求,在同步复制与异步复制之间选择。
-
-
使用以下任一方案实现自动故障切换:
-
更新 PostgreSQL 连接串,让其指向 HA 入口。 确保所有 SkillFlaw 实例连接的都是同一个 HA PostgreSQL。
连接串形 式同样取决于你的 HA 方案:
- 可使用一个总是指向当前主库的虚拟 IP 或 DNS 名,例如
postgresql://skillflaw:securepassword@db-proxy:5432/skillflaw?sslmode=require。 - 或使用托管服务提供的标准 endpoint。
- 可使用一个总是指向当前主库的虚拟 IP 或 DNS 名,例如
-
使用负载均衡器把请求分发给多个 SkillFlaw 实例。
以下片段展示了一个生产示例:3 个 skillflaw-runtime 副本、一个 Kubernetes LoadBalancer 服务,以及指向 HA PostgreSQL 的连接串。
_10replicas: 3_10_10env:_10 - name: SKILLFLAW_DATABASE_URL_10 value: "postgresql://skillflaw:securepassword@db-proxy:5432/skillflaw?sslmode=require"_10_10service:_10 type: LoadBalancer_10 port: 80_10 targetPort: 7860
在完成 HA 或 Active-Active HA 之后,请持续监控故障切换事件,并确认副本是否保持同步。
如果设置了 SKILLFLAW_DATABASE_CONNECTION_RETRY=True,SkillFlaw 会借助 SQLAlchemy 在数据库恢复后尝试重新连接,从而减轻故障切换造成的中断。
虽然 PostgreSQL 对并发连接支持较好,但你仍需要监控高负载下的锁竞争、死锁以及性能退化情况。
数据库故障的影响
如果 PostgreSQL 不可用,以下 SkillFlaw 功能会失败:
- 流程读取:无法从数据库加载新流程或已有流程。
- 流程保存:无法保存新流程,也无法更新已有流程。
- 用户认证:登录与用户管理功能失效。
- 项目集合访问:无法访问或共享社区 / 自定义项目集合。
- 配置读取:无法读取应用设置。
- 配置更新:无法保存设置变更。
- 执行日志访问:无法获取历史执行日志。
- 日志写入:新的执行日志或系统日志无法落库。
- 多用户协作:用户之间无法共享流程或项目。
- API 流程加载:涉及加载新流程(未命中缓存)的 API 请求会失败。
那些已经加载到内存中的流程,有时仍可继续运行,只要依赖缓存配置即可。 但一切需要数据库访问的操作都会失败,直到数据库恢复。 例如,一个缓存中的流程可能还能执行,但无法再把日志或消息历史写入数据库。
为了尽量降低数据库故障的概率与影响,建议采用 HA 配置,并定期做备份。
例如,可以通过 pg_dump 做逻辑备份,或者启用 WAL 持续归档,以支持时间点恢复。
同时应定期演练恢复流程,确保团队在灾备场景中知道如何真正执行恢复。
数据库监控
请持续监控 PostgreSQL,以保障性能与可靠性:
- 可使用 pgAdmin、Prometheus + PostgreSQL exporter,或云平台自带的 PostgreSQL 监控工具。
- 跟踪 CPU、内存与磁盘 I/O 等性能指标。
- 监控副本健康状态、可用性、延迟与同步情况。
例如,可使用
pg_stat_activity监控连接数与竞争情况。 - 针对高延迟、故障切换与复制问题设置告警。
- 启用 PostgreSQL 日志(如
log_connections、log_statements)以追踪访问与变更。