• 电商系统 多租户的设计


    原文:https://www.cnblogs.com/itsharehome/p/8120500.html
    原文:https://www.cnblogs.com/codemind/p/saas_architecture_tip.html
    原文:https://www.cnblogs.com/codemind/p/13081336.html
    https://www.cnblogs.com/lori/p/9346548.html
    https://blog.csdn.net/cnpinpai/article/details/91967335

    一些细化的设计

    一些通用的模块

    • 用户管理
    • 角色管理
    • 菜单管理
    • 应用管理
    • Token管理

    应用管理

    应用标识
    应用名称
    回调地址
    oauth授权方式
    自动审批
    令牌时效(s)
    刷新时效(s)

    Token管理

    token
    到期时间
    用户名
    授权类型
    所属应用

    saas设计

    https://www.cnblogs.com/itsharehome/p/8120500.html
    https://www.cnblogs.com/ms27946/p/How-To-Implement-Multi-Tenant-System.html
    https://www.cnblogs.com/codemind/p/saas_architecture_tip.html

    SaaS系统简单分层

    • 业务代码都是写在应用层。
    • 租户识别可以用spring拦截器实现,然后使用ThreadLocal传递给后端
    • 数据库和缓存层对应用层应该是透明的。程序员在写代码的时候,只关心业务逻辑,不应该担心多租户的问题。

    数据隔离

    在连接池根据TenatnContext改写Sql.

    租户识别方案

    比较好做法是通过url识别租户
    系统是给租户生成一个随机的三级域名,比如 abc.crm.baidu.com. 如果客户想使用自己的域名,可以在cname到我们生成的三级域名,并在管理系统里面做绑定。

    • 域名:例如 tenant1.example.com,tenant2.example.com
    • URL:例如 www.example.com/tenant1/,www.example.com/tenant2
    • Header:例如 [x-header: 'tenant1'],[x-header: 'tenant2']

    租户管理系统(计费,订购,定制,充值,催缴)

    SaaS系统是必须考虑计费系统和租户控制系统。
    这个系统需要都是独立设计。比如那个租户购买了那些模块,一个月多少钱。租户可以创建最多的用户数。计费到期邮件提醒等功能。

    计费方式一般有两种:

    1. 周期性计费,类似月租方案,
    2. 使用量计费,用多少付多少。
      周期性计费比较简单。也可以两者结合起来。

    定制化开发

    定制化开发尽可能分系统,分模块去做

    灰度升级

    SaaS付费企业客户对系统问题都特别敏感,
    为了减少升级可能出现问题的影响范围,一般都采用灰度升级策略。
    如果使用了url来区分不同租户,灰度升级配置就会很方便。
    可以配置nginx 来根据域名做分发,
    比如租户A(aaa.com)到实例1(版本1.0),租户B(bbb.com)到实例2(版本).
    当需要域名配置非常多的时候,nginx配置文档会乱。
    这块时候可以考虑使用nignx_lua来写一些扩展模块。

    其它设计参考

    mybatis-plus-tenant

    https://github.com/chenm1xuexi/mybatis-plus-tenant
    多个字段来确定租户

    不过万物皆有好坏,mybatis-plus在提供便捷开发功能的同时,也会存在一些不合理的地方,比如说mybatis的特性就是让我们开发人员将精力集中在 sql语句的编写上,而不需要考虑ORM,结果映射等操作。 采用mybatis-plus后,sql语句的可读性会变得很差,因为mybatis-plus采用sql语句的拼接方式来完成, 从开发人员的角度,开发速度得到了显著提升,但是从维护方面来看,后续新的维护人员会变得很痛苦。

    因此是否选用mybatis-plus作为持久层框架要时不同的场景来抉择,如果想快速开发业务,实现敏捷开发,mybatis-plus是非常完美的选择。 如果是对公司的核心产品的更新迭代编者不建议采用mybatis-plus作为持久化的框架,采用原生的mybatis是非常不错的选择,mybatis也提供非常多的可拓展功能,比如说sql拦截等。 如果只想采用mybatis-plus,建议将项目业务领域和持久化领域做好划分(这个也需要看具体企业的开发的架构模式,基于TDD模式开发还是DDD,还是传统的集中式3层架构等)。 如果涉及到业务迭代快的场景,尽量减少多表联查,采用单表或者不大于3表联查的方式也非常有利于日后的业务需求的变更。

    持久化

    是将程序数据在持久状态和瞬时状态间转换的机制。
    通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。

    数据持久化

    就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称

    《Microsoft .NET企业级应用架构设计》

    数据访问层的4种主要职责:持久化、查询、管理事务、维护并发

  • 相关阅读:
    VS 格式化代码 Ctrl + K, Ctrl + F
    VS NuGet使用
    VS书签的应用
    ASP.Net简单的交互案例
    英文书也没有那么难,跟着例子做,挺有意思的
    .Net强类型视图
    .Net视图机制
    .Net MVC小尝试
    ASP.Net MVC默认目录结构
    .Net中常用的几种ActionResult
  • 原文地址:https://www.cnblogs.com/guxingy/p/13383943.html
Copyright © 2020-2023  润新知