软件体系结构是构建计算机软件实践的基础。 软件架构是一个系统的草图。它描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。
随着社会及软件设计的发展,不同时期对软件架构的要求也不一样,软件架构的发展,从最开始的单体应用架构,到垂直应用架构,再到分布式架构,再到面向服务的SOA架构,再到目前比较流行的微服务架构,每种架构都在自己的时代发挥了重要的作用.
单体架构是早期的应用软件架构,以前的SSH或者SSM架构模式就属于这种架构,架构采用分层的架构模式,可分为数据库访问层,业务逻辑层,控制层,前台到后台在一个项目里完成,这种架构简单,开发成本低,部署在一个节点上就可以,维护也比较方便,但缺点也比较明显,全部功能集成在一个项目中,这样对于大型项目来讲不易开发和维护,模块之间耦合紧密,单点容错能力很低,并且无法针对不同的模块进行针对性优化和水平扩展,一个模块出现问题,会导致整个系统无法使用.
单体应用架构
随着项目运行发展,用户访问量逐渐增大,单体架构的应用只能通过软负载均衡等手段,结合单纯增加节点的方式来应对,但系统中并不是所有的模块都会有比较大的访问量,这时单体架构的劣势就会展现出来,这时我们把系统模块拆分,对访问量较大的模块,增加节点,进行水平扩展即可这就是垂直应用架构,垂直应用架构很好的适应了当时时代发展的需要,实现了流量分担,解决了并发问题,并且可以针对不同模块进行优化和水平扩展,一个模块出了问题不会影响到其他系统,从而也提高了系统容错能力,但垂直应用架构的系统,各模块间相互独立,无法相互调用,这会导致重复的开发任务.模块间物业相互调用的情况是避免不了的.
垂直应用架构
分布式架构,由垂直应用架构演变而来,当垂直应用架构中,模块越来越多,重复的业务代码会越来越多,这时把重复部分代码抽取出来,做成统一的业务层来提供独立服务,这就形成了分布式架构,分布式架构分为表现层和服务层两个部分,表现层仅处理页面交互,服务层提供业务逻辑支撑,各个服务模块之间可以相互调用,提高了代码的复用性,但随着业务模块增多,系统间耦合度会逐渐变高,模块间调用关系错综复杂,系统会变的越来越难以维护.
分布式架构
由于分布式架构下,模块服务越来越多,模块小而多的问题越来越突出,模块间调用混乱复杂,这个时候就需要增加一个调度中心,对模块服务间的调用进行实时管理,此时SOA Service OrientedArchitecture,面向服务的架构出现了,该架构通过添加服务治理中间层,来实时管理模块服务之间的相互调用.目前服务治理中间件有阿里的DUBBO,早期时有人用WebService或ESB企业服务总线,底层通讯协议使用SOAP协议(Http+XML)来实现传输.SOA架构使用服务治理层解决了服务之间调用关系错综复杂的问题,但服务间依赖关系较多,某个环节出错可能会导致服务雪崩,并且模块服务间关系复杂,运维成本增加,测试部署困难.
SOA架构
微服务架构从SOA架构演变而来,比SOA架构模式,粒度控制更加精细,微服务架构倡导将应用模块,设计成一个个独立,可配置,的子服务,每个服务可以独立部署,互不影响,服务间通讯采用Http协议,并使用restful风格的API形式进行通讯,数据交换采用轻量级Json格式通讯,借助Http实现了系统跨语言,跨平台的交互,微服务架构,通过对服务的原子化拆分,独立打包,部署,升级,保证了每个微服务清晰的任务划分,利于扩展.并且现在已经有成熟的微服务全家桶式的框架,比如SpringCloud以及最新的Spring Cloud Alibaba.
微服务架构
多租户技术又称多重租赁技术,是一种软件架构,它探讨的是实现如何在多用户环境箱,实现共用相同的系统或程序组件,并确保各个用户之间的数据独立性和隔离性.在多租户应用系统架构中,使用多租户应用系统的客户称之为租户,对租户而言在系统中建置的各种数据,以及用户本身客制化的应用程序环境等都是属于租户范围的,也就是说,虽然多个租户同时在使用一套程序软件,但每个租户都有自己的一套客制化软件环境,因此租户数据的隔离,隐私,安全是多租户技术的关键.
多租户的软件架构,系统维护成本低,系统升级时只需更新一次,维护人员不需要对每个用户都进行更新,节省了大量的运维成本,同时因为一个软件实例被多个组织共享,降低了整体的资源消耗,减低了应用运行成本和相应管理开支,同时降低了在云计算环境下,导致的敏感数据容易泄露,数据访问无详细记录,操作无详细记录的风险,提高了数据的安全性.另外由于统一部署所以管理起来也会更方便,当然多租户的软件架构同样也有系统复杂性高的问题,由于多租户系统融合了所有租户的需求,所以需要更强的专业技术来持续开发升级维护,才能保证系统的持续稳定运行.
在现有多租户的技术实现中主要有三种模型.
第一种是独立数据库隔离模型,即为每个租户维护一个单独的数据库,该数据库独占一台服务器设备,这种方案的用户隔离级别最高,安全性最好,独立数据库是一个租户独享一台数据库服务器,它提供了最高强度的隔离,租户的数据彼此,在物理层面上不可见,数据的备份恢复都很灵活.但相应的硬件成本也高,数据库安装数量多,随之会带来运维和购置成本的增加.
第二种是共享数据库服务器,独立数据库实例模型,这种方式所有租户共享一个数据库服务器,但每个租户使用该数据库服务器上的一个数据库实例,将每个租户分别关联到这台数据库服务器的不同数据库实例上,租户之间的数据,彼此在逻辑上是不可见的,这在一定程度上实现了数据的逻辑隔离,并不是完全隔离,但若该数据库服务器出现问题,所有租户的数据库都会受到影响.
第三种是共享数据库服务器,共享数据库实例,共享数据库表模型,
这种方式实现的多租户系统,所有租户的数据放到同一台数据库服务器的,同一个数据库实例中,每个租户通过表中的TenantId来区分不同的租户数据,这种模型共享程度最高,隔离级别最低,租户间数据彼此逻辑不可见,这是成本最低的一种实现方式,另外还有一种相似的实现方式,也是通过共享数据库服务器共享数据库表,但数据的隔离不是通过TenantId而是通过软件系统自身的权限配置,来实现的租户数据逻辑上的隔离,这种方式跟前一种方式相比设计实现成本会更低一些同时也能很好的在逻辑上保证数据的隔离.
Saas Software-as-a-Service软件即服务,对于平台供应商来说,相对于传统的软件供应模式,软件的Saas化,可以让用户通过互联网使用实时运行的软件,给用户带来极其丰富的体验的同时,也节约了客户的使用投资,同时由于供应商,始终维护一套代码,所以在一定程度上也节省了供应商的成本.同时对于供应商来说,多租户的软件架构代码可重复使用,成本较低,可以更快的为用户提供解决方案,软件产品可按功能模块,随意组合,定价模式灵活,符合企业发展模式,另外只维护一套软件,供应商可以把精力专注到产品提升上,给客户提供更好,更全面的解决方案和技术支持.
多租户应用软件构建模型有独立数据库服务器模型,独立数据库服务器,共享数据库实例模型,共享数据库服务器,共享数据库实例,共享数据库表模型,这三种方式各有优缺点.
基于这三种构建多租户系统的模型,我们可以在分布式微服务软件架构的基础上再去构建多租户应用系统,微服务软件架构是当下比较流行的分布式软件架构,其提供的全家桶式的,一站式分布式问题解决方案也获得了众多企业的认可,最新的SpringCloud Alibaba 优化了服务的治理,流量监控,分布式事物等处理等功能,使得分布式系统的开发变的更加的方便.因此建议使用SpringCloud Alibaba微服务架构做为多租户系统开发的基础框架.
在SpringCloud Alibaba的微服务架构选型基础上,进一步选择若依管理系统微服务版做为系统开发的基盘,该系统一直保持升级,是基于JAVA EE 分布式微服务架构的平台,基于经典技术组合(Spring Boot、Spring Cloud & Alibaba、Vue、Element),已经内置了模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源,可以提高系统开发效率,文档完善,代码易懂,且基盘持续维护更新保证了基础代码的安全,同时支持二次开发,保证了系统灵活的可定制性.