前言

随着大量SaaS公司进入市场,我们看到颠覆性的软件服务以各种方式进入企业流程-从营销工具到支付系统。随着SaaS帮助优化业务流程,实现更流畅和自动化的运营,风险投资公司首先潜入池中寻找最优秀和最聪明的企业。

从Zoom(一家提供结合了视频会议,在线会议,聊天和移动协作的通信软件)上市,阿里收购Teambition,SaaS正成为风险投资公司和创业极其有利可图的途径。为了了解SaaS,PaaS,下面将对其进行简单的概述。

如果您正在考虑将您的业务迁移到云端,有三个词将萦绕在你耳边:

IaaS(技术设施即服务)

解释

IaaS企业提供诸如即时即付存储,网络和虚拟化等服务。

IaaS为用户提供了基于云的内部基础架构替代方案,因此企业可以避免投资昂贵的现场资源。

优势

维护内部部署的IT基础架构既昂贵又耗费人力。

它通常需要在物理硬件上进行大量的初始投资,然后您可能需要聘请外部IT承包商来维护硬件并保持一切正常运行和最新。通过IaaS,您可以根据需要购买所需的产品,并随着业务的增长购买更多产品

特点

IaaS平台是:

  • 高度灵活,高度可扩展。

  • 可供多个用户访问。

  • 性价比高。

示例

IaaS示例: 阿里云服务器ECS, AWS EC2Google Compute Engine(GCE)。

PaaS(平台即服务)

解释

PaaS供应商通过互联网提供硬件和软件工具,人们使用这些工具开发应用程序。PaaS用户往往是开发人员。

优势

PaaS主要由正在构建软件或应用程序的开发人员使用。PaaS解决方案为开发人员提供了创建独特,可定制软件的平台。

这意味着开发人员在创建应用程序时无需从头开始,在编写大量代码时节省了大量时间(和金钱)。PaaS是那些想要创造独特应用程序而又不花钱或承担全部责任的企业的热门选择。

特点

PaaS平台是:

  • 可供多个用户访问。

  • 可扩展 - 您可以从各种级别的资源中进行选择,以适应您的业务规模。

  • 基于虚拟化技术。

  • 无需广泛的系统管理知识即可轻松运行。

示例

PaaS示例: AWS Elastic Beanstalk,Heroku,Windows Azure(主要用作PaaS)。

SaaS(软件即服务)

解释

SaaS平台通过互联网向用户提供软件,通常每月订阅费用。

优势

使用SaaS,您无需在计算机(或任何计算机)上安装和运行软件应用程序。当您在线登录帐户时,一切都可通过互联网获得。您通常可以随时从任何设备访问该软件(只要有互联网连接)。使用该软件的其他人也是如此。您的所有员工都将拥有适合其访问级别的个性化登录。

另一个关键优势是支付结构:

大多数SaaS提供商都使用固定的包含性月度帐户费用来运营订阅模式。您确切地知道软件的成本是多少,并且可以相应地进行预算,而不必担心隐藏的意外。

大多数订阅包括维护,合规性和安全性服务,这在使用内部部署软件时可能既耗时又昂贵。SaaS提供商还提供易于设置的开箱即用解决方案(如果您需要基本软件包),并为大型组织提供更复杂的解决方案。您可以在几小时内启动并运行基本软件 - 并且您可以在此过程中获得客户服务和支持。

特点

SaaS平台是:

  • 可通过互联网获得。

  • 由第三方提供商托管在远程服务器上。

  • 可扩展,具有适用于小型,中型和企业级业务的不同层。

  • 包容性,提供安全性,合规性和维护作为成本的一部分

示例

SaaS示例: BigCommerce,Google Apps,Salesforce,Dropbox,MailChimp,ZenDesk,DocuSign,Slack,Hubspot。

多租户

什么是多租户

聊到PaaS,SaaS,就不得不谈到多租户。

多租户指一套系统能够支撑多个租户。一个租户通常是具有相似访问模式和权限的一组用户,典型的租户是同一个组织或者公司的若干用户。

