“在代码的世界里,每一行都是进步的足迹,每一次挑战都是成长的机遇。”

saas系统部署方案

Sass系统单独服务部署+单独数据库方案
1.首先单独的数据库实例这种sass 即每个租户的数据库单独的数据隔离,在部署的时候将服务名字以:服务名:租户号:端口的方式进行注册到eureka注册中心。
2.在网关gateway层中拦截/路径参数或者header头的信息,这个信息解密成租户号的信息,接着在网关中拉取所有的注册服务,筛选出格式为“租户号”的的所有微服务,将微服务存在一个redis用hashmap的数据结构以便下次直接根据租户号调取微服务列表。
3.再根据服务名加载出自己请求的服务端微服务列表,若该service的列表为2个及以上可用服务则使用负载均衡的转发,若只是单节点者直接转发。
4.在redis中再维护一个hashmap,这个key为租户,里面的元素为每个service的list,service list 分别有几个个参数,比如权重、是否下线,1小时调用次数。
5.若发现负载均衡中某个service下的服务异常过多进行降级的处理,若是请求过多使用k8s对service横向扩容,若非请求过多将更多的请求打在权重高的服务上。
6.定时获取注册中心的服务列表,对redis中的service进行剔除或者故障恢复,在降级的服务中统计错误请求的错误率,动态调整权重,一直平滑过度到轮训状态的权重,在网关和注册中心最重要的地方均使用集群的方式部署 保障最重要的注册中心和网关高可用。
7.单独服务单独数据库,使用py/shell编程 传入建库变量,导入预定的建库建表脚本,动态修改spring.yml的配置文件自定义变量比如租户ID,数据库连接地址等。
Sass系统共享服务+单独数据库数据源切换方案
1.这种方案比较简单,项目启动加载关系型数据库的数据源或者定时拉取数据源到本地map上或者redis上。
2.在用户登录成功后,设置session 搞个自定义的注解比如@bds(#code ID)根据spl表示式会根据session的值实现数据源切换,
3.在拦截器中每次将租户的ID设置到Thread Local,取出租户的ID根据ID切换数据源。
4.缺点是无法实现一些定制化。

Write your comment Here