Saas架构摘录
第一章
Saas : software as a service 软件即服务。将软件看做是一种服务,而不是一种商品。saas的基本理论认为,软件的实质是服务。用户对软件的需求实际上是对应用服务的需求。属于现代服务业【第三产业】
优势:用户方面:拿来即用;无需维护;按需使用;随处可用;风险减小(传统行业支付一次,担心后续软件厂商不能很好的服务);成本降低;先天防毒;
软件厂商:节省销售成本;节省维护成本;稳健的经营模式;
劣势:依赖互联网;数据安全性;数据保密性。
成功案例:Saleforce.com【CRM】;Google.com; Alisoft.com
其他小的公司 Xtools 800app.com 【CRM】
SaasBB 【神州数目+softbankBB共创;涉及crm,企业服务管理和办公软件管理等多方面。]除自身产品开发外,SaaSBB也开始打造 Saas运营平台】
伟库网wecoo.com【用友软件的SaaS门户】 友商网【金蝶软件】
第二章 软件成熟度模型
level1 定制开发
level2 可配置
level3 高性能的多租户架构
level4 可伸缩的多租户架构
成熟度越高,开发成本和开发技术要求也越高;所以要选择最合适的,而不是选择最好的。
第三章 构建多租户应用
文章由一个小型的crm系统举例,介绍演变过程。
第一阶段,做项目。做了一个定制开发的CRM系统。 RUP “4+1”视图模型【逻辑视图/过程视图/开发视图/物理视图+场景视图】
场景视图:也叫用例视图,描述用户的业务场景,从用户的角度识别出业务需求,它是架构设计的起点和终点;
逻辑视图:如果采用面向对象的方法,逻辑视图就是对象模型。逻辑视图重点在于功能,功能包括可见的业务功能,也包括不可见的系统功能(如日志、权限、事务等)。同时更重要的是确立逻辑分层、模块划分和模块之间的依赖关系。
开发视图:描述软件在开发环境下的静态组织。开发视图关注程序包,应用的统一框架,引用的类库、SDK和中间件,以及工程和包的划分规则等,规范、约束开发环境的结构。
过程视图:描述下系统的并发和同步设计。过程视图聚焦在进程、线程等运行时概念,以及相关的并发、同步、通信等问题。如果系统不需要考虑这些方面,本视图可以忽略。
物理视图:也叫部署视图,描述软件如何映射到硬件,反应系统在分布、部署上的设计。物理视图也需要解决最终如何安装和部署到服务器,以及网络分布的问题。
实际步骤:① 【场景视图】 目前做过的项目用visio画的用例图,属于场景视图。先最好抛开角色差异,抽象核心的业务逻辑。②【逻辑视图】画出模块结构图,和模块说明,抽象出业务实体,画出UML class图(具体到每个类的关联关系以及每个类的属性)③【开发视图】1。开发环境(开发语言、数据库、应用服务器、其他软件{编程环境工具,测试工具})2。技术框架,SSH 3。分层策略 {表现层+控制器层+业务逻辑组件层+DAO组件层+数据持久层} 4。目录结构 ④【过程视图】忽略 ⑤【物理视图】部署图。
根据这一些步骤完成了开发
第二阶段,做成产品。既然是做产品,就需要兼顾多方的共性和个性化需求。
MDA【Model Driven Architecture】,MDA利用元数据建模,可以方便灵活地实现可配置化。
第三阶段,多租户。
多租户设计,只需要在相关表上加上租户ID即可,改造起来较可配置改造要简单。
至此,是完成了level1 到 level2 到level3了。
第四章 高性能的多租户最佳实践
1,数据库层性能优化: ①建立合适的索引。(索引应该创建在条件where、排序order by、分组group by等操作所涉及的列上);索引应该有较强的选择性,即应尽可能建立在重复数据少的数据列中;如果多个条件经常需要组合起来查询,应合理使用联合索引;一次查询中只能使用一个索引,可使用相应的分析工具分析索引效果;索引不是越多越好,过多的索引可能导致CUD增删改的性能降低,并占用更多的空间。
【注意:一般经过索引的优化,整个系统的性能很快就能产生飞跃,这也是最简单的办法;但是建立了合适的索引之后,仍然有一些数据库查询不能有效利用索引,例如包含like等模糊查询。对于这一点,在互联网应用中继续使用模糊查询显然是不太现实的,要实现模糊查询,更适合的方式是搜索引擎,只是应用的复杂度会增大不少,这一点在下面的搜索引擎一节也会详细说明】 ②消除大数据表连接。 数据量指数增长的时候,多表关联查询的性能降低很快。主要有几种方案:冗余存储关联字段,可以接受不一致性或者冗余数据可以很容易被同步更新;Cache缓存;直接删除不重要的 关联字段;拆分成多次查询 ③避免复杂SQL。 不必要的大数据库表连接也消除了之后,继续跟进耗时SQL统计,解决原则:一般需要将复杂的SQL分解成多个简单的SQL执行,将复杂的运算尽量留在应用服务器层。因为一般情况下,应用服务器层的水平扩展更容易实现,而数据库层的扩展则是比较困难的。
1,应用层性能优化:① Cache,Cache如果是缓存的数据库的内容,其实也可以算作是数据库层的优化,不过怎样用好cache才更重要。一般应用在 变化相对比较少的业务数据上。常见的Cache技术:MemCached、JBoss Cache、 OSCache 、 EHCache。 不过,在使用Cache的过程中需要特别注意,Cache数据是易失的,并不宜将Cache作为一种绝对可靠的数据访问机制。为了保证系统的可靠性,一般情况下应用中还需要增加一层逻辑:当Cache中访问不到时,需要访问数据库,并重新将其载入Cache。②统计和报表计算:尽量采用后台任务定时统计的策略,再加上一些增量统计策略。③搜索功能,模糊查询是应用软件常见的需求。在开源的搜索引擎中,Lucene显然是轻量级搜索引擎的最佳选择。④ 异步操作,异步操作并没有从本质上提升系统性能或者数据吞吐量。但是,异步操作使得用户体验得到了极大的提升,同时,也能降低系统的并发负载。异步操作的两个不同层面的异步:(1)表现层的异步,一般使用Ajax技术实现。页面不刷新,而仅仅浮出一个正在发送的层,能够提升用户的体验。(2)后台业务逻辑层面的异步,则更多的会采用JMS、MQ等技术。比如,XXX中有一个类型的订单会直接采用支付宝进行结算,因此生成该订单的时候,同时需要创建一笔支付宝的交易。这个过程中涉及调用支付宝的接口,一般适合采用JMS等异步机制进行,以免由于外部系统的原因导致系统变慢甚至阻塞。
3.Web层性能优化。
1> web开发性能优化
Yahoo实践分享:网站性能优化的34条黄金法则(http://developer.yahoo.com/performance/rules.html)
1 内容类 减少HTTP请求,减少DNS查询 ,避免跳转,缓存AJAX,延迟加载,提前加载,减少DOM元素数量,用域名划分页面内容,减少frame,避免404错误; 2 服务器与Cache类 使用CDN,为文件头制定Expires 或者 Cache-Control,GZip压缩网页,配置实体标签,尽早刷新输出缓冲,使用Get完成AJAX,减小Cookie体积,对于页面内容使用无Cookie域名; 3 Javascript、css图片类 把脚本放在页面底部,使用外部js和css,削减js和 css,剔除重复脚本,减少DOM访问,开发智能事件处理程序,把样式表放在顶部,避免使用css表达式,用<link> 代替 @import ,避免使用滤镜,优化图像,优化Css sprites,不要再HTML中缩放图像,favicon.ico要小而且可缓存。4 移动应用类 保持单个内容小于25KB,打包组件成复合文本。
2>HTTP服务器性能优化,优化Apache配置,性能监控等
第五章 多租户应用的可配置。
这一章内容较为复杂,可以参考MDA,元数据的思想。
第六章 可伸缩的Saas应用架构
可伸缩: Scalable,实际上更接近 可扩展,但是可扩展容易被误解成功能上。
应用服务器层的水平扩展:负载均衡 apache nginx等,解决session在多台机器上的同步问题:主要使用memcached 作为集中式 session服务器。并且memcached 本身还具有水平扩展能力。
数据库层的水平扩展:垂直切分,将不同模块分到不同的物理数据库中;读写分离;水平切分。当然要注意,数据库连接是一种较为稀缺的资源,如果应用服务器和数据库层分别实现了水平扩展的话,由于其彼此之间没有任何对应关系的话,导致所有的应用服务器要与所有的数据库服务器关联(以m台应用服务器和n台数据库服务器为例,他们之间的关联就有m*n个)。这很容易导致数据库连接过多,性能严重下降。
所以,应该将水平扩展的应用服务器跟数据库分别对应起来,这样部署才是最优的。
第七章 Saas系统安全
身份认证 权限管理 日志记录 应用监控
加密部分:
加密算法:不可逆加密(MD5);可逆加密:对称加密(AES) 和 公开密钥加密 (RSA)。如果不需要解密,如密码,则采用MD5,否则采用对称加密,因为公开密钥加密的计算强度会更高,计算时间更长,将近2~3个数量级的差别。从系统性能角度考虑,建议采用对称式加密。
剩下部分章节:
离线应用:google的离线应用开发工具:Google Gears
云计算:基于互联网的软件系统需要承担海量的数据、文件、数据库里的数据等等。这就必然需要可扩充的、廉价的、可靠的和高性能的网络硬盘来提供图片、视频、博客等文件的存储。还需要可扩充的、廉价的、可靠的和高性能的分布式数据库系统来提供业务数据的存放和获取,以及高速的海量内存Cache系统来对部分数据进行缓存,以减少业务系统的响应时间。
分布式文件存储:传统大文件存储采用DAS/NAS/SAN架构,但是成本高。目前新的分布式存储架构有GFS与Hadoop的 HDFS。这两者是对于大文件的,小文件的话,可以采用ADFS。
分布式数据库:分为三类,基于列的结构化分布式数据库【Google的 Bgitable、Apache的 HBase】、基于代理的分布式数据库【优势:可以解决数据库连接数问题、读写分离、数据分库,目前实现了以上几个功能的代理数据库,属于开源的数据库代理中间件有PGPool-II ,但是它工作在PostgreSQL上 】、分布式关系数据库。
分布式Cache
分布式计算,MapReduce 分布式计算框架
OpenAPI。
实现技术 SOAP,REST 。目前SOAP对于异构环境服务发布和调用,以及厂商的支持都已经达到了较为成熟的情况,发展更早,支持的更多,而Rest 通用性不如soap,但性能更高。
阿里软件平台关闭----SaaS的穷途末路?
阿里软件互联平台与2010年3月2日就关闭了。那时候我才入职过了一天。现在都已经过了四年多了。
SaaS 软件即服务
Paas 平台即服务
Haas 硬件即服务 hardware as a service
云计算是指用虚拟技术建造的数据中心或“超级计算机”,并以免费或按需租用方式把计算和存储资源提供给软件开发者,同时提供的还有软件运行时的应用容器环境。