要实现多租户,首先需要考虑的是数据层面的多租户。数据层的多租户模型对上层服务和应用的多租户实现有突出影响。本文重点介绍数据层多租户对各种多租户模型的支持。

权衡不同的多租户实现方式时,需要考虑如下因素:

  • 扩展性:租户数量级别,以及未来发展趋势

  • 安全性:租户之间数据隔离级别要求

  • 资源共享:多租户通常有某种形式的资源共享,需要避免某个租户的糟糕SQL吃掉系统资源,影响其他租户的响应时间

  • 灵活性:不同租户可能有不同的需求,对特定租户需求的扩展能力

  • 跨租户分析和优化:对全部租户或者多个租户的数据和行为进行分析的能力

  • 运维和管理:运维管理的复杂度和便宜性,包括监控、修改数据库模式、创建索引、收集统计数据、数据加载等

  • 成本:总体拥有成本,包括方案实现成本、运维成本等

多租户模型

多租户模型描述了租户和该租户的数据之间的映射关系。不同的多租户模型会影响数据库和应用程序的设计、管理和维护。

一租户一数据库

最简单的多租户实现方式是为每一个租户创建一个数据库,如下图所示。应用程序为每个租户分配一个租户id,并为每个租户配置相应的数据库连接信息(包括数据库ip、端口等)。应用程序根据租户id连接到为其分配的数据库。

这种模型中不同租户的数据物理隔离,安全级别高。如果每个租户的数据库使用不同的硬件和数据库类型,则他们之间的资源使用也是物理隔离的;如果租户的数据库共用同一套硬件,则需要对资源进行合理分配和管理,避免相互影响。由于不同租户使用独立的数据库,灵活性好,容易满足不同租户的特定需求(譬如需要额外的字段)。出现故障时影响面小。缺点是数据库数量大,维护复杂,拥有成本高。适合租户数目比较少的场景。

一租户一名字空间(Schema/Namespace)

多个租户共享同一个数据库,每个租户拥有独立的名字空间(或模式)。应用程序为每个租户分配一个id,并把每个租户的所有操作限制在为其分配的名字空间/模式之中。如下图所示。

这种多租户模型下,不同租户的数据逻辑上相互隔离,安全控制相对简单。不同租户有不同的模式,可以简便的满足不同租户的特定需求,灵活性高。对资源管理能力要求高,以避免不同租户竞争资源。可以把不同租户的数据存储在不同的磁盘上,降低了对磁盘IO的竞争。运维和管理较复杂,不易实现大量租户的跨租户分析。适合租户数目适中的场景。

全共享方式

不同租户共享同一个数据库、同一个名字空间。不同租户的数据在同一组表中共存,通过租户id标记和访问不同租户的数据(应用需要调整访问数据的SQL以包含租户id)。如下图所示。

这种多租户模型中,不同租户的数据物理存储在一起,对系统的资源隔离和安全隔离要求很高。运维相对简单。扩展能力好,可以支持较多数量租户。由于租户数据存储在一起,跨租户数据分析和优化非常简单。成本低,可以较低的代价支持更多的租户。

全共享模型中,很多数据库采用添加大量自定义字段的方式满足不同租户的特定需求,以提高灵活性。这种方式有诸多局限性,譬如字段数目不能太多、管理复杂等。支持更多半结构化数据,包括JSON 等,通过这种半结构化数据,可以更灵活、高效、便捷的满足不同租户的特定需求。

案例剖析

下面我通过用一个简单的全共享数据库的多租户模式的案例,来对PaaS平台型软件进行演示。

系统账户层级如下图所示:

在上图这个系统用户的层级关系中,我们需要四张表:

  • ga_user:此表用于存储PaaS平台T1内所有的账户相关信息,如laowang@test.com,zhangshan@test.com,jingwa@test.com等账户和密码。此表用于登录平台时,系统认证和权限控制时所用。

  • tenant:用于存储所有的租户信息,如SaaS A, SaaS B,SaaS C。

  • customer:用于存储所有的客户信息,如消费客户/组织S1,消费客户/组织S2。

  • device:用于存储平台内所有客户,租户的设备相关信息。

具体流程,可以概括为:

