来源https://juejin.im/post/5cf45fc151882502f9490639
做者:谭朝红java
从计算机诞生开始,就伴随着计算机应用程序的演变。简短的回顾历史,咱们能够清楚的看到应用程序发生的巨大变化。上世纪70年代中期,随着我的PC机的爆炸式增加以及程序员的崛起,让计算机的计算能力获得了大跨越的提高,我的PC机上能够运行很是复杂的应用程序。程序员
进入上世纪80年代,随着Bulletin Board
System(简称:BBS)电子公告板系统的兴起,它能够为广大PC机用户提供基本的在线服务,如在线聊天、电子邮件、消息发送和文件下载。因为受到那个时代计算机网络传输速度的限制,在线服务的响应速度慢,交互体验差是最大的通病。算法
进入90年代中后期,随着万维网的出现,计算机的计算能开始进入快速提高阶段,加之网络基础设施的持续完善,计算机网络技术也随之发展起来,这让Web网站能够提供功能多元化和更为复杂的在线服务,直到今天,咱们所看到的互联网(或云)开发的在线服务应用程序。spring
在这段计算机技术快速成长的时间里,计算机软件到底发生了哪些变化?从历史的发展中,咱们能够看到,应用程序自己没有发生本质的变化(程序=数据结构+算法),变化的是软件的供需方式发生了改变。如今,应用程序消费者不须要再在他们的PC机上下载和安装特定的应用程序,便可得到软件所提供的计算服务。在云计算技术的支持下,消费者(企业或我的)只须要使用Web工具(浏览器)访问并登陆软件提供商的Web系统,经过简单的配置,就能够得到本身所需应用程序服务。这种经过网络便可使用软件的服务,即便SaaS(软件即服务)。数据库
图 1-1 2015中国SaaS生态后端
在本篇文章中,咱们将着重介绍SaaS架构设计,并围绕WHAT(是什么?)、WHY(为何?)、WHERE(在哪里?)和HOW(怎么样?)这四个问题,对如下的几点进行阐述:浏览器
图 1-2 文章结构七牛云存储
图 2-1 SaaS组成结构安全
在你决定实施SaaS品台架构设计前,你有必要先了解SaaS软件是什么。从宏观的角度来看,SaaS是一种软件应用程序交付方式,软件提供商集中化托管一个或多个软件应用程序,并经过互联网向租户体用这些软件应用程序。从分类上看,SaaS(软件即服务)也是云计算重要的一部分。目前国内主流的云服务提供商如阿里云、百度云、腾讯云等,为广大用户提供了不一样业务需求的云服务,它们大体能够分为如下几类:服务器
SaaS应用程序的任何更新或者修复漏洞操做都是由软件提供商负责实施和处理的,因为租户是经过互联网获取软件服务,因此租户端无需下载任何的升级包或者修复补丁,是一种开箱即获取最新软件产品的服务方式。
经过对什么是SaaS的介绍,接下来,咱们了解一下选择SaaS做为软件架构来设计产品的一些理由。
咱们将从不一样的角度来阐述几个为何选择SaaS的理由。透过对这些因素的分析,为你是否须要将本身的软件SaaS化提供必定的参考依据。
获取软件服务的方式足够简单,SaaS也许是迄今为止使用软件最简单的方式之一,租户只须要动动鼠标和键盘,便可在几小时甚至几分钟内得到一个大型的软件服务。相比于传统使用软件的方式,租户省去了研发、部署、运维等一系列繁复的过程,且得到软件的时间和费用成本都大幅度下降。
SaaS能够体用跨地域、跨平台的软件服务。与此同时,软件服务商能够统一对软件进行版本管理,这将带来如下几点好处(包括但不限于):
咱们将SaaS应用程序与传统的桌面应用程序作一个水平的对比,部署一个SaaS产品将能够得到如下的几点优点。
SaaS化的产品经过互联网向租户提供软件服务,随着Web技术(如jQuery、Node.js)的进步,Web页面的交互体验度大幅度提高,交互更流畅、更人性化。与传统的桌面应用程序的人机交互效果相差无几。
SaaS化产品能够为租户提供弹性的付费方案,如按日、按月、按年、按使用人数或者按使用量进行计费,它将给租户提供更经济的使用软件的财务预算表。
使用SaaS产品无需担忧数据安全问题,这比如将钱存入银行同样安全。相较于企业内部部署的软件系统而言,SaaS产品具有更高的安全保障能力,由于软件提供商具备更多软件安全防御的技术资源、人力资源和财政资源。
与传统软件相比、SaaS软件的兼容性更好,它没有传统软件的多本版维护问题和操做系统兼容问题。在SaaS软件中,租户用户在使用软件的过程当中,几乎上感受不到软件发生了改变。当租户用户登陆到系统上时,就已经得到了最新版本的软件。
SaaS产品具备普遍的适应范围,特别是与其余云产品(如IaaS(基础设施即服务)和PaaS(平台即服务))配合使用时这种能力表现尤其突出,例如阿里云之类的云计算技术容许你配置可托管的Web站点、数据库服务器等。你只须要打开浏览器并登陆到阿里云控制台,经过操做对应的控制面板,便可得到相关的软件服务。
从理论上讲,SaaS能够将任何的软件SaaS,下面列举一些通用的分类供你们参考:
图 6-1 SaaS产品的缺点
从上图咱们能够直观的看到,SaaS产品与生俱来的几个缺陷,接下来咱们将逐一进行描述。
与企业内部部署的软件不一样,因为SaaS软件被击中托管在服务提供商的Web服务器中,因此租户没法控制全部的软件应用程序,SaaS化的软件比企业自行部署的软件得到的控制权更少,租户可操做的自定义控制权极度有限。
因为SaaS软件是将一套应用程序共享给一个或者多个租户共同使用,这种共享的消费方式还未被大多数的消费者所接受。同时,受制于市场环境的影响,目前还有大多数的软件还未SaaS化。
共享应用程序必然会带来服务器性能的降低、如计算速度、网络资源、I/O读写等都将面临严峻的考验。在性能方面,企业内部部署的“独享模式”的应用程序比SaaS软件的“共享模式”略胜一筹。
当租户在选择一款SaaS产品时,产品的安全性将会被放置在第一位进行考虑。如数据的隔离、敏感数据的加密、数据访问权限控制、我的隐私等问题。在2018年5月25日,GDPR(General
Data Protection
Regulation)《通用数据保护条例》出现以后,愈来愈多的人开始重视数据安全问题。如何最大程度的打消租户的这一顾虑,须要服务提供商增强对自身可信度度的提高,以赢得租户的信赖。
不一样类型的SaaS产品,因为要面对不一样的用户愿景,可能在功能和业务上会有所不一样,但任何一个SaaS产品,都具有如下几个共同的核心组件。
图 7-1 SaaS 核心组件
在SaaS产品中,系统安全永远是第一位须要考虑的事情,如何保障租户数据的安全,是你首要的事情。这如同银行首选须要保障储户资金安全同样。安全组件就是统一的对SaaS产品进行安全防御,保障系统数据安全。
安全组件解决了用户数据安全可靠的问题,但数据每每还须要解决隐私问题,各企业之间的数据必须相互不可见,即相互隔离。在SaaS产品中,如何识别、区分、隔离个租户的数据时你在实施SaaS软件架构设计时须要考虑的第二个问题。
尽管SaaS产品在设计之初就考虑了大多数通用的功能,让租户开箱即用,但任然有为数很多的租户须要定制服务自身业务需求的配置项,如UI布局、主题、标识(Logo)等信息。正由于没法抽象出一个彻底通用的应用程序,因此在SaaS产品中,你须要提供一个可用于自定义配置的组件。
随着SaaS产品业务和租户数量的增加,原有的服务器配置将没法继续知足新的需求,系统性能将会与业务量和用户量成反比。此时,SaaS产品应该具有水平扩展的能力。如经过网络负载均衡其和容器技术,在多个服务器上部署多个软件运行示例并提供相同的软件服务,以此实现水平扩展SaaS产品的总体服务性能。为了实现可扩展能力,就须要SaaS展现层的代码与业务逻辑部分的代码进行分离,二者独立部署。例如使用VUE+微服务构建先后端分离且可水平进行扩展的分布式SaaS应用产品。对于可扩展,还有另一种方式,即垂直扩展,其作法比较简单,也比较粗暴:经过增长单台服务器的配置,如购买性能更好的CUP、存储更大的内存条、增大带宽等措施,让服务器可以处理更多的用户请求。但此作法对于提高产品性能没有质的改变,且成本很高。
以往的软件在升级或者修复Bug是,都须要将运行的程序脱机一段时间,等待升级或修复工做完成后,再从新启动应用程序。而SaaS产品则须要全天候保障服务的可用性。这就须要你考虑如何实如今不重启原有应用程序的状况下,完成应用程序的升级修复工做。
要将原有产品SaaS化,就必须提供多租户组件,多租户组件是衡量一个应用程序是否具有SaaS服务能力的重要指标之一。SaaS产品须要同时容纳多个租户的数据,同时还须要保证各租户之间的数据不会相互干扰,保证租户中的用户可以定期望索引到正确的数据,多租户组件是你必需要解决的一个问题。其他的组件都将围绕此组件展开各自的业务。
本文将软件应用程序的发展历程做为切入点,并围绕WHAT(是什么?)、WHY(为何?)、WHERE(在哪些领域实施?)和HOW(怎么样?)这四个问题对SaaS展开了介绍。文中详细的阐述了基于SaaS架构的软件设计须要注意的问题,并分析了SaaS产品的特性、有点、缺点。最后还介绍了基于SaaS架构的软件产品应该具有的几个核心组件以及他们各自的做用。但愿本次可以让你对SaaS软件架构有一个全面的了解,而且在你准备实施SaaS软件架构设计前可以提供一些价值的参考信息。
12 套 微服务、Spring Boot、Spring Cloud 核心技术资料,这是部分资料目录:
公众号后台回复arch028
获取资料::