SaaS云

读书笔记《互联时代的软件革命-SaaS架构设计》叶伟(二)

2024-01-15  本文已影响0人  爱上鱼的猫_产品狗

第 6 章 可伸缩的SaaS应用架构

6.1 伸缩性(Scalable)的概念 132

通常强调的应用架构具有可扩展伸缩星一般指的是可以实现“Scale out”,即水平扩展或者向外扩展。

6.2 应用服务器层的水平扩展 133

实现用户负载平衡通过硬件和软件方式实现,同时需同步用户Session状态。

实现Session同步方式:1.Session.2 Session Sticky 3.基于Cache的集中式Session。

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

通过Session复制,大部分应用都可以实现应用服务器集群。通过增加应用服务器集群中的服务器数量,应用就可以达到水平扩展的目的。

6.2.2 基于Session Sticky的水平扩展方式 137

这种方式将同一用户的请求转发到特定的JBoss服务器上,避免了集群中Session的复制。

6.2.3 基于Cache的集中式Session实现水平扩展 138
6.2.4 三种水平扩展方式的比较 139
6.3 数据库层的水平扩展 139

1.数据库的垂直切分

将不同的功能模块所涉及的表划分到不同的物理数据库中,从而将对这些表的访问压力分担到多个不同的物理数据库中。


数据库屋垂直切分后的系统部署.png

2.数据库的读/读分离

同一个数据库在多个物理服务器上具有多份Copy,彼此同步。然后将对于数据库的写操作都统一到一个主服务器上,而读操作则分摊到多台从服务器上。通过读/写分离,实现数据库访问压力的分担。

数据库层的读写分离部署.png

3. 数据库的水平切分

数据库的水平切分:将原来存储在一个数据表中的数据,按照一定的规则,切分到多个不同的物理数据库中。每个数据库的数据结构完全相同,但是数据各不相同。最终对于业务数据的访问,会根据其数据所在的数据库,定位到某一个数据库中查询。

实现步骤:

1)租户和用户数据必须是位于一个集中式的数据库中。

2)用户对应到哪个租户数据库。有两种方式:1.Hash算法。2将租户对应到哪个物理数据库也作为关系表存储在集中式的租户数据库中。用户登录时查询对应的关系表。


数据库层的水平切分后的系统部署.png

4 三种数据库层的水平扩展方案对比


三种数据库层的水平扩展方案.png

第 7 章 SaaS系统安全

7.1 应用安全 150

7.1.1 身份认证 150
1.集中式认证

集中式认证,就是由SaaS应用系统提供一个统一的用户身份认证中心。

2. 非集中式认证

非集中式认证,就是各租户使用自己的用户身份认证系统进行身份校验,并且发布安全令牌。SaaS应用实现一个身份中心,负责接受安全令牌,并据此获取用户身份信息,允许用户使用系统。

3. 混合认证方式

对于多租户的SaaS应用来说,可能需要面临集中式认证方式与多种非集中式认证方式同时存在的混合认证方式。


身份认证方案比较.png
7.1.2 权限管理 153
1.权限模型

对于权限模型,传统系统广泛地采用RBAC(Role-Based policies Access Control)模型体系。


RBAC0.png
2. 权限分配

权限分配主要包括三个方面:角色管理、用户到角色的分配、角色许可的分配。

3. 权限效验

1)首先校验用户是否购买了相应的功能。

2)校验用户购买相应功能的期限。

7.1.3 日志记录 156

行为日志记录

行为日志记录就是要对用户在系统中所访问的每一个页面,在各页面中所做的每一个行为都记录下来,记录用户的身份和行为的时刻。

数据日志记录

数据日志记录,就是要对用户在系统中所操作的数据进行记录,记录数据的变更过程及变更的历史。这在多人操作同一个数据的系统中显得尤为重要。

日志记录的安全

日志记录是对用户在系统中行为进行查证的依据。

7.1.4 应用监控 157

可用性监控:要监控应用的硬件和软件的可使用状况。

可靠性监控:对于应用监控的常见实现方案是采用心跳监测。

7.2 数据安全 158

7.2.1 数据隔离 158