我们用PaaS平台系统管理员帐号laowang@test.com登录系统。

在系统中,新建SaaS A, SaaS B,SaaS C三个组织或者客户,并为这三个租户分配各种租户的租户管理员账户,分别为zhangsan@test.com, lisi@test.com,wangwu@test.com。当我们用这三个账户登录系统时,系统根据租户id和相应的权限显示对应的框架内容和组织信息。

这三个组织利用PaaS平台上的服务框架和应用为需要的客户和组织提供一站式解决方案,有点类似我们采用阿里云平台上的服务框架来解决自己的企业需求。

当SaaS B具体到实施项目时,为消费客户/组织S1或消费客户/组织S2分配帐号进行公有云订阅服务,进行项目迭代交付或者本地化实施。

UML实体图如下:

版权声明: 作者:穆书伟

github出处:github.com/sanshengshu…    

个人博客出处:blog.grozacloud.com

ToB蓝海的台阶-PaaS,SaaS技术详解的更多相关文章

  1. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  2. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  3. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...

  4. 《CDN技术详解》 - CDN知多少?

    开发时间久了,就会接触到性能和并发方面的问题,如果说,在自己还是菜鸟的时候完全不用理会这种问题或者说有其他的高手去处理这类问题,那么,随着经验的丰富起来,自己必须要独立去处理了.或者,知道思路也行,毕 ...

  5. Comet技术详解:基于HTTP长连接的Web端实时通信技术

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

  6. SSE技术详解:一种全新的HTML5服务器推送事件技术

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

  7. Protocol Buffer技术详解(数据编码)

    Protocol Buffer技术详解(数据编码) 之前已经发了三篇有关Protocol Buffer的技术博客,其中第一篇介绍了Protocol Buffer的语言规范,而后两篇则分别基于C++和J ...

  8. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  9. Protocol Buffer技术详解(C++实例)

    Protocol Buffer技术详解(C++实例) 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较 ...

随机推荐

  1. Java 中遇到null 和为空的情况,使用Optional来解决。

    Java 中遇到null 和为空的情况,使用Optional来解决 示例代码: package crazy; import java.util.Optional; class Company { pr ...

  2. zxg项目准备的技术资料

    bootstrap工具大全:http://www.w3cplus.com/source/the-best-bootStrap-resources.html ubuntu-安装aptana3  http ...

  3. imgAreaSelect 中文文档

    http://www.cnblogs.com/boychenney/archive/2011/10/08/2201996.html 一.技术文档 1.介绍 ImgAreaSelect是一jQuery插 ...

  4. Install OpenCV 3.0 and Python 2.7+ on OSX

    http://www.pyimagesearch.com/2015/06/15/install-OpenCV-3-0-and-Python-2-7-on-osx/ As I mentioned las ...

  5. UE4学习心得:Scene Component蓝图的一个简单应用

    Scene Component是蓝图类中一个不怎么常用的分类(特别是对于新手而言),主要是其实现的功能可以在Actor类中用相同的方法实现,使其作用显得有点多余. 笔者在使用过这个类之后发现其作用更相 ...

  6. Java中浮点数的精度问题 【转】

    当您在计算Money的时候,请看好了!!!要不损失了别后悔!!! 现象1: public static void main(String[] args) { System.out.println(0. ...

  7. SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...

  8. Maven Scope 依赖范围

    Maven依赖范围就是用来控制依赖与这三种classpath(编译classpath.测试classpath.运行classpath)的关系,Maven有以下几种依赖范围: ·compile:编译依赖 ...

  9. QT5:C++实现基于multimedia的音乐播放器(一)

    上一篇里简略的描述了一下播放器的实现,这一篇开始具体描述一下过程. 环境配置:Qt Creator 打开Qt Creator,创建一个new project,项目名称随你喜欢(我的是MusicPlay ...

  10. 网络编程之套接字(tcp)

    经过几天高强度的学习,对套接字的编程有了初步的认识,今天对这几天所学的知识总结一下:首先简单阐述一下tcp通信: TCP提供的是可靠的,顺序的,以及不会重复的数据传输,处理流控制,由于TCP是可靠的, ...