1、SAAS架构设计学习笔记架构设计学习笔记第第1章章 SAAS的前世今生的前世今生软件是什么软件是什么l在计算机诞生初期,软件大多数与机器融为一体的,计算机就是软件。l单独提供程序的业务被分离出来,有专门的人或公司来编写程序,软件就是一种产品。l将用户需要的软件统一布署在应用提供商的软件硬件环境中,产生了ASP(Application Service Provider)l软件不应该仅仅是提供应用托管,应该服务化,产生了SAAS。第第1章章 SAAS的前世今生的前世今生SAAS基本概念基本概念lSAAS(Software as a Service)lSAAS商业模式理论的提出,将软件从基于生产制造
2、的第二产业,转变为基于服务的第三产业。lSAAS与ASP的区别:ASP已经有了为用户提供服务的初步想法,只是关注的重点在于提供软硬件环境这样的服务,而不是软件本身。第第1章章 SAAS的前世今生的前世今生SAAS的优势的优势l从用户方面看,SAAS的优势是拿来即用,无须维护,按需使用,随处可用,风险减小、顾本降低、安全性高;l从软件商方面看,SAAS的优势是节省销售成本、节省维护成本、稳健经营模式第第1章章 SAAS的前世今生的前世今生SAAS的缺点及解决办法的缺点及解决办法l依赖互联网互联网已经成为信息时代社会必不可少的基础设施,SAAS软件依赖互联网已经不是什么问题。l数据安全性SAAS软
3、件商必须提供高可靠性的数据存储环境。l数据保密性一是影响和改变用户的观念二是加强SAAS软件商自身的信用建设。第第2章章 SAAS成熟度模型成熟度模型SAAS的成熟度模型分级的成熟度模型分级可配置高性能可伸缩Level1定制开发Level2可配置Level3Level4第第2章章 SAAS成熟度模型成熟度模型SAAS的成熟度模型分级的成熟度模型分级lLevel1定制开发:有一个客户项目,就按客户需求定制一个版本,每个客户的软件都有一份独立的代码,不同客户软件之间可以共享和重用的只有少量的可重用组件、库以及开发人员的经验lLevel2可配置:客户可以通过简单的配置,让通用型的软件能够满足自己的一
4、些个性经需求。为每个客户独立部署一个运行实例,只不过每个运行实例运行的是同一份代码。第第2章章 SAAS成熟度模型成熟度模型SAAS的成熟度模型分级的成熟度模型分级lLevel3高性能的多租户架构:多租户单实例的应用架构才是通常真正意义上的SAAS应用架构,也就是我们通常所说的Multi-Tenant架构。lLevel4可伸缩性的多租户架构:在用户数大量增长情况下,无须更改架构,而仅通过硬件设备的增加,支撑应用规模的增长。第第2章章 SAAS成熟度模型成熟度模型SAAS的成熟度模型渐进步骤的成熟度模型渐进步骤l实现多租户l实现多租户架构下的高性能l实现可配置l实现伸缩性项目产品多租户高性能的多
5、租户可配置的多租户可伸缩的多租户第第3章章 构建构建Multi-Tenant应用应用SAAS多租户模式下数据隔离方案多租户模式下数据隔离方案模式隔离级别共享级别安全级别成本独立数据库高低高高共享数据库、隔离表架构中中中中共享数据库、共享 表、隔离数据架构低高低低第第3章章 构建构建Multi-Tenant应用应用SAAS多租户设计多租户设计l改造成SAAS多租户的重点在于租户管理和数据隔离第第4章章 高性能的高性能的Multi-Tenant实践实践数据库层性能优化数据库层性能优化l建立合适的索引l消除大数据表连接:冗余字段l避免复杂SQLl一般情况下,应用服务器层的水平扩展更容易实现,而数据库
6、层的扩展则比较困难。第第4章章 高性能的高性能的Multi-Tenant实践实践应用层性能优化应用层性能优化lCache使用适当的Cache是提升性能的重要措施;MemCache是由Danga Interactive开发的高性能、分布式的内存对象缓存系统。使用Cache的应用应该具备如下特征(1)需要Cache的数据应该是读多写少的;(2)Cache是易失的,还需要增加一层逻辑,当Cache访问不到时,需要访问数据库,并重新将其载入Cache.第第4章章 高性能的高性能的Multi-Tenant实践实践应用层性能优化应用层性能优化l基于Tenant的索引搜索最简单是使用数据库本身的like;
7、在开源的搜索引擎中,Lucene显然是轻量级搜索引擎的最佳选择。l统计和报表计算在报表计算是针对历史数据,且历史数据不允许修改情况下,可以采用后台任务定时统计策略。第第4章章 高性能的高性能的Multi-Tenant实践实践应用层性能优化应用层性能优化l异步操作l有两个不同层面的异步:l表现层异步,一般用Ajax技术来实现;l后台业务逻辑层异步,更多采用JMS、MQ技术实现第第5章章 Multi-Tenant应用的可配置性应用的可配置性数据配置方案数据配置方案l定制字段根据客户的需求在数据表上增加相应的定制字段来保存扩展数据。对于SAAS应用来说,定制的字段多如牛毛,显示不是解决SAAS应用下
8、数据可配置的理想方案。CustomID TenantIDNameExtStrExtInt11240Joy第第5章章 Multi-Tenant应用的可配置性应用的可配置性数据配置方案数据配置方案l预分配字段将所有扩展数据转换成字符串进行存储,对于租户用各字段保存的真实数据类型,由租户配置并作为配置元数据进行管理。系统可以根据元数据配置信息转换成真实的数据类型。CustomID TenantIDExt1 Ext2 Ext311240ConfigID TenantID Table Column DataType Content2040customExt1intSalary第第5章章 Multi-Te
9、nant应用的可配置性应用的可配置性数据配置方案数据配置方案l名值对称可以将扩展数据的保存与原数据表分离,用一张统一的扩展数据表来保存。ExtID TableDataID ConfigID ExtValue1002 custom 112203000ConfigID TenantIDTableContentDataType2040custom SalaryintidTenantIDName112 40Joy第第5章章 Multi-Tenant应用的可配置性应用的可配置性功能配置方案功能配置方案l功能分解:每个功能都是有价值的,每个功能都是不可再分的,功能间不相互重叠,功能间不循环依赖,整个系统是
10、完整的。l功能定义及依赖:所谓功能依赖是指一个功能在没有另外功能情况下不能使用。l功能包设计:根据用户的类型和系统的业务逻辑,综合考虑用户的使用场景和使用习惯,将原子功能进行组合成功能包。l销售包设计:功能包不能完全的独立使用,还需要按不同的商业意图构造适宜于用户使用的销售包。l功能使用校验:在原子功能使用前,对当前用户是否可以使用该原子功能进行校验。第第5章章 Multi-Tenant应用的可配置性应用的可配置性界面配置方案界面配置方案l系统菜单可配置:一个租户一套菜单、一个菜单关联一个原子功能、组织成树状结构、同级菜单之间存在顺序问题;l页面元素可配置。第第6章章 可伸缩的可伸缩的SAAS
11、应用架构应用架构伸缩性(伸缩性(Scalable)的概念)的概念lScalable有时被翻译成“可扩展”,容易被误解为功能可扩展,实际上Scalable更多强调性能、容量方面可扩展;lScalable伸缩性要求:系统规模/容量小时,系统可缩小,大时可增加,而不需要更改系统整体架构,最理想状态是随着用户数的增加,系统架构不用做调整,而仅需要增加/增强硬件设备。l可伸缩的最简单方式就是Scale up,译为垂直扩展,也就是增强硬件设备,例如一个普通Server不行,换成小型机。此种扩展面临高成本问题。l通常强调的应用架构可伸缩,一般是指Scale out,即水平扩展,例如Google搜索引擎是由数
12、千数万台普通PC Server构建的。第第6章章 可伸缩的可伸缩的SAAS应用架构应用架构应用服务器层的水平扩展应用服务器层的水平扩展l应用服务器层的负载均衡,是实现应用服务器层水平扩展的最主要手段。具体策略有:1、基于硬件负载均衡设备实现负载均衡,如F5设备。2、基于软件的方式实现负载均衡,例如我们通过配置WebLogic Server集群(Cluster)可以实现服务网络的负载均衡、失败转移.第第6章章 可伸缩的可伸缩的SAAS应用架构应用架构基于软件的方式实现负载均衡基于软件的方式实现负载均衡我们通过配置WebLogic Server集群(Cluster)可以实现服务网络的负载均衡、失败
13、转移功能:lWebLogic集群用一台 WebLogic Server 做Http Proxy Server,将负载分配到集群中所有的实例,实现负载均衡。lWebLogic集群用一台WebLogic Server作为 Administrator Server,这台Administrator Server不处理请求,专门做管理。lWebLogic 集群中Managed Server之间通过Scoket通讯,集群的所有Server位于同一网段中。l失败转移与Session复制。lWebLogic Server通过 Session 复制在失败转移的时候保存用户数据,默认支持3种复制方式,In Mem
14、ory、Database、File,我们采用 In Memory的方式。第第6章章 可伸缩的可伸缩的SAAS应用架构应用架构数据库层的水平扩展数据库层的水平扩展l相对于应用服务器层的水平扩展,数据库层的水平扩展更难实现。l实现数据库层的水平扩展有多种方式:1、数据库的垂直切分:将不同的功能模块所涉及到的表划分表不同的物理数据库中,从而将对这些表的访问压力分担到不同物理数据库;2、数据库的读/写分离:同一数据库在多个物理服务器上具有多份Copy,彼此同步,写操作都统一到一个主服务器上,读操作则分担到多台从服务器上;3、数据库的水平切分:将原来存储在一个数据表中的数据,按一定规则切分到不同物理数据
15、库中,每个数据库结构相同,数据不相同。第第6章章 可伸缩的可伸缩的SAAS应用架构应用架构数据库的垂直切分数据库的垂直切分l对于大部分应用而言,除非模块间关联很少,实现重直切分很难:1、原来可能存在的表关联需要去除;2、同一个数据库的事务操作,可能需要跨库。结论:垂直切分可以适当采用,但很难广泛使用。第第6章章 可伸缩的可伸缩的SAAS应用架构应用架构数据库的读数据库的读/写分离写分离l对于读多写少的互联网应用,会广泛采用数据分离技术。例如MySQL的Replication技术。l从数据库也不是越多越好,从数据库服务器过多分造成主数据库服务器同步性能下降。读写比例为4:1,主从数据库服务器比例
16、也为4:1较好。l当应用的性能瓶颈出现在写操作上时,读/写分离技术对伸缩性的提升就非常有限了。第第6章章 可伸缩的可伸缩的SAAS应用架构应用架构数据库的水平切分数据库的水平切分l可以每10000个租户共享一个数据库,再增加10000个租户则增加一个数据库。l水平切分对于大部分SAAS应用都适用,因为SAAS的不同租户之间业务上没有任何联系。l架构改造:1、租户和用户数据必须位于一个集中式的数据库中。2、建立租户对应到哪个数据库的映射。第第6章章 可伸缩的可伸缩的SAAS应用架构应用架构应用服务器层和数据库层的关联应用服务器层和数据库层的关联l所有的应用服务器不应该是完全平等的,应该在数据库服务器对应,也就是说,不同的租户可能不仅是不同的数据库,也对应不同的应用服务器。第第7章章SAAS系统安全系统安全应用安全应用安全l未完待续