数据隔离,就是要对租户之间的数据进行隔离,以确保各租户数据的完整性和保密性。

7.2.2 数据库连接安全 159

1.模拟存取

采用模拟存取方法,就是在数据库中设置不同用户对数据库对象具有不同的操作权限,系统直接采用当前用户的身份去模拟操作数据库对象。


模拟存取.png

2. 受信任的子系统存取

不管当前用户的身份如何,应用总是使用一个特定的用户身份与数据库连接,操作相应的数据库对象,而数据库系统总是信任这个用户具有这些数据库对象的相应的操作权限。


受信任的子系统存取.png
7.2.3 敏感数据加密 160
加密算法分类.png

对称式加密就只需要一个密钥,既可以用这个密钥将明文加密成密文,也可以用它将密文解密成明文。

非对称式加密则需要两个密钥:一个公钥和一个私钥,公钥用来将明文加密成密文,而私钥用来将密文解密成明文。

7.2.4 数据量监控 164

文件空间监控就是要监控租户在对文件进行操作时,占用系统硬盘空间的数量。

数据使用量监控就是要监控租户对系统数据库空间的使用量。

7.3 网络安全 165

7.3.1 安全传输 165

对于SaaS应用中敏感数据的传输,建议采用安全超文本传输协议HTTPS进行传输。

第 8 章 离线应用

8.1 系统分析 171

8.1.1 离线应用的4大核心问题 172

既然是离线应用,则需要在用户机器上存放数据,也就需要系统能够支持本地存储机制。如果应用是B/S结构,由于界面是网页,则需要将页面存放到本地,以便离线时启动系统。

由于是离线使用,将会出现服务器端数据与本地数据的差异,数据需要通过同步的方式保持一致。还由于存在多个客户端,它们在与服务端同步数据的时候有可能产生冲突。

同时,从用户体验考虑,还需要解决如何减少网络流量以及数据安全等问题。

8.1.2 离线应用架构 173
离线应用架构图.png 离线设计主体流程图.png

8.2 本地使用 176

8.2.2 离线页面支持 178

为了让B/S软件能在离线状态下使用,则必须将页面保存在本地,并且要由本地Web服务器来支持。这里的“本地Web服务器”和如何保存页面将是问题的关键。

8.3 本地存储 178

8.3.1 本地数据库支持 178

离线应用还需要解决本地存储,说到数据存储,自然会想到数据库。而这里的数据库需要在用户机器上运行,而IE自身没有提供这样的能力,但IE可以使用脚本调用ActiveX控件,因此可以通过ActiveX控件集成本地小型数据库来实现数据库的支持。本地小型数据库引擎可以使用SQLite、Access这样的文本数据库。

8.4.1 增量数据处理 180

如果本地记录的“服务器时间戳”与服务器端的“时间戳”一致,则说明从上次同步到现在服务器端数据未变化过;并且本地修改标记为True。这两个条件就能说明本地数据要比服务器端的数据新,需要将本地数据更新到服务器。如果本地的“修改标记”为False;而服务器端的时间戳比客户端保存的“服务器端时间戳”大。这两个条件就能说明服务器端数据要比客户端的数据新,需要将服务器端数据同步到本地。

增量数据同步图.png
8.4.2 多用户冲突 183

如果本地的“服务器时间戳”与服务器端的“时间戳”不一致,则说明有其他人修改了服务器的数据,需要更新到本地。如果本地修改标记也是True,则会出现多用户冲

冲突解决策略

++覆盖策略:就是“后提交者”覆盖“前提交者”的内容,以“后提交者”内容为最终结果。

■ 丢弃策略:“后提交者”在提交前发现之前有人已经提交过,则将自己的数据丢弃,在系统里仍然保留“前提交者”的内容。

■ 提醒方案:当发生冲突时,则将冲突信息提醒用户,由用户分析后确定采用“覆盖”或“丢弃”。


多用户冲突流程图.png

8.5 数据传输 184

■ 传输协议:可以采用HTTP、FTP协议,也可以自己通过Socket实现自定义协议。

