在设计SaaS系统的销售微服务与权限微服务的边界时,需要结合领域驱动设计(DDD)和微服务拆分原则,确保高内聚、低耦合。以下是结合微服务架构原则、多租户SaaS需求及权限管理场景的完整设计方案,整合了权限服务与销售服务的边界划分、订阅生命周期管理等核心模块。
一、整体架构设计
1、架构原则
- 服务自治性:每个微服务独立部署、独立数据库,遵循单一职责原则。
- 多租户支持:采用字段级隔离,通过tenant_id区分企业数据。
- 通信方式:REST API用于同步调用(如鉴权),RocketMQ用于异步事件(如订阅到期通知)。
2、服务划分
微服务 | 核心职责 |
---|---|
销售服务 | 产品套餐管理、订单处理、订阅生命周期(创建/续费/到期)、计费策略。 |
权限服务 | 功能权限管理(RBAC)、租户-功能有效期映射、鉴权(JWT/OAuth2.0) |
网关服务 | 统一入口、路由分发、请求限流 |
二、核心模块设计
1、订阅与权限联动机制
(1)订阅状态管理(销售服务)
- 订阅生命周期管理(到期、续费、失效),维护订阅表,记录企业购买的功能模块、有效期。
- 定时任务每日扫描到期订阅,触发订阅到期事件通知权限服务。
(2)权限状态同步(权限服务)
- 监听到期事件,消费RocketMQ事件,更新租户功能有效期映射表(租户ID、功能模块、到期时间)。
- 鉴权时双重校验(RBAC校验、订阅校验):检查用户角色是否关联功能、查询租户功能有效期,拦截过期请求。
2、多租户权限模型
(1)功能隔离
通过功能表的字段区分不同功能包,销售服务将功能包与企业订阅关联。
(2)数据隔离
所有表增加tenant_id字段。
3、关键接口定义
服务 | 接口示例 | 用途 |
---|---|---|
销售服务 | POST /api/sales/subscription | 创建订阅 |
权限服务 | POST /api/auth/check | 实时鉴权 |
网关服务 | 路由规则:
| 动态路由与负载均衡 |
三、数据流与事件驱动
1、创建订阅处理流程
(1)用户浏览产品版本及功能列表。
(2)创建订单,支付成功后创建订阅记录。
(3)支付成功,创建订阅记录。
(4)订阅生效,通知权限服务更新租户功能有效期表。
2、订阅到期处理流程
(1)订阅到期判断(销售微服务)。通过定时任务(如每天凌晨)扫描订阅表的订阅到期字段,标记到期企业。
(2)发布订阅状态事件(销售微服务)。当订阅到期/续费时,销售服务发送事件到消息队列。
(3)权限状态更新(权限微服务)。权限服务消费事件,更新数据库中的企业功能有效期表。
3、用户访问拦截流程
(1)用户请求通过网关路由至权限服务。
(2)权限服务解析JWT令牌获取tenant_id和user_id。
(3)查询RBAC权限表和租户有效期表。
(4)拦截逻辑:无权限或者功能已过期返回403。
四、安全与监控设计
1、安全策略
- API鉴权:网关统一验证JWT令牌,权限服务细粒度控制功能访问。
- 数据加密:敏感字段(如支付信息)采用AES加密存储。
- 防攻击:网关集成Sentinel防DDoS,SQL注入拦截基于MyBatis参数化查询。
2、可观测性
- 监控:Prometheus采集服务指标(如鉴权接口QPS),Grafana可视化仪表盘。
- 日志:ELK集中管理日志,通过tenant_id快速定位企业级问题。
通过销售服务管理订阅生命周期、权限服务执行动态鉴权,结合事件驱动与多租户隔离策略,实现了SaaS系统核心功能。