SaaS架构实现理论(四)可伸缩多租户


《互联网时代的软件革命-SaaS架构》学习笔记四

1.伸缩性(Scalable)的概念

伸缩性强调的时性能、容量等方面的可扩展。最理想的情况时,随着用户数的增大,系统架构不用做调整,而仅需要增加/增强相应的硬件设备(服务器、数据库服务器)即可。

实现可伸缩的最简单方式就是垂直扩展或向上扩展,即增强硬件设备。这种方式几乎是任何应用架构普遍适用的,但通常面临高成本的问题。
通常强调的应用架构具有可伸缩性,一般是指水平扩展或向外扩展。

2.应用服务器层的水平扩展

实现应用服务器层的负载均衡,是实现应用服务器层水平扩展的最主要手段。具体实现负载均衡的策略有两种:

  • 基于硬件负载均衡设备实现负载均衡,这个方式更好但是贵
  • 基于软件的方式实现负载均衡,例如通过配置Apache Http Server,下面介绍

Apache可以实现负载均衡,根据服务器的压力情况,将每个用户请求分布到不同的应用服务器上。但是,大部分应用的用户请求可能是有状态的(一般使用Session记录用户状态)。这种情况下,如何能够在多台应用服务器之间保持用户状态,将是实现应用服务器层水平扩展的关键。在处理这个问题上,通常策略有三种:

  • Session复制
  • Session Sticky
  • 基于Cache的集中式Session

2.1基于Session复制的水平扩展方式

很多应用服务器都强调支持强大的集群功能,Session复制就是强大的集群功能特征之一。
通过Session复制,大部分应用都可以实现应用服务器集群。通过增加应用服务器集群中的服务器数量,应用就可以达到水平扩展的目的。

以Apache+JBoss为例,配置Load Balance和Session复制。

2.2基于Session Sticky的水平扩展方式

为了避免Session复制带来的性能影响,可以使用Session sticky,这种方式将同一用户请求转发到特定的JBoss服务器上,避免集群中的session复制。

上面方式基础上,在Apache配置worker.properties中的worker.loadbalancer.sticky_session由0调整为1,JBoss不变。

2.3基于Cache的集中式Session实现水平扩展

session复制方式性能差,Session Sticky方式无法保证fail-over。使用集中式Cache来代替Session。
应用服务器层基本实现了完全的水平扩展,应用服务器层的压力基本上可以完全通过增加服务器进行扩展。集中式Session服务器采用MenCached,其本身也具备水平扩展能力。当Session数量大到一台Cache服务器都无法承担的程度时,我们也只需要增加相应的Cache服务器即可。

2.4三种水平扩展方式的比较

在这里插入图片描述

3.数据库的水平扩展

  • 数据库的垂直切分:将不同的功能模块所涉及的表划分到不同的物理数据库中,从而将对这些表的访问压力分担到多个不同的物理数据库中。
  • 数据库的读写分离:同一个数据库在多个物理服务器上具有多份copy,彼此同步。然后将对于数据库的写操作都统一到一个主服务器上,而读操作则分摊到多台从服务器上。通过读写分离,实现数据库访问压力的分担。
  • 数据库的水平切分:将原来存储在一个数据表中的数据,按照一定的规则,切分到多个不同的物理数据库中。每个数据库的数据结构完全相同,但是数据各不相同。最终对于业务的访问,会根据其数据所在的数据库,定位到某一个数据库中查询。

3.1数据库的垂直切分

对于论坛这样的于其他模块没有紧密耦合的功能模块,其涉及的数据库表就首先可以垂直切分。
对于大部分应用而言,除非模块间的关联很少,否则实现垂直切分不容易:

  • 原本可能存在的表链接,需要想办法去除
  • 原本同一个数据库的事务操作,可能会变成跨数据库的事务

3.2数据库的读写分离技术

对于读多写少的互联网应用,会广泛采用读写分离技术。例如MySQL的Replication技术就是被广泛使用的读写分离技术。

3.3数据库的水平切分

SaaS应用的不同租户之间在业务上没有任何关联,租户之间的数据是完全隔离的。只有很少部分的共享数据(整个系统全局性的一些配置信息),但它们通常都是只读的,是不允许任何一个租户更改的。

架构改造:
首先,租户和用户数据必须位于一个集中式的数据中。原因是在用户登录之前,系统是无法预知其属于哪一个租户的。
租户对应到那个物理数据库的映射,通常有两种处理方式(采用Hash算法;将租户对应到哪个物理数据库也做关系表存储在集中式的租户数据库中)

3.4三种数据库的睡哦扩展方案对比

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SAAS多租户架构图通常由以下组件组成: 1. 客户端:客户端是用户使用SAAS应用程序的界面,可以是Web浏览器、移动应用程序等。 2. 负载均衡器:负载均衡器用于分发客户端请求到后端的多个应用程序实例,以实现负载均衡和高可用性。 3. 应用程序服务器:应用程序服务器SAAS应用程序的核心组件,它处理客户端请求并执行业务逻辑。多个应用程序服务器可以水平扩展以处理更多的请求和用户。 4. 数据库:数据库用于存储SAAS应用程序的数据,包括用户信息、配置数据、业务数据等。通常使用关系型数据库或者NoSQL数据库来支持数据存储。 5. 多租户引擎:多租户引擎是实现SAAS多租户架构的关键组件,它负责管理不同租户的数据隔离、安全性和定制化需求。它可以通过数据库模式分离、数据过滤或者虚拟化等方式来实现多租户隔离。 6. 身份验证和访问控制:SAAS应用程序通常需要进行身份验证和访问控制,以确保只有授权的用户可以访问特定的数据和功能。这可以通过用户身份验证、访问令牌、角色权限等方式来实现。 7. 集成服务:SAAS应用程序可能需要与其他系统进行集成,如第三方支付服务、邮件服务、短信服务等。集成服务可以通过API接口、消息队列等方式来实现。 8. 监控和日志:SAAS应用程序需要进行监控和日志记录,以实时监控系统的性能和健康状况,并记录关键事件和错误日志,用于故障排查和系统优化。 这是一个基本的SAAS多租户架构图,不同的SAAS应用程序可能会有一些定制化的组件或者扩展

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值