■ 压缩:考虑到网络带宽限制,我们需要将数据进行压缩处理,这能极大降低网络开销,一般多使用gzip解压缩。当然前面8.4.1节的增量数据处理也对网络的开销起到很关键的作用。

加密:为了保障应用数据的安全性,必须要考虑对数据进行加密。比如采用SSL连接、数字签名等。

■ 分包处理:前面我们提到有3种打包形式,即按所有变更数据打包;按业务对象打包;按每条记录打包。

◇ 按所有变更数据打包:可能数据包会很大,我们应该将其分成小包或文件进行传输。这时,就需要对这些小包或文件进行排序处理。这种打包形式在处理性能上并不是最优的,一次性提交的数据量大而且传输的次序控制也比较麻烦。

◇ 按业务对象打包:将本地的修改数据按业务对象区分后单独打包。这样对

于数据完整性是有所保障的,同时数据量也不会很大。

◇ 按每条记录打包:这种方式需要在本地对记录进行排序处理,因为表数据是有关联的。如果本地不处理而放到服务器端处理,则服务器端需要作对应的业务处理,客户端在提交数据时先保存数据,然后按表的关联顺序插入数据库。

■ 断点续传:由于网络的不稳定,对大数据包的上传会造成失败,从而无法完成数据的传输,因此需要实现断点续传功能。

第 9 章 分布式文件存储

9.1 大文件的分布式存储 195

9.1.1 GFS 195

GFS是Google的分布式文件系统解决方案。GFS的设计目标是解决以PB为单位的海量存储问题。它采用分布式存储,多份拷贝的技术架构,只使用普通服务器加普通硬盘的方式。

1PB=1024TB

9.1.2 HDFS 197

HDFS是基于Apache基金的Hadoop的核心分布式文件系统,也是在Google的GFS思想基础上开发的开源系统,它实现了GFS的绝大部分功能。

9.2 小文件的分布式存储 202

9.2.1 ADFS(Alibaba Distributed File System) 203

海量文件特点

1 系统中存在海量的文件,文件的数量是以亿为单位的。
2 大多数文件是小文件,一般小于1MB(最大的为2GB)。
3 文件通常是一次写、多次读(写了之后很少有修改,当然系统支持对文件进行修改操作)。

ADFS文 件系统架构.png

当ADFS文件系统应用程序希望读取某个文件数据时,它不是直接访问ADFS主分配Master,而是访问查询Master。由查询Master返回该文件及Meta信息和块相关信息,降低分配Master的压力。由于分配Master只在文件更改(创建、删除、更新、副本增加、减少)时才处理业务,而系统中的操作绝大多数是读操作而非写操作,因此通过分配和查询的分离,大大提高了分配Master的处理能力。


创建文件流程图.png 读文件流程图.png

10.1 基于列的结构化分布式数据库 211

10.1.1 HBase 数据库数据结构 211

而HBase的设计思想与传统关系数据库不同,它以列的方式来存储数据,而不是行。

10.2 基于代理的分布式数据库 217

基于代理的分布式数据库的设计思想是在数据库和应用程序之间搭建一个中间层,对数据库访问进行代理。


基于代理分布式数据库框架.png

基于代理的分布式数据库主要解决以下问题:

(1)数据库连接数问题

由于目前的数据库提供网络服务时,都是基于每个连接一个进程或线程的方式,而且每个连接基本上要消耗2MB左右的内存。因此,当有很多数据库客户端访问数据库时,将会产生大量的连接,可能导致数据库主机的资源耗尽而停止提供服务。不过,实际上真正需要并行处理任务的连接,没有建立的连接多。因此,通过在中间代理层进行连接控制,使用共享连接池等技术可以解决连接过多导致数据库主机资源耗尽问题。

(2)读写分离

对于某些应用场景,写操作比较少,而读操作很频繁。因此,采用复制的方式,数据写到Master数据库,读操作分离到多个Slave数据库进行读操作的方式,可以提高数据库的性能。但直接采用读写分离,可能涉及应用程序的修改,应用程序访问数据库的时候需要区分是读操作还是写操作,增加了应用程序的复杂度。通过在中间代理层增加读写分离技术,这样对应用程序而言就是透明的,不用关心具体后台的读写分离操作,

