随着大量SaaS公司进入市场,咱们看到颠覆性的软件服务以各类方式进入企业流程-从营销工具到支付系统。随着SaaS帮助优化业务流程,实现更流畅和自动化的运营,风险投资公司首先潜入池中寻找最优秀和最聪明的企业。git
github
若是您正在考虑将您的业务迁移到云端,有三个词将萦绕在你耳边:数据库
IaaS企业提供诸如即时即付存储,网络和虚拟化等服务。安全
IaaS为用户提供了基于云的内部基础架构替代方案,所以企业能够避免投资昂贵的现场资源。服务器
维护内部部署的IT基础架构既昂贵又耗费人力。网络
它一般须要在物理硬件上进行大量的初始投资,而后您可能须要聘请外部IT承包商来维护硬件并保持一切正常运行和最新。经过IaaS,您能够根据须要购买所需的产品,并随着业务的增加购买更多产品。架构
IaaS平台是:框架
高度灵活,高度可扩展。运维
可供多个用户访问。工具
性价比高。
IaaS示例: 阿里云服务器ECS, AWS EC2Google Compute Engine(GCE)。
PaaS供应商经过互联网提供硬件和软件工具,人们使用这些工具开发应用程序。PaaS用户每每是开发人员。
PaaS主要由正在构建软件或应用程序的开发人员使用。PaaS解决方案为开发人员提供了建立独特,可定制软件的平台。
这意味着开发人员在建立应用程序时无需从头开始,在编写大量代码时节省了大量时间(和金钱)。PaaS是那些想要创造独特应用程序而又不花钱或承担所有责任的企业的热门选择。
PaaS平台是:
可供多个用户访问。
可扩展 - 您能够从各类级别的资源中进行选择,以适应您的业务规模。
基于虚拟化技术。
无需普遍的系统管理知识便可轻松运行。
PaaS示例: AWS Elastic Beanstalk,Heroku,Windows Azure(主要用做PaaS)。
SaaS平台经过互联网向用户提供软件,一般每个月订阅费用。
使用SaaS,您无需在计算机(或任何计算机)上安装和运行软件应用程序。当您在线登陆账户时,一切均可经过互联网得到。您一般能够随时从任何设备访问该软件(只要有互联网链接)。使用该软件的其余人也是如此。您的全部员工都将拥有适合其访问级别的个性化登陆。
另外一个关键优点是支付结构:
大多数SaaS提供商都使用固定的包含性月度账户费用来运营订阅模式。您确切地知道软件的成本是多少,而且能够相应地进行预算,而没必要担忧隐藏的意外。
大多数订阅包括维护,合规性和安全性服务,这在使用内部部署软件时可能既耗时又昂贵。SaaS提供商还提供易于设置的开箱即用解决方案(若是您须要基本软件包),并为大型组织提供更复杂的解决方案。您能够在几小时内启动并运行基本软件 - 而且您能够在此过程当中得到客户服务和支持。
SaaS平台是:
可经过互联网得到。
由第三方提供商托管在远程服务器上。
可扩展,具备适用于小型,中型和企业级业务的不一样层。
包容性,提供安全性,合规性和维护做为成本的一部分
SaaS示例: BigCommerce,Google Apps,Salesforce,Dropbox,MailChimp,ZenDesk,DocuSign,Slack,Hubspot。
聊到PaaS,SaaS,就不得不谈到多租户。
多租户指一套系统可以支撑多个租户。一个租户一般是具备类似访问模式和权限的一组用户,典型的租户是同一个组织或者公司的若干用户。
要实现多租户,首先须要考虑的是数据层面的多租户。数据层的多租户模型对上层服务和应用的多租户实现有突出影响。本文重点介绍数据层多租户对各类多租户模型的支持。
权衡不一样的多租户实现方式时,须要考虑以下因素:
扩展性:租户数量级别,以及将来发展趋势
安全性:租户之间数据隔离级别要求
资源共享:多租户一般有某种形式的资源共享,须要避免某个租户的糟糕SQL吃掉系统资源,影响其余租户的响应时间
灵活性:不一样租户可能有不一样的需求,对特定租户需求的扩展能力
跨租户分析和优化:对所有租户或者多个租户的数据和行为进行分析的能力
运维和管理:运维管理的复杂度和便宜性,包括监控、修改数据库模式、建立索引、收集统计数据、数据加载等
成本:整体拥有成本,包括方案实现成本、运维成本等
多租户模型描述了租户和该租户的数据之间的映射关系。不一样的多租户模型会影响数据库和应用程序的设计、管理和维护。
最简单的多租户实现方式是为每个租户建立一个数据库,以下图所示。应用程序为每一个租户分配一个租户id,并为每一个租户配置相应的数据库链接信息(包括数据库ip、端口等)。应用程序根据租户id链接到为其分配的数据库。
这种模型中不一样租户的数据物理隔离,安全级别高。若是每一个租户的数据库使用不一样的硬件和数据库类型,则他们之间的资源使用也是物理隔离的;若是租户的数据库共用同一套硬件,则须要对资源进行合理分配和管理,避免相互影响。因为不一样租户使用独立的数据库,灵活性好,容易知足不一样租户的特定需求(譬如须要额外的字段)。出现故障时影响面小。缺点是数据库数量大,维护复杂,拥有成本高。适合租户数目比较少的场景。
多个租户共享同一个数据库,每一个租户拥有独立的名字空间(或模式)。应用程序为每一个租户分配一个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…
我的博客出处: