混合架构:兼具 Supabase 与 Spring Boot 两者之长
发布于 14 January 2026
现代建筑的虚假两难
在构建具有静态前端的现代应用时,我们常常会面临一个二元选择:
-
全力押注 Backend-as-a-Service 解决方案(Supabase、Firebase)—— 简单但受限
-
构建一个完整的后端(Spring Boot, Node.js) - 强大但复杂
这种选择是一个伪两难。混合架构提出了第三条道路:在每种技术最擅长的地方使用它。
建筑愿景
传统架构:单体式
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "传统架构" {
actor Utilisateur as user
component "前端" as frontend #LightBlue
component "单体后端" as backend #LightCoral {
[Authentification]
[CRUD]
[Logique Métier]
[Jobs]
[APIs Tierces]
}
database "数据库" as db #LightGray
user --> frontend
frontend --> backend : 所有请求
backend --> db
}
note right of backend
一切都经过后端
即使是简单操作
⚠️ 单一拥塞点
⚠️ 从一开始就很复杂
⚠️ 强耦合
end note
@enduml
在这种方法中,即使是最简单的操作(阅读文章、创建评论)也必须经过你的后端。你从第一天起就要承担复杂性的成本。
BaaS 架构:全部委托
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "纯 BaaS 架构" {
actor Utilisateur as user
component "前端" as frontend #LightBlue
cloud "Supabase / Firebase" as baas #LightGreen {
[Auth]
[Database]
[Storage]
[Edge Functions]
}
user --> frontend
frontend --> baas : 所有操作
}
note right of baas
快速开发
无需管理服务器
⚠️ 复杂逻辑受限
⚠️ 供应商锁定
⚠️ Edge Functions 受限
end note
@enduml
相反,把所有工作都交给 BaaS 起初很吸引人,但一旦业务逻辑变得复杂,很快就会显露出局限。
混合架构:职责分离
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
actor Utilisateur as user #LightBlue
package "前端层" {
component "静态站点 JBake" as frontend #SkyBlue
}
package "简单层(Supabase)" #LightGreen {
component "身份验证" as auth
component "CRUD 基础" as crud
component "文件存储" as storage
component "实时" as realtime
}
package "业务层(Spring Boot)" #Coral {
component "复杂逻辑" as logic
component "编排" as orchestration
component "定时任务" as jobs
component "集成" as integrations
}
database "PostgreSQL 共享" as db #LightGray
user --> frontend
frontend --> auth : OAuth2, JWT
frontend --> crud : 文章、个人资料
frontend --> storage : 图片、文件
frontend --> realtime : 通知
frontend --> logic : 计算、报告
frontend --> orchestration : 工作流
logic --> integrations : Stripe,APIs
orchestration --> db
jobs --> db
crud --> db
auth --> db
note bottom of db
**单一事实来源**
在 Supabase 与 Spring Boot 之间共享
end note
note right of auth
**最多 5 万用户免费**
只需点击几下即可完成配置
OAuth2 多提供商
end note
note right of logic
**仅在必要时启用**
Kotlin + 协程
复杂事务
end note
@enduml
混合架构根据操作的复杂性和性质清晰地划分了职责。
设计原则
原则1:简单起步,智能演进
@startuml
skinparam backgroundColor #FEFEFE
rectangle "**阶段 1:MVP**" #LightGreen {
component "JBake + Supabase" as mvp
note right
✓ 数日内完成开发
✓ 费用:0€
✓ 概念验证
end note
}
rectangle "**阶段 2:增长**" #LightYellow {
component "JBake + Supabase\n+ Spring Boot(可选)" as growth
note right
✓ 业务逻辑初现
✓ 首批定时任务
✓ 第三方集成
end note
}
rectangle "**阶段 3:规模化**" #LightCoral {
component "完整架构" as scale
note right
✓ 复杂编排
✓ 性能优化
✓ 分布式缓存
end note
}
mvp -down-> growth : 当复杂性\n足以证明其合理性时
growth -down-> scale : 连续优化
@enduml
如果你不需要,就不要构建 Spring Boot。从 Supabase 开始,当复杂度证明有必要时再加入 Spring Boot。
原则2:按操作性质分离
@startmindmap skinparam backgroundColor #FEFEFE * 操作\n应用的 left side ** 简易操作\n(Supabase) ***_ CRUD 标准 ****_ 阅读 ****_ 创建 ****_ 更新 ****_ 删除 ***_ 身份验证 ****_ 登录/Logout ****_ OAuth2 ****_ 会话管理 ***_ 存储 ****_ 上传文件 ****_ CDN 自动 ***_ 实时 ****_ WebSocket ****_ 通知 right side ** 复杂操作\n(Spring Boot) ***_ 业务逻辑 ****_ 复杂计算 ****_ 业务规则 ****高级验证 ***_ 编排 ****_ 多服务 ****_ 分布式事务 ****_ Saga 模式 ***_ 计划任务 ****_ 定期报告 ****_ 同步 ****_ 清洁 ***_ 集成 ****_ 付款 (Stripe) ****_ APIs 第三方 ****_ ML服务/AI @endmindmap
原则3:单一事实来源
@startuml
skinparam backgroundColor #FEFEFE
database "PostgreSQL" as db #LightGray {
package "模式:auth(Supabase)" #LightGreen {
[users]
[sessions]
[identities]
}
package "模式:public(共享)" #SkyBlue {
[articles]
[comments]
[profiles]
}
package "模式:business(Spring Boot)" #Coral {
[orders]
[payments]
[reports]
}
}
component "Supabase" as supabase #LightGreen
component "Spring Boot" as spring #Coral
supabase -down-> users : 管理
supabase -down-> sessions : 管理
supabase -down-> articles : 访问
supabase -down-> comments : 访问
supabase -down-> profiles : 访问
spring -down-> articles : 访问
spring -down-> profiles : 访问
spring -down-> orders : 管理
spring -down-> payments : 管理
spring -down-> reports : 管理
note right of db
**优势:**
• 无需复杂的同步
• 表之间可实现 JOINs
• 保证一致性
• 统一迁移
end note
@enduml
通过共享同一个 PostgreSQL 实例,Supabase 和 Spring Boot 无需复杂的同步即可处理相同的数据。
流编排
流程 1:集中式身份验证
@startuml skinparam backgroundColor #FEFEFE autonumber actor "用户" as user participant "JBake" as jbake participant "Supabase 认证" as auth participant "Spring Boot" as spring database "PostgreSQL" as db == Authentification == user -> jbake : Clique "登录" jbake -> auth : 重定向 OAuth2(Google/GitHub) auth -> user : 同意屏幕 user -> auth : 授权 auth -> auth : 生成 JWT auth -> jbake : 返回 JWT + Refresh Token jbake -> jbake : 存储令牌 (sessionStorage) == Accès aux Ressources == group Opération Simple (CRUD) user -> jbake : 创建一篇文章 jbake -> db : POST 与 JWT note right: Supabase 行级安全\n自动检查 JWT db -> jbake : 文章已创建 end group Opération Complexe (Métier) user -> jbake : 生成一份报告 jbake -> spring : POST /api/reports\n与 JWT spring -> spring : 验证 JWT Supabase spring -> spring : 提取 claims(user_id,角色) spring -> db : 复杂查询 spring -> jbake : 报告已生成 end note over auth, spring **JWT 是通用的** 由 Supabase 和 Spring Boot 验证 无 double 认证 end note @enduml
关键点:单一认证流程,单一 JWT,随处可用。
Flux 2:复杂业务流程的编排
@startuml skinparam backgroundColor #FEFEFE autonumber actor "客户端" as user participant "JBake" as jbake participant "Spring Boot" as spring participant "Supabase DB" as supadb participant "Stripe API" as stripe participant "库存服务" as inventory participant "电子邮件服务" as email database "PostgreSQL" as db user -> jbake : 下订单 jbake -> spring : POST /api/orders/create == Orchestration Spring Boot == spring -> db : BEGIN TRANSACTION par Vérifications Parallèles spring -> inventory : 检查库存 inventory -> spring : 库存正常 else spring -> db : 检查客户资料 db -> spring : 已验证客户 end spring -> stripe : 创建 Payment Intent stripe -> spring : 已创建 Intent (ID: pi_xxx) spring -> db : 创建 Order(状态:PENDING) db -> spring : 订单已创建 spring -> stripe : 确认付款 stripe -> spring : 付款已确认 spring -> db : 更新订单(状态:PAID) spring -> inventory : 减少库存 spring -> db : COMMIT TRANSACTION par Notifications Asynchrones spring -> email : 邮件确认 else spring -> supadb : 插入通知 note right: 实时通知\n通过 Supabase Realtime end spring -> jbake : 订单已确认 jbake -> user : 显示确认 note over spring **Spring Boot 职责:** • 事务 ACID • 多服务编排 • 出错时自动回滚 • 边界情况管理 end note @enduml
Spring Boot 带来了什么: 可靠编排涉及多个系统并具有事务保证的复杂流程。
流程 3:计划作业与同步
@startuml skinparam backgroundColor #FEFEFE participant "调度器\n(Spring Boot)" as scheduler participant "报表服务" as report participant "PostgreSQL" as db participant "外部 API" as api participant "邮件服务" as email participant "Supabase 存储" as storage == Job Quotidien : 2:00 == activate scheduler scheduler -> report : 触发报告生成 activate report report -> db : 获取最近24小时的数据 db -> report : 数据集 report -> report : 计算与聚合 report -> report : 生成 PDF report -> storage : 上传 PDF storage -> report : URL publique report -> email : 发送给管理员\n附带链接 PDF deactivate report == Job Hebdomadaire : 星期日 3:00 == scheduler -> report : 外部同步 activate report report -> api : 获取外部数据 api -> report : 新数据 report -> db : 更新表 report -> db : 清理过时数据 deactivate report == Job Mensuel : 本月1日 == scheduler -> report : 计费 activate report report -> db : 活跃客户列表 report -> report : 金额计算 report -> api : 发票生成 (Stripe) report -> email : 发送发票 deactivate report deactivate scheduler note right of scheduler **仅靠 Supabase 无法实现** Edge Functions 不适合 长时间和周期性任务 end note @enduml
Spring Boot 带来了什么: 可靠的计划任务,具备状态管理、自动重试和保证执行。
决策矩阵
何时使用 Supabase?
@startuml
skinparam backgroundColor #FEFEFE
start
:待实现的新功能;
if (CRUD simple ?) then (oui)
:✅ **Supabase**;
stop
else (non)
if (Authentification ?) then (oui)
:✅ **Supabase 认证**;
stop
else (non)
if (Upload fichiers ?) then (oui)
:✅ **Supabase 存储**;
stop
else (non)
if (Temps réel ?) then (oui)
:✅ **Supabase 实时**;
stop
else (non)
if (Row Level Security\nsuffisante ?) then (oui)
:✅ **Supabase + 政策**;
stop
else (non)
:⚠️ **考虑 Spring Boot**;
#Coral:Passer à l'arbre\nde décision Spring Boot;
stop
endif
endif
endif
endif
endif
@enduml
何时使用 Spring Boot?
@startuml
skinparam backgroundColor #FEFEFE
start
:新的复杂功能;
if (Orchestration\nmulti-services ?) then (oui)
:✅ **Spring Boot**;
stop
else (non)
if (Transaction ACID\ncritique ?) then (oui)
:✅ **Spring Boot**;
stop
else (non)
if (Job planifié ?) then (oui)
:✅ **Spring Boot 调度器**;
stop
else (non)
if (Intégration API\ntierce complexe ?) then (oui)
:✅ **Spring Boot**;
stop
else (non)
if (Calculs lourds\n> 10 secondes ?) then (oui)
:✅ **Spring Boot**;
stop
else (non)
if (Cache distribué\nnécessaire ?) then (oui)
:✅ **Spring Boot + Redis**;
stop
else (non)
:⚠️ **可能是 Supabase**;
#LightGreen:Revenir à l'arbre\nde décision Supabase;
stop
endif
endif
endif
endif
endif
endif
@enduml
按项目类型划分的架构示例
博客 / 作品集
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "个人博客 - 95% Supabase" {
component "JBake" as jbake #SkyBlue
package "Supabase(免费)" #LightGreen {
[Auth: OAuth2 Google]
[Articles (CRUD)]
[Commentaires]
[Images (Storage)]
[Notifications Realtime]
}
package "Spring Boot(可选)" #LightCoral {
[Newsletter Mensuelle]
note bottom: 仅限计划任务
}
database "PostgreSQL" as db
jbake --> [Auth: OAuth2 Google]
jbake --> [Articles (CRUD)]
jbake --> [Commentaires]
jbake --> [Images (Storage)]
jbake --> [Notifications Realtime]
[Articles (CRUD)] --> db
[Commentaires] --> db
[Newsletter Mensuelle] --> db
}
note bottom of "Spring Boot(可选)"
**Spring Boot 并非必需**
Newsletter 可由第三方服务(Mailchimp)管理
end note
@enduml
裁决:100% Supabase 完全足够了。
SaaS 应用
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "应用程序 SaaS - 混合架构" {
component "JBake / React" as frontend #SkyBlue
package "Supabase" #LightGreen {
[Auth Multi-tenant]
[Profils Utilisateurs]
[Données Simples]
[Storage Documents]
}
package "Spring Boot" #Coral {
[Facturation (Stripe)]
[Analytics Avancées]
[Rapports Mensuels]
[Quotas & Limites]
[Webhooks Stripe]
}
cloud "外部服务" {
[Stripe API]
[SendGrid Email]
}
database "PostgreSQL 共享" as db
frontend --> [Auth Multi-tenant]
frontend --> [Profils Utilisateurs]
frontend --> [Données Simples]
frontend --> [Facturation (Stripe)]
frontend --> [Analytics Avancées]
[Auth Multi-tenant] --> db
[Profils Utilisateurs] --> db
[Données Simples] --> db
[Facturation (Stripe)] --> db
[Facturation (Stripe)] --> [Stripe API]
[Analytics Avancées] --> db
[Rapports Mensuels] --> db
[Rapports Mensuels] --> [SendGrid Email]
[Webhooks Stripe] ..> [Stripe API] : Écoute
}
note right of "Spring Boot"
**需要用于:**
• 订阅管理
• 定期计费
• 动态配额
• 复杂分析
• 可靠的 Webhook
end note
@enduml
裁决:需要混合架构。Supabase 用于主要部分,Spring Boot 用于关键部分(支付、计费)。
电子商务
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "电子商务 - 70% Spring Boot" {
component "店铺前端 (JBake/React)" as frontend #SkyBlue
package "Supabase" #LightGreen {
[Auth Clients]
[Catalogue Produits\n(lecture seule)]
[Images Produits]
}
package "Spring Boot (核心业务)" #Coral {
[Gestion Commandes]
[Paiements Stripe]
[Gestion Stock]
[Calcul Frais Port]
[Génération Factures]
[Synchronisation ERP]
[Emails Transactionnels]
}
cloud "集成" {
[Stripe]
[Transporteur API]
[ERP Externe]
}
database "PostgreSQL" as db
frontend --> [Auth Clients]
frontend --> [Catalogue Produits\n(lecture seule)]
frontend --> [Gestion Commandes]
[Auth Clients] --> db
[Catalogue Produits\n(lecture seule)] --> db
[Gestion Commandes] --> db
[Paiements Stripe] --> [Stripe]
[Gestion Stock] --> db
[Calcul Frais Port] --> [Transporteur API]
[Génération Factures] --> db
[Synchronisation ERP] --> [ERP Externe]
[Synchronisation ERP] --> db
}
note right of "Spring Boot (核心业务)"
**Spring Boot 不可或缺:**
• 关键事务
• 复杂编排
• 多重集成
• 法律合规
• 同步作业
end note
@enduml
裁决:Spring Boot 不可或缺。Supabase 仅用于认证和目录。
渐进式迁移策略
@startuml skinparam backgroundColor #FEFEFE |Semaine 1-2| start :创建项目 Supabase; :配置 Auth(Google,GitHub); :定义初始 PostgreSQL 模式; :在JBake上实现基础的CRUD; :将 MVP 部署到 GitHub Pages; note right **交付物:** 可正常运行的应用程序 **成本:** 0€ **时间:** 1-2周 end note |Semaine 3-4| :观察实际使用情况; :识别限制; |Décision| if (Logique complexe\némerge ?) then (non) |Supabase| :仅使用 Supabase 继续; :如有需要,添加 Edge Functions; stop else (oui) |Spring Boot| :创建 Spring Boot 项目; :配置验证 JWT Supabase; :将复杂逻辑迁移到 Spring Boot; note right **选择性迁移** 仅限复杂部分 end note endif |Semaines suivantes| :部署 Spring Boot(Cloud Run,EC2); :连接到 PostgreSQL Supabase; :实现首批计划任务; :集成 APIs 第三方; stop note right **最终混合架构** Supabase + Spring Boot 完美和谐 end note @enduml
成本与运营考量
成本结构
@startuml
skinparam backgroundColor #FEFEFE
package "预估月度成本" {
rectangle "阶段 MVP\n(0-1000 users)" #LightGreen {
[JBake (GitHub Pages): 0€]
[Supabase: 0€]
[Spring Boot: N/A]
note bottom: **总计:0€/mois**
}
rectangle "增长阶段\n(1k-10k users)" #LightYellow {
[JBake (GitHub Pages): 0€]
[Supabase: 0€]
[Spring Boot (Cloud Run): 20-50€]
[PostgreSQL (si séparé): 0-30€]
note bottom: **总计:20-80€/mois**
}
rectangle "规模化阶段\n(10k-100k users)" #LightCoral {
[JBake (Netlify Pro): 19€]
[Supabase Pro: 25€]
[Spring Boot (instances multiples): 100-300€]
[Redis Cache: 20-50€]
[Monitoring: 20€]
note bottom: **总计:184-414€/mois**
}
}
note right of "规模化阶段\n(10k-100k users)"
在这一阶段,收入足以充分证明成本是合理的
end note
@enduml
运营职责
@startuml
skinparam backgroundColor #FEFEFE
package "谁管理什么?" {
rectangle "由 Supabase 管理(0 投入)" #LightGreen {
[Authentification]
[Base de données]
[Backups automatiques]
[Scaling automatique]
[Monitoring DB]
[Sécurité DB]
}
rectangle "由 GitHub 管理(0 投入)" #SkyBlue {
[Hébergement site statique]
[HTTPS/SSL]
[CDN global]
[Déploiement automatique]
}
rectangle "待管理(Spring Boot)" #LightCoral {
[Déploiement application]
[Monitoring APM]
[Logs centralisés]
[Scaling horizontal]
[Mises à jour sécurité]
}
}
note bottom of "待管理(Spring Boot)"
**可通过以下方式最小化:**
• Cloud Run(无服务器)
• Kubernetes(如有必要)
• 托管服务(RDS 等)
end note
@enduml
结论:完美平衡
Supabase + Spring Boot 的混合架构不是一种妥协,而是一种协同效应。
应牢记的原则
@startmindmap skinparam backgroundColor #FEFEFE * 架构\n混合 ** 从简单开始 ***_ MVP 与 Supabase ***_ 0欧元的初始成本 ***_ 快速验证 ** 智能进化 ***_ 添加 Spring Boot\n如果需要 ***_ 渐进式迁移 ***不进行整体改造 ** 利用优势 ***_ Supabase: 简洁 ***_ Spring Boot: 强大 ***_ PostgreSQL: 唯一来源 ** 最小化复杂度 ***_ 无同步 ***_ 不重复 ***_ 清晰的架构 ** 优化成本 ***起初免费 ***_ 渐进式缩放 ***_ ROI 显而易见 @endmindmap
何时选择这种架构?
✅ 这种架构非常适合以下情况:
-
您想快速启动(MVP 几天即可完成,而不是几个月)
-
您预见到业务复杂性的增长
-
您希望最大限度地降低初始成本
-
您喜欢 PostgreSQL,并希望拥有单一事实来源
-
您欣赏 Kotlin 和协程在业务代码中的应用
-
您希望避免完全的vendor lock-in
❌ 此架构不适用于以下情况:
-
你的项目很简单,而且会一直如此(个人博客 → 100% Supabase 就够了)
-
您已经拥有一个成熟且您熟练掌握的后端技术栈
-
您更喜欢传统的单体架构
-
您需要 .NET、Python 或其他后端语言
最终概览
@startuml
skinparam backgroundColor #FEFEFE
package "完整混合架构" {
actor "用户" as users
rectangle "前端(静态)" #SkyBlue {
[JBake / GitHub Pages]
note right: 免费,全球 CDN
}
rectangle "简单后端(Supabase)" #LightGreen {
[Auth OAuth2]
[CRUD APIs]
[Storage]
[Realtime]
note right
最多 50k 用户免费
零服务器配置
end note
}
rectangle "业务后端(Spring Boot)" #Coral {
[Orchestration]
[Jobs Planifiés]
[Intégrations]
[Transactions]
note right
仅在必要时启用
end note
}
database "PostgreSQL\nSource 唯一事实来源" as db #LightGray
users --> [JBake / GitHub Pages]
[JBake / GitHub Pages] --> [Auth OAuth2]
[JBake / GitHub Pages] --> [CRUD APIs]
[JBake / GitHub Pages] --> [Storage]
[JBake / GitHub Pages] --> [Realtime]
[JBake / GitHub Pages] --> [Orchestration]
[Auth OAuth2] --> db
[CRUD APIs] --> db
[Orchestration] --> db
[Jobs Planifiés] --> db
[Intégrations] --> db
}
note bottom of db
**单一基础,两个消费者**
• Supabase 用于简单场景
• Spring Boot 用于复杂场景
• 无需同步
end note
@enduml
两个世界的最佳
这种架构为您提供:
🚀 Supabase 的速度
-
数小时内即可启动,而非数周
-
几步即可完成 OAuth2 认证
-
自动生成的 REST API
-
零服务器配置
💪 Spring Boot 的强大力量
-
Kotlin 与协程打造优雅的异步代码
-
复杂业务流程的编排
-
可靠的计划任务
-
ACID 事务保证
-
完整的 Spring 生态系统
💰 进步经济
-
0€ 即可开始并验证
-
跟随增长的成本
-
不要过早过度工程化
🎯 架构灵活性
-
渐进式迁移,无需重构
-
仅在必要时添加 Spring Boot
-
无完全的供应商锁定
-
可扩展架构
进一步探索
技术资源
Supabase 文档:
Spring Boot 文档:
补充条款:
-
使用JWT保护API
-
PostgreSQL 性能优化
-
渐进式迁移模式
-
分布式架构中的错误处理
真实用例
这种混合架构已成功应用于:
-
SaaS B2B:Supabase 身份验证,Spring Boot 计费
-
市场:Supabase 目录,Spring Boot 事务
-
内容平台:Supabase 文章,Spring Boot 分析
-
内部工具:Supabase CRUD、Spring Boot 工作流
启动清单
第一阶段——基础(第1周)
-
创建 Supabase 账户 - [ ] 配置 PostgreSQL 项目 - [ ] 启用 Auth(Google、GitHub) - [ ] 定义初始架构 - [ ] 配置行级安全 - [ ] 从 JBake 测试 API
阶段2 - MVP(第2-3周)
-
实现主要页面 - [ ] 集成 OAuth2 认证 - [ ] 创建 CRUD 表单 - [ ] 为文件配置 Storage - [ ] 部署到 GitHub Pages - [ ] 在真实条件下测试
阶段3 - 演进(根据需求)
-
识别复杂逻辑需求 - [ ] 如有必要,创建 Spring Boot 项目 - [ ] 配置 Supabase JWT 验证 - [ ] 连接到 PostgreSQL Supabase - [ ] 迁移复杂功能 - [ ] 实现计划任务 - [ ] 部署 Spring Boot(Cloud Run 等)
应避免的反模式
❌ 不要做:
-
在 Supabase 和 Spring Boot 之间复制数据
-
创建两个独立的 PostgreSQL 数据库
-
自行编写身份验证
-
使用 Spring Boot 进行简单的 CRUD
-
从一开始就过度架构
-
忽略 Supabase 的行级安全
✅ 而应改为:
-
共享单个 PostgreSQL 数据库
-
让 Supabase 处理身份验证
-
仅将 Spring Boot 用于复杂性
-
从简单开始,逐步演进
-
发挥每种技术的优势
-
使用 RLS 在数据库层面保障安全
发展前景
添加新功能
@startuml
skinparam backgroundColor #FEFEFE
rectangle "当前架构" #SkyBlue {
[JBake]
[Supabase]
[Spring Boot]
}
rectangle "可能的演进" #LightYellow {
package "性能" {
[Redis Cache]
[CDN pour Assets]
[PostgreSQL Replicas]
}
package "监控" {
[Grafana]
[Prometheus]
[Sentry]
}
package "CI/CD" {
[GitHub Actions]
[Tests Automatisés]
[Déploiement Continu]
}
package "功能" {
[Search (ElasticSearch)]
[Queue (RabbitMQ)]
[Event Sourcing]
}
}
[Spring Boot] .down.> [Redis Cache] : Peut ajouter
[Spring Boot] .down.> [Queue (RabbitMQ)] : Peut ajouter
[Spring Boot] .down.> [Search (ElasticSearch)] : Peut ajouter
[Supabase] .down.> [PostgreSQL Replicas] : Peut ajouter
note bottom
**可扩展架构**
每次新增都是独立的
无需全局重构
end note
@enduml
横向扩展
随着您的应用增长,混合架构会自然扩展:
Supabase:
-
自动扩展至数百万次操作
-
用于读取性能的只读副本
-
用于安全的时间点恢复
Spring Boot:
-
负载均衡器后面的多个实例
-
无状态设计便于横向扩展
-
如有需要,使用 Kubernetes 进行编排
PostgreSQL:
-
大型表分区
-
连接池(PgBouncer)
-
只有在确实必要时才进行分片(罕见)
建筑见证
SaaS初创公司(5万用户)
__ 我们一开始 100% 使用 Supabase。到 5000 名用户时,我们仅为了 Stripe 计费和月度报表而加入了 Spring Boot。一年后,我们 80% 的操作仍然通过 Supabase 进行。Spring Boot 只处理关键部分。这种分离让我们无需重构就能扩展。 Please provide the French text you’d like me to translate.
在线学习平台(1万用户)
__ Supabase 的 OAuth2 身份验证让我们节省了 3 周的开发时间。自动生成的 API 管理着我们整个课程目录。Spring Boot 仅用于 PDF 证书和进度邮件。架构简单、可维护、可扩展。 No source text was provided to translate.
B2B市场(3k用户)
No French text was provided to translate. Please send the source text. Spring Boot 负责处理买家和卖家之间的交易(关键)。Supabase 负责其余所有部分:个人资料、实时消息、文档。它们共享同一个 PostgreSQL 数据库,这让我们避免了任何复杂的同步。这是我们做过的最佳架构选择。 __
总结:现代建筑范式
Supabase + Spring Boot 的混合架构代表了一种新范式:建筑专业化.
@startuml
skinparam backgroundColor #FEFEFE
rectangle "旧范式" #LightCoral {
card "一切都在后端" {
[Auth]
[CRUD]
[Logique Métier]
[Jobs]
[Storage]
[Realtime]
}
note bottom
最大复杂度
从第一天起
end note
}
rectangle "新范式" #LightGreen {
card "Supabase\n(Commodité)" {
[Auth]
[CRUD Simple]
[Storage]
[Realtime]
}
card "Spring Boot\n(Différenciation)" {
[Logique Métier]
[Jobs]
[Intégrations]
}
note bottom
渐进式复杂性
仅在必要时添加
end note
}
[Ancien Paradigme] -right-> [Nouveau Paradigme] : Évolution
@enduml
基本原则:不要构建已经以服务形式存在的东西。专注于让你的应用与众不同的地方。
80/20法则
在大多数应用中:
-
80% 的操作是标准 CRUD → Supabase
-
20%的操作需要业务逻辑 → Spring Boot
这一自然法则证明了混合架构的合理性。
@startuml
skinparam backgroundColor #FEFEFE
package "操作分布" {
rectangle "80% - 标准操作" #LightGreen {
[Lecture de données]
[Création d'entités]
[Mise à jour simple]
[Suppression]
[Upload fichiers]
[Authentification]
note bottom: **由 Supabase 管理**
}
rectangle "20% - 业务逻辑" #Coral {
[Calculs complexes]
[Workflows multi-étapes]
[Transactions critiques]
[Intégrations tierces]
[Jobs planifiés]
note bottom: **由 Spring Boot 管理**
}
}
note right
**最佳聚焦:**
将您的开发时间
集中于使您的产品
脱颖而出的那20%
end note
@enduml
最终结论
混合架构并非技术上的妥协,而是一种战略决策。
它让您能够:
-
✅ 使用可用的 MVP 快速启动
-
✅ 无需大量投资即可验证您的市场
-
✅ 当复杂性需要时逐步演进
-
✅ 在每个阶段掌控您的成本
-
✅ 发挥每种技术的最大优势
-
✅ 避免过早的过度工程
-
✅ 为未来保留灵活性
它代表:
-
🎯实用主义:她所擅长的每一项技术
-
🚀速度:最短上市时间
-
💰经济:成本与价值保持一致
-
🔮可扩展性:随您成长的架构
-
🛡️鲁棒性:经验证且可靠的服务
您的下一步
如果这种架构与您产生共鸣,可以从这里开始:
-
创建 Supabase 账户(免费)
-
定义您的最小数据模式
-
配置 OAuth2 认证
-
创建你的第一个使用该 API 的 JBake 页面
-
部署到 GitHub Pages
您将拥有一个可用的MVP,在几天.
Spring Boot 会在你需要的时候自然而然地到来。不会更早。
混合架构,就是恰好在需要的时候,构建出恰好所需之物的艺术。
开发顺利!🚀
如果您认为这篇文章能帮助其他开发者做出正确的架构选择,请分享它。
相关文章
31 May 2026
14 May 2026
12 May 2026