对已有程序也不需要做迁移升级。代理层接收到应用程序的SQL语句调用时分析是读操作还是写操作,当是写操作,则分配到Master数据库上执行任务;若是读操作,则根据配置,当有多台Slave读数据库时,则可以使用平均公平等算法,把读操作分配到某台Slave读数据库上去执行任务,然后返回结果给应用程序。

(3)数据分库

对于一些场景,如某张表的数据量非常大,可能为几亿条记录,并且读写操作很频繁,达到每秒几千次写操作。这时,使用单一的数据库主机方式就很难达到性能要求。因此,通过按照行关键字对表进行拆分或许是一种选择。通过在代理层定义需要进行数据拆分的表和拆分规则,来屏蔽拆分方式对应用程序系统的改造,使之对应用开发人员透明。同时,对于汇总类的数据操作,可采用并行计算,即同时发送请求给所有后端被拆分的子数据库系统去执行任务,并把结果进行汇总后再返回给应用程序。一个应用程序的SQL写操作请求到达代理层时,代理层分析此SQL语句中的表是否定义了拆分规则。若有则取出拆分规则,得到相应的后端子数据库。把SQL语句发送到后端子数据库执行,并从后端子数据库得到结果返回给调用者。若此SQL语句是读操作,且没有指定规则中的行关键字字段,那么代理层将把此SQL语句发送给所有的后端子数据库(符合该表拆分规则的后端子数据库)进行并发执行,然后代理层把所有后端子数据库返回的结果进行汇总,然后再返回给调用者。

第 11章 分布式cache

第 12章 分布式计算

第 13章 Open API

第 14章 开放的SaaS平台

14.1 PaaS 299

平台即服务(Platform as a Service,PaaS)是SaaS技术发展的趋势,PaaS能给客户带来更高性能、更个性化的基础硬件和软件服务。

因此,PaaS是要将数据、API和硬件都作为基础元件,真实的开放,吸引其他角色进入平台。

14.1.1 插件模式 301

这种PaaS模式,可以进一步把支撑应用的下面几层功能,从中间件一直到数据库,还有虚拟化的OS环境,都通过网络出租出去。通过网络来进行远程开发、配置、部署,最后直接在提供Hosting服务的厂商的计算中心内运行。


插件模式.png
14.1.2 七巧板模式 303

是一种以固定的数据类型和服务模块为主的开放平台。


七巧板模式.png
14.1.3 云计算模式 304

云是指互联网。和虚拟主机不同的是,云计算通过并行使用海量服务器,提供更强大的计算能力、存储和带宽,主要表现是分布式数据库、分布式存储、分布式计算等。 310

云计算模式.png Saas与云计算的关系.png
14.1.4服务器托管模式

将不同ISP的服务,通过统一的标准和规范提供给ISV。


服务托管模式.png

14.2 互联提升价值 311

14.2.1 拓展软件的能力:聚合互联网资源 313

ISV为什么要进来?

因为它能在这里获取利益,不管是利益输入者提供的利益还是ISV通过最终用户获取的利益。

ISV如何参与进来?

一种最高效的方式是通过Open API。ISV可以通过Open API获取的数据,从而与其他应用互联。

第十五章 结束语

15.1 SaaS 发展趋势 325

1 SaaS平台化 325
所谓SaaS运营平台指的是可以支撑多种SaaS应用的,集接入、运行、推广、销售、计量、支付和维护为一身的综合环境。
2 SaaS 产业链 326
SaaS产业链的基本形态就是,SaaS软件商将SaaS应用放到SaaS运营商的平台上,而广大用户到SaaS运营平台上寻找自己所需的应用服务,SaaS运营平台成为SaaS应用的超级市场。
3 SaaS移动化 327
4 服务即软件 328

15.2 软件行业的未来 330

  1. 通过互联网使用软件的用户越来越多 330
  2. 软件和服务的界限会越来越模糊 330
  3. 软件和服务会越来越个性化 331
  4. 软件产业大融合 331

==完==

上一篇 下一篇

猜你喜欢

热点阅读