一、云计算的三种服务模式
云计算是一种新的计算资源使用模式,云端本身还是 IT 系统,所以逻辑上同样可以划分为这四层。底三层可以再划分出很多“小块”并出租出去,这有点像立体停车房,按车位大小和停车时间长短收取停车费。因此,云服务提供商出租计算资源有 3 种模式,满足云服务消费者的不同需求,分别是 IaaS、PaaS、SaaS,如图 1 所示。
图 1 云计算的 3 种服务模式
二、SaaS
Software as a Service:软件即服务。SaaS是一种通过Internet提供软件的模式,用户不用再购买软件,而改用向提供商租用基于web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件。
简单的说。就是软件部署在云端,让用户通过因特 来使用它,即云服务提供商把 IT 系统的应用软件层作为服务出租出去,而消费者可以使用任何云终端设备接入计算机 络,然后通过 页浏览器或者编程接口使用云端的软件。这进一步降低了租户的技术门槛,应用软件也无须自己安装了,而是直接使用软件。
SaaS提供商为企业搭建信息化所需要的所有 络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务。
SaaS 是软件的开发、管理、部署都交给第三方,不需要关心技术问题,可以拿来即用。普通用户接触到的互联 服务,几乎都是 SaaS。
SaaS 云服务提供商这时有 3 种选择:
- 租用别人的 IaaS 云服务,自己再搭建和管理平台软件层和应用软件层。
- 租用别人的 PaaS 云服务,自己再部署和管理应用软件层。
- 自己搭建和管理基础设施层、平台软件层和应用软件层。
总之,从云服务消费者的角度来看,SaaS 云服务提供商负责 IT 系统的底三层(基础设施层、平台软件层和应用软件层),也就是整个 T 层,最后直接把应用软件出租出去。图 2 所示是 SaaS 云服务供/需双方的动态交互示意图。
适合做 SaaS 的应用软件有的几个特点:
1)复杂
软件庞大、安装复杂、使用复杂、运维复杂,单独购买价格昂贵,如 ERP、CRM 系统及可靠性工程软件等。
2)主要面向企业用户
3)模块化结构
按功能划分成模块,租户需要什么功能就租赁什么模块,也便于按模块计费,如 ERP 系统划分为订单、采购、库存、生产、财物等模块。
4)多租户
能适合多个企业中的多个用户同时操作,也就是说,使用同一个软件的租户之间互不干扰。租户一般指单位组织,一个租户包含多个用户。
5)多币种、多语言、多时区支持
这一点对于公共云尤其明显,因为其消费者来自五湖四海。
6)非强交互性软件
如果 络延时过大,那么强交互性软件作为 SaaS 对外出租就不太合适,会大大降低用户的体验度,除非改造成弱交互性软件或者批量输入/输出软件。
如微软的 Office 365 和谷歌的在线办公等——通过浏览器运行远程 SaaS 办公软件,本质上就是 I/O 本地化,而浏览器与云端之间批量化传输(单击“保存”按钮或者浏览器定时保存)。
软件的云化就是对传统应用软件进行改造,使之满足(3)、(4)、(5)三个特点。
这里要着重介绍一下特点“(4)多租户”,即允许多个租户同时使用软件而互不影响,因此多租户的第一个要求就是软件支持多个用户登录,用户一般为非系统管理账户(如不是操作系统用户或者数据库用户),且保存在数据库的业务表中。
在《软件的概念》教程中已经讲过,软件就是由程序员写的让 CPU 来完成某项任务的步骤,包括输入/输出步骤和计算步骤,只有输入/输出步骤与多租户的特点相关。
如张三的输入/输出就是张三的,绝对不允许“窜”到李四那边去,反之亦然。这里重点关注的是硬盘文件作为输入/输出设备的情景,因此多租户的第二个要求就是用户身份信息必须作为数据记录的检索字段之一,这样用户之间的数据才可以实现隔离。
数据记录包括软件的配置信息和业务数据,配置信息指租户选择的语言、设置的时区、指定的币种、定义的面板参数等;而业务数据就是日常业务处理产生的数据,一般保存在数据库中,而数据库保存在云端的存储中。在具体设计隔离方案时,需要综合考虑隔离效果和资源使用效率,如图所示。
注重隔离效果
注重资源使用效率
适合云化并以 SaaS 模式交付给用户的软件
1)企事业单位的业务处理类软件
这类软件一般被单位组织用来处理提供商、员工、投资者和客户相关的业务,如开具发票、资金转账、库存管理及客户关系管理等。
2)协同工作类软件
这类软件用于团队人员一起工作,团队成员可能都是单位组织内部的员工,也可能包含外部的人员。例如日历系统、邮件系统、屏幕分享工具、协作文档创作、会议管理及在线游戏。
3)办公类软件
4)软件工具类
这类软件用来解决安全性或兼容性问题,以及在线软件开发,如文档转换工具、安全扫描和分析工具、合规性检查工具及线上 页开发等。
随着因特 进一步延伸到世界各地,带宽和 速进一步改善,以及云服务提供商通过近距离部署分支云端,从而进一步降低 络延时,可以预计,能够云化的软件种类将越来越多。但是无论如何,下面三类软件不适合作为公共 SaaS 云服务出租。
不适合作为公共 SaaS 云服务出租的软件
1)实时处理软件
比如飞行控制系统、工厂作业机器人控制等,这类软件要求任务完成时间非常精准(甚至达到微秒级)。假如云化,单单横亘在 SaaS 云端与消费者之间的 络延时就是一个难以承受的不可控因素,更不要说其他因素了。
2)时时产生并处理大量消费者数据的软件
诸如视频监控、环境信息收集处理等时时产生并要处理大规模的数据信息(可能每秒达 GB 级)的软件,在目前和未来几年内的因特 宽带条件下,不适合云化,因为如此大规模的数据很难实时传输到 SaaS 云端进行处理。
3)关键软件
这类软件如果运行异常,将会导致人员伤亡或者重大财产损失。为了提高这类软件的可靠性,最主要的方法是降低软件的复杂度——软件本身的复杂度和运行环境的复杂度,因为越简单就越可靠。而 SaaS 云服务环境包含着复杂的软/硬件栈(9 层的 IT 系统),以及不可预测的 络带宽、延时、丢包因素,绝对不合适云化此类关键软件并以公共 SaaS 云服务模式交付给用户使用。
针对私有云或者 区云,如果云端就在本地,且消费者通过局域 接入云端,那么上面三类软件也可以 SaaS 模式部署。
与传统的软件运行模式相比,SaaS 模式具有的优点:
1)云终端少量安装或不用安装软件
直接通过浏览器访问云端 SaaS 软件,非常方便且具备很好的交互体验,消费者使用的终端设备上无须额外安装客户端软件。
配置信息和业务数据没有存放在云终端里,所以不管用户何时何地使用何种终端操作云端的软件,都能看到一样的软件配置偏好和一致的业务数据。云终端成了无状态设备。
2)有效使用软件许可证
软件许可证费用能大幅度降低,因为用户只用一个许可证就可以在不同的时间登录不同的计算机;而在非 SaaS 模式下,必须为不同的计算机购买不同的许可证(即使计算机没被使用)——过度配置许可证现象。
另外,专门为保护软件产权而购置的证书管理服务器也不用买了,因为在 SaaS 模式下,软件只运行在云端,软件开发公司只跟云服务提供商打交道并进行软件买卖结算即可。
3)数据安全性得到提高
对于公共云和云端托管别处的其他云来说,意味着 SaaS 型软件操纵的数据信息存储在云端的服务器中,云服务提供商也许把数据打散并把多份数据副本存储在多个服务器中,以便提高数据的完整性,但是从消费者的视角看,数据被集中存放和管理。
以上那么做有一个明显的好处,那就是云服务提供商能提供专家管理团队和专业级的管理技术和设备,如合规性检查、安全扫描、异地备份和灾难恢复,甚至是建立跨城市双活数据中心。当今大的云服务提供商能够使数据安全性和应用软件可用性达到 4 个“9”的级别。
对于云端就在本地的私有云和 区云来说,好处类似于公共云,但是抗风险能力要差一些,除非对大的意外事件提前做好预案,如为应对天灾(地震、洪水等)人祸(火灾等),建立异地灾备中心。另外,无处不在的 络接入,使人们再也不用复制数据并随身携带,从而避免数据介质丢失或者被盗。数据集中存放和管理还有利于人们分享数据信息。
4)有利于消费者摆脱 IT 运维的技术泥潭而专注于自己的核心业务
SaaS 云服务消费者只要租赁软件即可,而无须担心底层(基础设施层、平台软件层和应用软件层)的管理和运维。
5)消费者能节约大量前期投资
消费者不用装修机房,不用建设计算机 络,不用购买服务器,也不用购买和安装各种操作系统和应用软件,这样就能节省成百上千万元的资金。
众所周知,在非云计算模式下,这些巨额的前期投资在一到两年的时间内是不会产生任何效益的,因为一个中等规模的 IT 系统建设工期就要几年的时间——包括机房选址和装修, 络设备采购和综合布线,机器设备采购、安装和调试,软件部署、测试和转产上线等。
但是 SaaS 云服务也给人们带来了新的挑战,如完全依赖 络、跨因特 对安全防范措施要求更高、云端之间的数据移植性不够好、租户隔离和资源使用效率二者之间需要综合平衡考虑(详见教程后面章节“租户隔离”的相关内容)等。
SaaS 云服务的实际应用
1)电子邮件和在线办公软件
用于处理邮件、文字排版、电子表格和演示文档的应用软件,如谷歌邮箱(http://mail.google.com)、 易邮箱(http://mail.163.com/)、微软 Office 365 在线办公、谷歌在线文档(https://docs.google.com)等。
2)计费开票软件
用于处理客户有关使用和订阅产品及服务所产生的账单。
3)客户关系管理系统(CRM)
功能涵盖从客户呼叫中心到销售自动化的各种应用程序。
4)协作工具
这种软件能促进企业内部或者跨企业的团队中的成员协同合作。
5)内容管理系统(CMS)
用于管理数字内容,包括文本、图形图像、Web页面、业务文档、数据库表单、视频、声音、XML文件等,引入版本控制、权限管理、生命周期等。
6)财务软件。
7)人力资源管理系统。
8)销售工具。
9) 交 络:如微信、WhatsApp、LINE 等。
10)企业资源计划(ERP)。
11)谷歌在线翻译。
比喻:服务商准备齐全一桌满汉全席,你只需要考虑想要谁光临即可。
对于许多企业来说,SaaS是采用先进技术很好的途径,它消除了企业购买、构建和维护基础设施和应用程序的需要,通过互联 即可使用信息系统。
SaaS已成为软件产业的一个重要力量,只要SaaS的品质和可信度能继续得到保证,它的热度就不会消退。所有规模的企业都可以从SaaS中获利。
近年来,SaaS的兴起已经给传统套装软件厂商带来不小的压力。
三、PaaS
Platform-as-a-Service:平台即服务。PaaS 实际上是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户,因此,PaaS也是SaaS模式的一种应用。
大多数PaaS厂商都拥有SaaS产品设计开发和运营能力,经由PaaS搭建出来的企业应用拥有较高的终端用户体验。
相比于 IaaS 云服务提供商,PaaS 云服务提供商要做的事情增加了,他们需要准备机房、布好 络、购买设备、安装操作系统、数据库和中间件,即把基础设施层和平台软件层都搭建好,然后在平台软件层上划分“小块”(习惯称之为容器)并对外出租。
PaaS 云服务提供商也可以从其他 IaaS 云服务提供商那里租赁计算资源,然后自己部署平台软件层。另外,为了让消费者能直接在云端开发调试程序,PaaS 云服务提供商还得安装各种开发调试工具。相反,租户要做的事情相比 IaaS 要少很多,租户只要开发和调试软件或者安装、配置和使用应用软件即可。PaaS 云服务的消费者主要包括以下人员。
- 程序开发人员:写代码、编译、调试、运行、部署、代码版本控制等,一揽子解决。
- 程序测试人员。
- 软件部署人员:把软件部署到 PaaS 云端,便于管理不同版本之间的冲突。
- 应用软件管理员:便于配置、调优和监视程序运行性能。
- 应用程序最终用户:这时 PaaS 云服务相当于 SaaS 云服务。
PaaS 云服务的费用计算一般根据租户中的用户数量、用户类型(如开发员、最终用户等)、资源消耗量及租期等因素计算。下图所示描绘了 PaaS 云服务供/需双方的动态交互情况。
云服务提供商拥有一个应用软件库(图 1 中“A,B,C,…”代表库中的应用软件)、开发工具集(如编程语言、IDE、调试工具等)和软件执行资源池(图 1 中“exr1,exr2,…”代表资源),消费者通过 络远程租赁软件执行资源并运行相关的应用软件,或者使用各种开发工具。
软件执行资源有“可用”和“占用”两个状态,同一个资源不能同时运行多个程序。软件执行资源可能是物理机、虚拟机、容器或者一个正在运行的服务程序(响应消费者的请求,启动虚拟机或容器,甚至是租赁其他云端的计算资源)。
图 2A 中,用户 C1 申请了两个资源:exr1 和 exr2,并运行 B、C 两个程序。
图 2B 中,新来了一个程序开发员,他正在使用开发工具开发程序。
图 2C 中,程序开发员开发完成并部署了一个新程序 D。
图 2D 中,一个管理员发布了程序 D,然后新来的用户申请资源 exr3 并执行程序 D。
PaaS 云服务供/需交互还有很多情景,这里不再一一列出。
比如我们要安装和使用 OpenERP 软件,这个应用软件要用到 PostgreSQL 数据库和 Python 语言,那么只需要租赁一个 PaaS 型容器并在里面安装 OpenERP 即可,但这个容器必须支持 PostgreSQL 数据库和 Python 语言,让租户无须再去安装和配置它们。
同样,我们可以租赁一个支持 PHP 语言和 MySQL 数据库的 PaaS 容器,然后采用 WordPress 开源建站工具,只需几步,就可以搭建一个个人博客 站。应用软件数不胜数,支撑它们的语言、数据库、中间件和运行库可能都不一样。
PaaS 云服务提供商不可能安装全部的语言、数据库、中间件和运行库来支持所有的应用软件,因此目前普遍的做法是安装主流的语言、数据库、中间件和运行库,使得出租的 PaaS 容器支持有限的、使用量排名靠前的应用软件以及支持最流行的编程语言,并在 站上发布公告。当然,云服务提供商也鼓励租户直接开发支持 PaaS 的应用软件,每家云服务提供商都想尽可能地黏住更多的用户,这无可厚非。
不知道你有没有遭遇过这样的痛苦:企图安装一个要用的软件,结果 “没有找到 XXX 中间件”的错误,于是急忙找来相关资料安装需要的中间件,但又 错:“此中间件需要 YYY 数据库的支持”,那么只好安装数据库,却再次 错:“此数据库需要 ZZZ 运行库”,于是又去安装相应的运行库,但 错又出现了……最后你怒了:我不用这个应用软件总可以了吧你的计算机中已经安装了一大堆用不上的软件,硬盘快满了,于是又不得不去一个一个地卸载,卸载时又不断跳出调查表,询问你卸载的原因:是软件不够好吗售后服务跟不上吗响计算机速度吗……安装过 Linux 操作系统的人估计都会有这样的痛苦经历。
PaaS 的优势就是解决应用软件依赖的运行环境(如中间件、数据库、运行库等),其所依赖的软件全部由云服务提供商安装,所以当租户安装应用软件时,就不会再出现连续 错的情况。应用软件就像歌唱家,当其唱歌表演时需要一个舞台,这个舞台就是由基础设施层和平台软件层堆叠起来的。
前面讲过,平台软件层包括操作系统、数据库、中间件和运行库四部分,但并不是说在具体搭建平台软件层时一定要安装和配置这四部分软件,需要哪部分以及安装什么种类的平台软件要根据应用软件来定。比如一家只针对 PHP 语言开发(应用软件用 PHP 编写)的 PaaS 云服务提供商,就没必要安装类似 Tomcat 的中间件了。根据平台软件层中安装的软件种类多少,PaaS 又分为两种类型。
1)半平台 PaaS
平台软件层中只安装了操作系统,其他的留给租户自己解决。最为流行的半平台 PaaS 应用是开启操作系统的多用户模式,为每个租户创建一个系统账 ,并对他们做权限控制和计算资源配额管制。半平台 PaaS 更关注租户的类型,如研发型、文秘型等,针对不同类型的租户做不同的权限和资源配置。
Linux 操作系统的多用户模式和 Windows 操作系统的终端服务都属于半平台 PaaS,私有办公云多采用半平台 PaaS。
2)全平台 PaaS
全平台 PaaS 安装了应用软件依赖的全部平台软件(操作系统、数据库、中间件、运行库)。不同于半平台 PaaS,全平台 PaaS 是针对应用软件来做资源配额和权限控制的,尽管最终还需要通过账 实现。公共云多采用全平台 PaaS。
相对于 IaaS 云服务,PaaS 云服务消费者的灵活性降低了,租户不能自己安装平台软件,只能在有限的范围内选择。但优点也很明显,租户从高深烦琐的 IT 技术中解放出来,专注于应用和自己的核心业务。
下面是一些 PaaS 云服务的实际应用。
- 商业智能(BI):用于创建仪表盘、 表系统、数据分析等应用程序的平台。
- 数据库:提供关系型数据库或者非关系型数据库服务。
- 开发和测试平台。
- 软件集成平台。
- 应用软件部署:提供应用软件部署的依赖环境。
比喻:PaaS相当于服务商备好了锅底,想吃什么自己煮。
部分厂商将工作流引擎结合在一起,不仅能够管理业务数据,还能够驱动自动化业务流程(比如Workfine零代码数据管理平台)。
开发者只需要关注自己的业务逻辑,不需要关注底层。
PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。极大降低了个人与企业使用软件的门槛,更好的帮助生产,实现货真价实的利润增长。
四、IaaS
Infrastructure as a Service:基础设施即服务,即把 IT 系统的基础设施层作为服务出租出去。
IaaS把计算基础(服务器、 络技术、存储和数据中心空间)作为一项服务提供给客户,IaaS 是云服务的最底层,主要提供一些基础资源。
普通用户不用自己构建一个数据中心等硬件设施,而是通过租用的方式,利用 Internet从IaaS服务提供商获得计算机基础设施服务,由云服务提供商把 IT 系统的基础设施建设好,并对计算设备进行池化,然后直接对外出租硬件服务器、虚拟主机、存储或 络设施(负载均衡器、防火墙、公 IP地址及诸如 DNS 等基础服务)等。
云服务提供商负责管理机房基础设施、计算机 络、磁盘柜、服务器和虚拟机,租户自己安装和管理操作系统、数据库、中间件、应用软件和数据信息,所以 IaaS 云服务的消费者一般是掌握一定技术的系统管理员
在这种服务模型中,服务商提供所有计算基础设施,包括处理CPU、内存、存储、 络和其它基本的计算资源,比如一定时间内消耗的 络带宽,公 IP 地址数量及一些其他需要的增值服务(如监控、自动伸缩等)等,收取一定的维护费。
在使用模式上,IaaS与传统的主机托管有相似之处,但是在服务的灵活性、扩展性和成本等方面IaaS具有很强的优势。
出租的物理服务器和虚拟机统称为主机,云服务提供商如何对外出租主机呢者是租户如何使用这些租来的主机呢对于租户来说,这些主机不在现场而在“远方”,租赁之后并不是把这些主机从云端搬到租户的办公室来使用。
出租前后主机的物理位置并没有改变,租户仍然是通过 络使用这些云端主机。租户登录云服务提供商的 站,填写并提交主机配置(如需要多少个 CPU、多少内存、多少 络带宽等)表后付款,然后云服务提供商向租户颁发账 和密码,最后租户以此账 和密码登录云端的自助 站。
在这里,租户可以管理自己的主机:启动和关闭机器、安装操作系统、安装和配置数据库、安装应用软件等。其实只有启动机器和安装操作系统必须要在自助 站上完成,其他操作可以直接登录到已经安装了操作系统并配置好 卡的主机中完成。
对于租来的主机,租户只关心计算资源(CPU、内存、硬盘)的容量是否与租赁合同上标注的一致,就像租赁同一层楼上的一间房间一样,租户只关心面积是否足够,而不关心房间的墙壁是钢筋水泥结构还是砖块石灰结构。但是对于云服务提供商来说,出租硬件服务器和虚拟机,内部的技术处理是不一样的,其中硬件服务器必须要集成远程管理卡并要池化到资源池中。
远程管理卡是插接在服务器主板上或者直接集成在主板上的一个嵌入式系统,需要接 线并配置 IP 地址。只要服务器的电源插头插到插座上,不管有没有按下服务器的电源开关,这个远程管理卡都会启动,其他人就可以通过 络登录到远程管理卡(需要账 和密码),成功登录后就可以进行启动和关闭服务器、安装操作系统等操作。只不过云服务提供商把远程管理卡的功能集成到了租户自助 站中,从而实现了物理机和虚拟机的统一管理。
IaaS 云端的基本架构模型
IaaS 云端的基本架构模型逻辑上分为三层:第一层管理全局,第二层管理计算机集群(一个集群内的机器地理位置上可能相距很远),第三层负责运行虚拟机。
第一层的云管理器与第二层的集群管理器之间一般通过高速 络连接,当增加数据中心为云端扩容时,就能体现 速的重要性。而集群内的计算机之间倾向于采用本地局域 (如 10Gbit/s 以太 )或者超高速广域 ,如果采用局域 ,则灾难容错差;如果跨广域 ,则 络带宽会成为瓶颈。
每一层具体的任务介绍如下:
第一层(云管理器)
云管理器是云端对外的总入口,在这里验证用户身份,管理用户权限,向合法用户发放票据(然后用户持此票据使用计算资源)、分配资源并管理用户租赁的资源。
第二层(集群管理器)
每一个集群负责管理本集群内部的高速互联在一起的计算机,一个集群内的计算机可能有成百上千台。
集群管理器接受上层的资源查询请求,然后向下层的计算机管理器发送查询请求,最后汇总并判断是部分满足还是全部满足上层请求的资源,再反馈给上层。如果接下来收到上层分配资源的命令,那么集群管理器指导下层的计算机管理器进行资源分配并配置虚拟 络,以便能让用户后续访问。
另外,本层 PLS 中存储了本集群内的全部虚拟机镜像文件,这样一台虚拟机就能在集群内任意一台计算机上运行,并轻松实现虚拟机热迁移。
第三层(计算机管理器)
每台计算机上都有一个计算机管理器,它一方面与上层的集群管理器打交道,另一方面与本机上的虚拟机软件打交道。它把本机的状态(如正在运行的虚拟机数、可用的资源数等)反馈给上层,当收到上层的命令时,计算机管理器就指导本机的虚拟机软件执行相应命令。这些命令包括启动、关闭、重启、挂起、迁移和重配置虚拟机,以及设置虚拟 络等。
租赁 IaaS 云服务,对租户而言,最大优点是其灵活性,由租户自己决定安装什么操作系统、需不需要数据库且安装什么数据库、安装什么应用软件、安装多少应用软件、要不要中间件、安装什么中间件等,相当于购买了一台计算机,要不要使用、何时使用以及如何使用全由自己决定。
一些搞研发的计算机技术人员倾向于租赁 IaaS 主机。但是对于租户来说,IaaS 云主机除管理难度大外,还有一个明显的缺陷:计算资源浪费严重。因为操作系统、数据库和中间件本身要消耗大量的计算资源(CPU、内存和磁盘空间),但它们消耗的资源对租户来说做的是无用功,来看下面这个极端的案例。
假设张三租用了一台 IaaS 主机,配置为 CPU1.0GHz,内存 1GB,硬盘空间 10GB,然后他安装了 Windows7 操作系统、MySQL 数据库,最后再想安装和运行绘图应用软件几乎是不可能了,因为 Windows7 操作系统和 MySQL 数据库就要把 CPU、内存和硬盘空间消耗殆尽了。
没有硬盘空间,如何安装应用软件有空闲的内存,又如何能运行应用软件三本来打算租赁云端主机来搞图形设计,这样一来,目的就没达到,至少租来的主机的配置要翻倍才行。
下面是一些 IaaS 云服务的实际应用。
- 备份和恢复服务。
- 计算服务:提供弹性资源。
- 内容分发 络(CDN):把内容分发到靠近用户的地方,对于一些基于 页的应用系统,为了提高用户体验,往往在各个地方(人口稠密的地方)设立分支服务器,当用户浏览 页时,被重定向到本地 Web 服务器,所以数据必须实时分发并保持一致。
- 服务管理:管理云端基础设施平台的各种服务。
- 存储服务:提供用于备份、归档和文件存储的大规模可伸缩存储。
比喻:就像烧菜一样,服务商给你准备好食材,收一些食材的费用,之后怎么烧,烧什么就是你的事情啦。
需要注意的是,云服务提供商只负责出租层及以下各层的部署、运维和管理,而租户自己负责更上层次的部署和管理,两者负责的“逻辑层”加起来刚好就是一个完整的四层 IT 系统。
比如有一家云服务提供商对外出租 IaaS 云计算业务,云服务提供商负责机房基础设施、计算机 络、磁盘柜和服务器/虚拟机的建设和管理,而云服务消费者自己完成操作系统、数据库、中间件和应用软件的安装和维护。另外,还要管理数据信息(如初始化、数据备份、恢复等)。
再比如,另一家云服务提供商出租 PaaS 业务,那么云服务提供商负责的层数就更多了,云服务消费者只需安装自己需要的应用软件并进行数据初始化即可。总之,云服务提供商和消费者各自管理的层数加起来就是标准的 IT 系统的逻辑层次结构。
五、商业云平台设计与建设方案
MaxWon一站式移动营销平台,有如下特点:
1. 快速搭建全 营销平台
能够提供20多个营销模块灵活组合,个性化配置风格和首屏,一键生成App + 微信商城 + PC 站。
2. 全 多渠道营销
能够让营销人员同时在App,微信商城,手机 站,PC 站平台展开营销,提升企业的业绩。
3. 一站式管理,最小运营成本
有统一后台,同时管理多端营销,使用最小人员配置,获得最大运营效率。
4. 数据驱动运营
提供多维度运营分析,快速反馈运营效果,数据驱动高效运营。
5. 精准营销,高效转化
大数据分析全面洞悉客户消费行为,精准广告投放,提升销售转化。
案例模型
整个案例项目由“三端四平台”组成。“三端”指创作端、管理端和服务端。创作端负责生成各个平台应用,包括Android、iOS、 站、微官 。管理端用于管理应用、用户、权限, 管理后台数据和重要的信息设置等。服务端提供移动应用和后台管理所需的所有的API接口。“四平台“指iOS、Android、微信和移动官 。商户通过创作端生成各端应用和 站,营销和管理人员通过管理端运营和管理后台数据, 形成了制作、运营、营销的闭环。
接下来我们一起梳理下功能需求。创作端需要包含模板管理、布局管理、配置管理、构建应用等功能。管理端需要包含用户组织、权限、账户、数据、设置管理等功能。 组件服务部分,需要提供三大类别的服务,覆盖电商、设计、营销领域的二十多个功能组件。
接着梳理下架构上的需求,着重从数据和服务两个角度来看。数据对于商户至关重要,也是用户最关注的点,因为是多租户系统,商户的数据首先要做到隔离,并且当商户规模不断扩大时能够支持不断的扩容, 对于个别商户有数据迁出需求的也需要满足。服务是另外一个要点,如何在确保商户间服务不相互影响的前提下,合理控制资源,降低用户成本,是我们面临的挑战。服务需同时支持多租户共享模式、单租户独享模式、私有部署。
其它方面也有些要求,时间上,需要3个月左右上线运行,上线后能够快速迭代新功能。安全上,要支持数据容灾、传输加密、防止一些基层的 络攻击。
方案选型
了解完需求后,就是方案选型阶段。实现这样的SaaS系统面临两种选择,一种方案是所有功能独立研发,保障整个系统的可控和灵活性。另一种方案是借力PaaS或者SaaS服务,提高研发速度,利用SaaS/PaaS的自适应、安全、专业等优势,降低研发难度和成本。
确定实施的最终方案如图所示,独立研发部分包括,创作端、管理端和服务端的多数电商类服务。确保核心业务系统的灵活性和可控程度,这部分功能的特点是业务具体、需求繁琐、定制性比较强。通过调用后发现,没有成熟的方案能直接满足项目需求, 并且这部分需求也会根据市场反应做出适当调整,因此保证研发的灵活和可控度非常重要。 使用的SaaS服务包括,即时通讯、推送、支付、客服系统、统计分析和 交/圈子等,这部分功能的特点是需求广泛存在,也有公认统一比较成熟的解决方案,单独实现却要花费不小精力,并且通用和扩展性很难做到非常成熟的程度,通过集成第三方SDK和API接口能够满足研发需求。 使用的PaaS服务包括,MySQL云数据库、MongoDB云数据库,使用统一的数据访问层,研发人员可以无需考虑数据库的底层架构、可用性、扩展等问题,完全透明,将精力专注在项目研发即可。
整体架构如图,研发重点为蓝色部分,MaxWon的API层和业务逻辑层。API层整合MaxWon的服务和MaxLeap的SaaS服务,实现具体接口功能,提供给各个终端,主要是各种接口业务实现,工作量大、业务需求多。 MaxWon的服务层,整合MaxLeap PaaS和SaaS的功能,并实现具体的业务需求。基础存储、缓存、全文检索、大数据计算由MaxLeap云的PaaS和SaaS服务提供。从架构图中可以发现,PaaS服务标准化了MongoDB、MySQL、缓存、队列等复杂的存储系统, SaaS服务封装了大数据计算,Hadoop、Spark等复杂的计算系统。整个项目在实现的过程中,专注于业务模块的研发即可,节省了去研发、研究这些基础组件的时间和资源。
方案设计与建设
为什么存储能够做到隔离、扩展/strong>
我们的数据库服务器主要采用两种。事物依赖或者强一致性要求的数据,用MySQL来存储。用户的数据库访问请求经过负载均衡和代理,到达目标数据库服务器和对应DB。 MySQL和MongoDB均是类似,差别在于MySQL和MongoDB的集群组织方式差别比较大。MySQL采用主备读写分离方式,我们通过MHA实现集群的高可用和Master节点的监控、故障自动转移,大型应用采用代理加数据分片。 MongoDB采用复制集方式,一个集群的最小组成是一个Master节点、一个Slave节点和一个Arbiter节点,通常情况下Master承担读写任务,通过oplog保证数据的最终一致性,Slave和Arbiter保证了系统的高可用和故障自动转移。 大型应用采用Mongos、MongoConfig和数据分片方案。 设计上遵循三个设计原则:第一个原则,一应用一库;第二个原则,一库一账户;第三个原则用户需求分级。通过分库将数据在物理上隔离,且方便扩展和迁移。 通过一库一账户原则,区分数据的访问权限。通过用户需求分级,规模比较小的用户可以共享数据库服务器资源,规模慢慢增大时,可以独享资源,继续增大是可以独享更多的服务器资源。
PaaS服务对数据接入进行了抽象。商户规模小的时候,使用共享的数据库资源,通过代理层控制数据请求的服务器,规模慢慢扩大后,使用独立的数据资源。我们通过自研的数据迁移工具,实现数据的平滑迁移。 MySQL实现的代理叫Circe,完全兼容MySQL5.7版本协议。MongoDB代理叫Pandora,兼容MongoDB3.0以上协议。在数据代理层实现了数据访问路由,鉴权,Metrics采集,流控能力,能够支持共享、独享、定制多种部署模式支持迁出。
和主流PaaS的云数据库对比
以AWS的RDS为例,资源申请以RDS实例数为单位,每个RDS是由两个配置相同的EC2实例以及运行在EC2上的主备数据库组成,在成本上也是按照两台EC2响应配置的主机来计算。如果做到应用间数据和权限的隔离,并且对应用代码透明、无侵入, 需要每个应用单独申请一台RDS。这样做显然能达到隔离的效果,但是成本也有点高。
相比之下,MaxLeap的云数据源,以应用为单位,在物理和访问权限上进行隔离,应用A和B规模较小,可以使用公共服务器,但是数据和访问权限独立。应用C规模一般,使用独立的数据服务器资源。应用X规模很大,可以根据需求定制集群方案。
因此,云数据源在成本和灵活性上有很大优势,小规模时期,使用共享资源,降低成本,中、大规模时变更为独享,甚至使用集群方案。
为什么服务能够做到隔离和扩展/strong>
架构图中,用户请求经过负载均衡器和 关,到达目标服务的容器,同一个服务为由多个无状态的容器组成,达到负载均衡和水平扩容的目的,通过Docker容器技术处理服务间的资源隔离,Docker的资源隔离使用了Linux Kernel中的Namespaces功能。 Namespaces主要是通过Linux的clone内核调用来使用,根据传入的不同参数组合来启用对应的Namespace隔离。通过cgroup控制不同Container之间抢夺CPU、IO、磁盘等资源。 可扩展性通过 关和容器技术同时保障,小规模的应用共享服务资源,规模扩大后可以启动独立的服务,并可以根据场景决定需要的资源数量。 关会根据用户的设定,动态路由请求到对应容器实例。 整个Docker容器环境,基于Mesos构建,Mesos是Apache基金会下的集群资源管理工具,它通过抽象主机的 CPU、内存、存储等计算资源来搭建一套高效、容错、弹性的分布式系统。Mesos生态本身支持水平无线扩展,通过Marathon对容器的资源调度进行管理。 Marathon是Mesos生态圈里的一个轻量级、扩展性很强的调度long-running service的调度框架。支持RESTful api来创建和管理app,自动为app做容错迁移,凡是能用shell起的任务,理论上都可以通过Marathon在Mesos上简单地启动和管理起来。 从底向上,IaaS层、Mesos层、Docker层,每层都可以水平扩展。
对架构进行总结和梳理。整个服务基于Docker容器构建,达到资源隔离、快速扩展的特性,Docker容器基于Marathon和Mesos构建,管理、调度、监控、Failover等方案成熟, 支持水平扩展。 关支持服务的路由。整个架构支持多租户共享服务和独享模式。
安全设计也非常重要。 络通过https对请求进行加密,针对DDOS对整个 络基础架构进行了部署,VPC内部对防火墙进行规划。服务中对不同级别的请求进行分级和鉴权操作, 服务针对不同领域进行了拆分,在设计和部署上相互独立。对敏感数据加密、数据访问支持ACL、应用分库物理隔离、每个度权限独立,访问隔离。业务数据进行容灾备份。
产品第一个版本上线,稳定运行至今。有效解决掉了隔离和扩展问题,降低运维团队的压力。MaxWon现在支持20多个营销模块的自由组合, 更多模块快速研发中,支持电商、 交、教育、餐饮等多个行业,支持上千家商户的稳定运行。
文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8589 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!