1. SaaS 是什么
从字面中理解SaaS的全称是Software as a service, 即软件即效劳。
从效劳形式来看,SaaS是一种软件受权和交付形式,以订阅形式替代传统受权形式,以集中式部署替代用户环境部署,通常被认为是按需付费软件。
目前SaaS被广泛的认为是云计算的一部分,跟Infrastructure as a service, platform as a service, xxx as a service等并列。
从用户访问方式来看,用户一般使用像阅读器这样的瘦客户端访问SaaS应用,随着更多的企业级软件陆续提供SaaS化,客户端也将变得更加丰富,如微软Office 365, 钉钉,Saleforces, Oracle Fusion Cloud等。
2. SaaS产品的前世今生
SaaS的产品可以简单的分为三个阶段。
第一阶段是在上世纪60年代,将各种商业应用集中托管在一台大型主机里,从这个年代起IBM和其它大型机厂商提供一种效劳中心业务,为客户提供分时享用和效用计算效劳,这些大型机厂商通过还提供计算资源和数据库存储效劳。
第二阶段是上世纪90年代,随着Internet的不时扩展,一种新的集中计算效劳呈现,被称为应用效劳提供商(ASP)。ASP不但提供给用效劳所需要的主机,还提供专业化的业务应用,并且通过集中式的托管硬件与软件来降低客户本钱。
第三阶段是进入新世纪后,SaaS将ASP形式发扬光大,但又有着明显的区别:
大多数的ASP厂商关注于管理和托管第三方独立软件厂商的软件,而SaaS厂商一般开发和管理自己的软件产品。大多数的ASP厂商提供传统的客户端-效劳器的应用,需要用户停止装置在自己个人电脑中,而大多数的SaaS应用今天都是运行在Web阅读器上,依赖Internet运行。从架构上来看,大多数的ASP厂商强迫为不同的业务应用维护不同的实例,而SaaS应用一般采用多租户架构,在同一个应用中效劳不同的业务与用户,在数据访问上停止区分。
3. SaaS产品的架构设计
如上文所述,大多数主要SaaS应用都基于多租户架构,在这个架构中应用采用单一版本和统一的配置(硬件,网络,操作系统)为所有的用户效劳。为了支持伸缩性,应用必需可以部署在多效劳器中以支持横向扩展。有一些应用运行多版本共存,比如新版本上线后只能小部分用户开放以验证产品的稳定性,验证胜利后才全量发布。
3.1 多租户架构优缺点
3.1.1 多租户架构优点
相对于单租户架构本钱较低廉提供灵敏的按需付费价格形式租户无需关心平台软件与硬件租户的启用本钱较低效劳提供者只需要监控和管理单一系统
3.1.2 多租户架构缺点
多租户应用相对于单租户架构缺少灵敏性,对于租户的个性化需求可能需要较长时间满足。多租户应用一般来说设计比单租户复杂,从系统设计之初中需要考虑安全隔离和资源合理共享。多租户应用需要严格的受权与安全访问控制,从租户的角度是单一入口,从平台角度需要明确控制每个用户的访问权限,严格确保租户数据不被不当访问。租户有可能受到其它租户的影响,比如说同一个应用中某租户在运行一个大查询并占用所有的计算资源,导致其它租户无法使用。
3.2 多租户架构设计
3.2.1 租户识别
租户识别是SaaS平台入口环节的重要功能,通过系统访问域名(DNS)和用户登陆信息来停止确认访问详细租户的应用与数据。
子域名进入:
域名格式参考:[租户域名].[部署池].[主域名].[根域名]
示例如下:my-pos.eastchina01.examledomain.com
公共域名进入:
登陆域: login.examledomain.com
用户胜利登录后直接跳转到子域,用户在子域中访问系统,若一个用户绑定多个租户则由用户选择待进入的租户。
租户在资源层次构造中建立数据隔离边境,每个租户都有自己的以下属性:
唯一标识符用户,角色,组织和权限身份提供商和身份验证方法
3.2.2 存储资源隔离
多租户架构存储资源隔离形式主要有如下三品种型,不同类型的架构复杂度和本钱均不同。
单一数据库且单一Shcema架构,所有租户的数据存储在相同数据库且同一个Schema中,通过业务表的租户标识字段区分,此架构是三种架构这中最简单本钱最低的方式,所有租户均共用相同数据源。但此架构灵敏性和扩展性较弱,依赖单数据源的扩展才干,长期的运营本钱和管理本钱较高。单一数据库多Schema架构,将不同租户的数据存储在同一个数据库中的不同Schema中,可通过Schema控制数据访问权限。此架构可根据数据库不同,可以是多数据源或单数据源。多数据库架构,将不同租户的数据存储不同数据库中,可以是不同的主机或者存储,对于隔离要求级别高的租户,可提供完全硬件隔离的架构。这种架构相对而管理和运维比较复杂,但对于租户来说隔离更加安全。
3.2.3 计算资源隔离
应用效劳器采用共享集群的方式,将租户分配到不同的部署池中,租户的分配可采取随机或者容量规则,从并发数和数据库连接数的维度考虑每一个集群部署租户的数量。
3.2.4 缓存与消息中间件资源隔离
把所有的资源配置作为元数据,存储到配置中心,在系统运行时动态的创建和路由DataSource,消息集群,缓存集群,路由key为tenantId。
缓存效劳,基于本钱和管理的便利性,缓存效劳采取垂直切分,根据业务模块和部署集群分配缓存集群。缓存KEY以Tenant识别符为前缀,在缓存访问层停止访问控制。
消息效劳,基于本钱与性能的考虑,给为每一个租户部署消息集群或者单独频道与队列变得复杂且低效。消息效劳采取共享资源的访问,通过消息体停止约定,在消息体头部分加上租户标识,消息订阅者获得消息后根据消息头的租户ID停止处置,调用租户的API完成业务操作。
3.2.5 安全性
当租户选择一款SaaS产品时,产品的安全性将会放置在第一位考虑,如数据隔离,敏感数据加解密,数据访问权限,个人隐私以及运维流程。针对安全性的考虑,SaaS一般需要考虑以下几点:
统一的安全组件,安全组件就是统一对SaaS产品停止安全防护,保证租户的数据安全。比如说存储使用AES加密,加解密使用的密钥由租户掌握,使用时方对数据停止解密。数据隔离组件,安全组件处置用户数据安全可靠的问题,数据还需要处置隐私的问题,各租户之音的数据必需互相不可见,互相隔离。
3.2.6 可配置界面
一个成熟的SaaS产品需提供灵敏用户界面配置才干。当新版本发布时为业务对象增加一个字段,需要在Web端,挪动端和关联的报表同步改动生效,那么产品能通过相同的工具和流程去配置产品。常见的配置项如下:
租户可自定义字段名称和描绘租户可自定义界面风格与页面规划租户可增减字段以及校验逻辑租户可自定义报表与分析
3.2.7 丰富的API
一个SaaS产品要获得胜利,系统的集成才干是重要的一环,API设计是集成才干提供的关键因素。业内首屈一指的云厂商Amazon AWS的产品设计之初就提出Everything is API和The API first的战略。在产品内部所有的行为都应该是API的调用,无论是内部访问还是外部访问,一切设计均围绕API停止。
API才干以微软的AKS产品为例:
支持快速创建与发布API网关给内外部用户调用有才干处置任务的数据格式并快速响应变化有才干在任何时间任何地点连接后台效劳,并提供管理,安全和优化的才干。
3.2.8 发布与部署战略
制定灵敏的灰度来战略,可根据部署池,租户等战略停止灰度发布,并提供实时监控才干自动化所有的发布流程,包括应用包,表构造更新以及数据补丁。自动线上验收的才干,发布完成后系统有才干停止线上测试并汇总结果。深化集成主流云厂商主要产品的API,通过CICD的才干一键完成发布与晋级。
4. SaaS产品私有化部署
假设有土豪顾客对产品表示非常喜欢,受制于内部的安全因素无法在公有云上使用产品,灵敏的SaaS需具备私有化的才干。要满足这个要求,在技术选型需考虑以下:
开放的技术栈,比如说Spring Cloud主流的系统软件与中间件引入尽量少技术产品与组件容器化部署可靠的CICD软件与流程
5. SaaS产品的简单实现
6. 参考文档
Multitenant SaaS on Azure
关于作者
微胖中年码农-老王 |