解决方案
按租户隔离的数据库
客户之间不能共用数据表时,给每个租户一个自己的 Relyt One 项目。每个项目都是一个独立的 PostgreSQL 数据库,有自己的存储、计算实例和凭据,你的后端调用一次 API 就能创建。
怎么做
01
租户注册时创建项目
后端带上 API 密钥调用 Open API,传入区域,以及该租户数据库所有者角色的密码。项目创建后自带一个主分支和一个主计算实例。
curl -X POST "https://relyt.one/api/v1/projects" \ -H "Authorization: Bearer $RELYT_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"name\":\"tenant-$TENANT_ID\",\"orgId\":\"$ORG_ID\",\"region\":\"$REGION_ID\",\"password\":\"$TENANT_DB_PASSWORD\"}"02
保存租户的连接信息
轮询项目的计算实例列表,直到状态变成 READY,再把 host 和租户记录存在一起。执行你的表结构迁移,然后用任何标准的 PostgreSQL 驱动连接。
curl "https://relyt.one/api/v1/projects/$PROJECT_ID/computes" \ -H "Authorization: Bearer $RELYT_API_KEY"03
租户离开时删除项目
删除项目会删除它的计算实例,并把项目及其分支标记为已删除。
curl -X DELETE "https://relyt.one/api/v1/projects/$PROJECT_ID" \ -H "Authorization: Bearer $RELYT_API_KEY"
现在就能用的能力
租户之间什么都不共享
每个租户都有自己的数据库、角色、密码和连接字符串。一个租户数据库里的慢查询、锁或出错的迁移,只影响这个数据库。
计算实例随租户而动
每个项目都跑在自己的计算实例上,规格以 CU 计(1 CU = 1 vCPU + 4 GB RAM)。租户不活跃时,它的计算实例可以挂起,下次连接时恢复。
给单个租户开分支
每个租户项目都支持分支,所以可以先在某个租户数据的写时复制分叉上试跑迁移,再正式执行。
全程自动化
用 REST Open API 创建、查看、删除项目。第一次创建请求还在执行时重复发送,会返回 202,而不会多建一个项目。
须知
- 免费版套餐最多 5 个项目,所以目前「每个租户一个项目」适合租户数量不多的场景。创建的项目超过套餐上限时返回 403。
- Relyt One 不负责把请求路由到租户:租户和连接信息的对应关系由你的应用自己保存。