SaaS架构基础理论
《互联网时代的软件革命 SaaS架构设计》学习笔记
云计算提供的强大软硬件环境和基础服务,将逐渐成为支撑SaaS应用的基础设施。各个云计算平台所包含的大量具有自身特色的公共服务,将为SaaS应用的开发提供了丰富的资源。而统一整合各个云计算平台的公共服务,也成为了SaaS服务集成平台SIP的发展目标。未来的SaaS应用将架构在又SIP整合的多个云计算平台上。
ASP是Application Service Provider“应用服务提供商”,这种模式将用于需要的软件统一部署在应用提供商的软硬件环境中,软件运行所需的人力、物力资源都有提供商维持,而用户只需要在自己办公室使用这些软件即可。------重点在于提供有软硬件环境这样的服务,且网络带宽和软件技术上有限制,ASP用户体验不好,用户无法接受自己软件和数据交由第三方托管。
SaaS是Software as Service“软件即服务”,用户对软件的需求实际上是对应用服务的需求,而用户使用软件实际是在消费应用服务。软件的用户是服务的需求者和消费者,而软件的提供商是服务的提供者和生产者。----对于软件来说,离开软件提供商的支持和维护,很难真正用起来。
| ASP | SaaS | ||
|---|---|---|---|
| 不同点 | 看问题角度 | 站在软件开发商角度看问题,希望以一种新的新式向用户提供软件 | 站在用户角度看问题,考虑用户需要什么,搞清楚提供软件的本质是未来提供服务 |
| 不同点 | 关注目标 | 开发商只是为了解决用户硬件环境的持续维护问题,应用服务的统一托管 | 关注软件本身,是否能为用户提供有效的服务 |
| 相同点 | SaaS和ASP之间形似而神不似 |

SaaS相对传统软件,将原本由软件使用者所承担的软硬件、网络、系统维护的费用,转成支付给SaaS服务提供商的租用费用;
对SaaS服务提供商,依然需要承担相应的软硬件、网络、系统维护等费用。除了降低软件使用者的第一次一次性投入成本呢,将一次性的投入转变为时间、需求的逐步投入。

| 比较项 | 传统软件200个客户的综合成本 | SaaS软件200个客户的综合成本 |
|---|---|---|
| 软件开发成本 | 取决与客户需求的异同,以及软件可配置性的强弱 | 1个软件开发成本 |
| 服务器成本 | 200台服务器 | 10台服务器 |
| 网络设备成本 | 200套 | 5-10套 |
| IT维护人员成本 | 200人 | 2-3人 |
SaaS软件要降低企业综合使用成本最主要的手段是发挥SaaS的规模效应。
规模效应是商业模式和应用架构,一般采用多个租户共享一个运行实例的架构(Multi-Tenant,多租户架构),高性能,可配置,伸缩性。
| 可配置 | 高性能 | 可伸缩 | |
|---|---|---|---|
| Level1 | × | × | × |
| Level2 | √ | × | × |
| Level3 | √ | √ | × |
| Level4 | √ | √ | √ |
Level1:设备托管
Level2:设备共享、可配置化
Level3:多租户、数据隔离、高性能
Level4:多租户、可配置、可伸缩
软件服务提供商为每一个客户定制一套软件,并为其部署。独立数据库实例和应用服务器实例,数据库中的数据结构和应用的代码可跟进客户需求做定制化修改。

开发通用型产品,为满足不同客户的不同需求,通用性产品具有配置性,客户通过简单的配置满足自己的个性化需求。为每个客户独立部署一个运行实例,每个运行实例运行同一份代码,通过配置的不同需求满足客户的个性化需求。

多租户实例的应用架构可以有效降低SaaS应用的硬件即运行维护成本,最大化的发挥SaaS规模效应。

实现Multi-Tenant架构的关键是通过一定的策略保证不同租户间的数据隔离,确保不同租户既能共享一个应用的运行实例,又能为用户提供独立的应用体验和数据空间。
独立数据库、共享数据库独立数据结构、共享数据结构。
实现方式:
随着租户数量的逐渐增加,集中式的数据库性能就将成为整个SaaS应用的性能瓶颈,如果不进一步考虑数据库的分区设计,就只能依赖更强大的硬件设备来向上扩展。单一设备极限,导致SaaS架构无法满足低成本运营需求。
水平扩展在用户数大量增加的情况下,无需修改应用架构,仅简单增加硬件设备的数量,就可以支撑应用规模增长。

从Multi-Tenant SingleInstance系统扩展为Multi-Tenant MultiInstance。用户首先通过接入Tenant Load Balance层,再被分配到不同的Instance上,通过多个Instance来分担用户访问,实现水平扩展。
数据库实现方式:
Tenant Load Balance层会存放用户、租户、对应的Instance的映射关系,用户登录后即可通过映射关系,将用户重定向到相应的Instance。

考虑因素包括:
下一篇就多租户-高性能多租户-可配置多租户-可伸缩多租户具体实现解释

侵权请联系删除
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
(本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展 是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。 如:有三个人,每个人做的不同的事物,但是是需要协作的完成。 而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据
我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有
文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就
目录1关系运算符2运算符优先级3关系表达式的书写代码实例:下面是面试中可能遇到的问题:1关系运算符C++中有6个关系运算符,用于比较两个值的大小关系,它们分别是:运算符描述==等于!=不等于小于>大于小于等于>=大于等于这些运算符返回一个布尔值,即true或false。例如,当x等于y时,x==y的结果为true,否则结果为false。2运算符优先级在C++中,关系运算符的优先级高于赋值运算符,但低于算术运算符。以下是关系运算符的优先级,从高到低排列:运算符描述>,,>=,关系运算符==,!=相等性运算符&&逻辑与`如果在表达式中有多个运算符,则按照优先级顺序依次进行运算。3关系表达式的书写在
一.计算机组成原理 这本书利用组合逻辑、同步时序逻辑电路设计的相关知识,从逻辑门开始逐步构建运算器、存储器、数据通路和控制器,最终集成为完整的CU原型系统,使读者从设计者的角度理解计算机部件构成及运行的基本原理,掌握软硬件协同的概念。 全书共9章,主要内容包括计算机系统概述、数据信息的表示、运算方法与运算器、存储系统、指令系统、中央处理器、指令流水线、总线系统、输入输出系统。1.计算机系统概述1.1计算机发展历程 计算机是一种能够按照事先存储的程序,自动、高速、准确地对相关信息进行处理的电子设备。1946年2月,世界上第一台电子数字计算机ENIAC(ElectronicNum
“架设一个亿级高并发系统,是多数程序员、架构师的工作目标。许多的技术从业人员甚至有时会降薪去寻找这样的机会。但并不是所有人都有机会主导,甚至参与这样一个系统。今天我们用12306火车票购票这样一个业务场景来做DDD领域建模。”开篇要实现软件设计、软件开发在一个统一的思想、统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束。虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍然是必要的,为了开发一个支持DDD的框架,首先需要理解DDD的基本概念和核心的组件。一.什么是领域驱动设计(DDD)首先要知道DDD是一种开发理念,核心是维护一个反应领域概