当前位置: 首页 > article >正文

SaaS系统的销售微服务与权限微服务边界设计

       在设计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实时鉴权
网关服务

路由规则:/api/sales/** → 销售服务,

      /api/auth/** → 权限服务

动态路由与负载均衡

 ​三、数据流与事件驱动

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系统核心功能。


http://www.kler.cn/a/594890.html

相关文章:

  • 进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)
  • 用电子表格语言”写软件”——FILTER函数学习与超级实践
  • 晶鑫股份迈向敏捷BI之路,永洪科技助力启程
  • 【华为OD-E卷 -122 字符统计及重排 100分(python、java、c++、js、c)】
  • STM32/GD32中时钟的作用
  • 使用LLM自动化生成微电网Simulink模型
  • Oracle 19C reverse反向索引测试
  • 【AIGC前沿】MiniMax海螺AI视频——图片/文本生成高质量视频
  • SQLark 实战 | 如何通过对象名和 DDL 快速搜索数据库对象
  • 任务分配器做负载均衡方案对比和选择
  • webrtc3A算法
  • Chapter 4-15. Troubleshooting Congestion in Fibre Channel Fabrics
  • C++程序从windows移植到linux后cmake脚本CMakeLists.txt的修改
  • 论数据结构
  • Docker简易使用说明
  • Ubuntu24搭建k8s高可用集群
  • 分布式任务调度
  • 【MySQL速成指南】数据库定义语言(DDL)详解:从建库到改表!
  • c++简单实现redis
  • 华为参访预约,团队考察体验黑科技之旅