《PaaS程序设计》一2.3 PaaS:综合两种方式的最佳方案

简介:

本节书摘来自华章出版社《PaaS程序设计》一书中的第2章,第2.3节,作者 Lucas Carlson,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.3 PaaS:综合两种方式的最佳方案

对于开发者来说,通常会以共享主机的方式起步。很快,就会经历需要更强的功能和控制的阶段,于是,就会转向独立主机托管。在完全拥有了控制权之后,你可能会感到很惬意,也会很兴奋,因为你可以对服务器进行调整和优化,让它们运行得更快,网站可以更快地的被加载,并且可以处理更多的用户请求。
然后,随着时间的流逝,兴奋感很快就会烟消云散,因为日复一日维护服务器所增加的负担,会让人筋疲力尽。独立服务器可以提供更强的功能和控制,但是很容易就会遭受攻击,而作为开发者,你必须自己解决这些问题。在数据库被破坏了的时候,还得自己去使用备份数据进行恢复。
而且,还有更多问题!而不仅仅是需要花费时间和精力来管理这些机器。如果服务器在凌晨4点宕机(通常会在这些非常不方便的时间发生),你必须完全负责去修复它。即使你在吃晚饭、在参加婚礼或者在度假,你也得去修复机器。这就是寻呼机存在的理由—为了找到医生和系统管理员。
简而言之,对于开发者来说,共享Web主机很容易,但是无法提供足够的控制和功能;而独立主机虽然功能强大,但是也带来了很多麻烦和不必要的负担。在平台即服务出现之前,没有任何折中的方案可以选择。
于是,结合独立主机托管的强大功能和共享主机的易用性,我们便得到了平台即服务。

2.3.1 开发者的圣杯

让我们简单回顾一下这个例子,由于新增的电视节目,导致网络流量地爆发增长。采用专用服务器托管时,就必须从1台服务器增加到100台服务器。这将是一个梦魇,因为我们可能需要雇佣一个团队来管理这些服务器。但是采用平台即服务的方案,则只需要将滚动条从左边移动到右边,数秒钟之内就可以将服务器增加到100台。
就像我们所看到的那样,平台即服务提供了专用主机所拥有的强大的能力、速度、可靠性以及可扩展性,同时也如同共享主机那样简单易用。因此,我们可以说,平台即服务是开发者的可扩展性和可靠性的圣杯。
同时这一增强的可靠性也带来了另外一项好处,那就是作为可扩展架构的关键原则之一,应用于现代Web开发领域的N层架构。

2.3.2 共享负载

采用N层应用架构,我们就不需要将应用的逻辑与数据库服务器,或者缓存服务器或者负载均衡服务器放置在一起。因为,可以采用不同层次的服务器来独立地处理应用程序的不同的方面。
这样就实现了垂直方向的扩展,从而可以通过增加更多某种类型的服务器来增加运算能力, 这些服务器并行运行,并通过软件的配置实现负载的分发。于是,我们就从原来的单一服务器,到现在拥有了至少三层或者四层的服务器,或者层次。在每一层中,我们都得以复制失效恢复和高可用性。
而在采用专用服务器的时候,通常需要东拼西凑才最终得以实现类似的架构。每一个平台即服务的方案都从开始就拥有内置的N个层次。这些层次被打包成产品,并在刚开始的时候就成为一种事实上的标准,将专用Web主机与一种简单的部署应用代码策略组合成一种最佳方法。

2.3.3 语言上的考虑

有多种不同的方法来实现平台即服务。一些供应商专注于某种单一的编程语言,就是说,开发者被限制于应用特定的语言。比如Java、PHP、Python或者Node.js。
也有些供应商提供多种不同的语言以供选择。一方面来看,多语言供应商可以提供一站式服务的好处,而另外一个方面,单语言的平台即服务供应商则常常可以提供高度优化的系统环境。总的来说,应用最广泛的PaaS系统通常都是多语言的。
作为开发者,大家还需要注意供应商锁定问题。某些平台即服务供应商要求应用系统编程的时候,使用他们的应用编程接口(API),因此,一旦将代码绑定到他们的API之后,就很难移植到其他的平台了。如果这只是简单的在数据库服务的层面上,应用的代码还可以保持不错的可移植性。但是,如果使用了供应商定制的库或者定制的应用编程接口,就很难将这些集成点切分成相对独立的点,因此,难以将应用程序移植到其他PaaS平台。

2.3.4 PaaS定价

几乎所有的平台即服务供应商总会让人免费尝试。通常,我们可以至少免费地建立一些应用程序。对于开发者来说,这通常是非常有用的,因为可以通过尝试熟悉平台即服务。在准备部署产品应用的时候,我们就会有很多不同的选择,这些定价模型通常依据所选择的不同平台有很大的不同。PaaS部署产品应用的价格可能从每月只有20美元到每月上万美元。
例如,采用某个业界领先的PaaS供应商的服务时,通常可以免费地部署应用。但是,当需要扩展应用,并增加更多实例的时候(让应用进入产品准备阶段),可能就得按照每个实例支付费用,每个实例大约每月30~40美元。如果还需要备份服务,就还需要每月增加30~40美元的费用。因此,对于某些平台即服务供应商来说,支付的成本可能随着应用的扩展而迅速增加。
其他的平台会采用不同的定价模型。有些按照实际使用的虚拟机数量收费,也有些按照某个资源消耗模型收费。采用AppFog,开发者就拥有一定数量的RAM,基于这些RAM可以按照需要部署特定数量的应用,或者一定数量的实例以运行这些应用。按照每个月使用多少RAM支付费用,而不是如何使用付费。doCould也采用类似的模式。

2.3.5 PaaS真的是个新事物吗?或者只是IaaS++

这里有好几个问题。平台即服务是个新的概念吗?或者它只是基础设施即服务的一种扩展?这一“伟大构想”是否是按需提供的服务器加上API的概念组合?或者平台即服务是一个全新的,完全不同的思想?
有足够的证据表明IaaS和PaaS各不相同,而且平台即服务并不是基础设施即服务的一个特性。归根到底,问题是对于每种服务来说,什么是重要的。
在IaaS和PaaS背后的核心概念是什么?换种方式说:什么是它们的基础单元?
基础单元
一个基础单元就是所研究实体的最小的不可分解的单元。什么是最小的公共元素?什么才是人们所关心的基础的、不可分割的方面?数学上,就是数(或者更为基础的集合)。物理上,就是方程。化学上,就是分子。而在生物学上,就是细胞。
这一概念也同样适用于商业世界。对于麦当劳来说,就是汉堡。对于巴诺(Barnes&Nobel)书店,就是书。对于可口可乐,就是一听可乐。这些就是一个公司最在乎的基础单元。
搞清楚一个公司的基础单元,既有一定的启发意义,也有一定的限制性。启发性在于它可以让人更为专注,集中精力于所擅长的方面。而限制性在于很难销售任何不在公司基础单元之外的东西。很少有尝试多个基础单元的公司能够成功。
基础单元并不一定要如前面所述的那样具体。例如,对于亚马逊(Amazon.com),其基础单元就是任何可以被放置在仓库中管理,并且可以被包装在一个盒子中运输的东西。对于Netflix,就是多种形式的数字媒体。对于Procter&Gamble来说,就是居家用品。
在谈到挑选基础单元这个问题时,有很多令人困惑的地方。其中部分原因在于很多销售着不同基础单元的公司被组合到了一起。一种从根本上理清这个问题的途径,就是从一般的层面上去了解每个公司的基础单元。
IaaS与PaaS的对比
对于基础设施即服务,基础单元就是资源。这里的资源是指服务器、磁盘、网络以及IP地址。IaaS所做的一切就是按照需要提供这些资源。例如,亚马逊(Amazon)的Web服务,所有的工具都以资源为中心,所有的文档都是关于资源的,所有的开发都是专注于资源,同时人们也因为需要这些资源而使用它。其他一些IaaS的例子还包括Rackspace、GoGrid以及Joyent。
对于平台即服务来说,基础单元就是应用。那么什么是应用?就是一个系统。这就是代码以及所有那些在任何时候都与这些代码通讯的服务。这不仅仅是资源,事实上,一个应用是由很多单独的资源绑定在一起组成的。将所有这些资源连接在一切所需要付出的工作量通常被低估了。这就是为什么很多公司成立IT部门,以及为什么系统管理员总是非常受欢迎的原因。从一个单一地运行Apache和MySQL的服务器转移到一个拥有单独的负载均衡服务器、缓存服务器、应用服务器、数据库服务器以及冗余的失效恢复的系统架构需要大量的工作,包括前期投入以及后期维护。
利用PaaS可以做的另外一件事情,就是从应用的角度来管理IaaS。诸如Cloud Formation之类的工具是非常了不起的,但它们是通过资源的角度来管理IaaS。从应用的角度来管理IaaS与资源完全不同。
与资源不同,应用通常不会频繁地上线下线。对于IaaS来说,虽然按照实际需求每小时付费的定价模式非常有用,但通常没有那么重要,除非面对应用的爆发式增长或者在一个测试或开发场景中。
简单地说,平台即服务供应商面对的是代码和服务。这些供应商的职责就是管理和维护代码、运行服务并且确保在任何时候,所有的一切能正常连接并正常工作。

相关文章
|
1月前
|
存储 分布式计算 网络虚拟化
计算机网络规划与设计 -- 设计基础
计算机网络规划与设计 -- 设计基础
19 0
|
9月前
|
SQL 安全 关系型数据库
项目实战典型案例7——在线人员列表逻辑混乱反例
项目实战典型案例7——在线人员列表逻辑混乱反例
121 0
项目实战典型案例7——在线人员列表逻辑混乱反例
|
9月前
|
存储 负载均衡 应用服务中间件
项目实战典型案例17——环境混用来带的影响
项目实战典型案例17——环境混用来带的影响
58 0
|
9月前
|
存储 应用服务中间件 测试技术
【项目实战典型案例】17.环境混用带来的影响
【项目实战典型案例】17.环境混用带来的影响
|
9月前
|
机器人 vr&ar 数据安全/隐私保护
【项目实战典型案例】25.AR系统、第三方、用户三角形超级稳定耦合
【项目实战典型案例】25.AR系统、第三方、用户三角形超级稳定耦合
|
9月前
|
SQL 安全 Java
【项目实战典型案例】07.在线人员列表逻辑混乱反例
【项目实战典型案例】07.在线人员列表逻辑混乱反例
|
12月前
|
前端开发 JavaScript NoSQL
第一次提供技术服务涉及的技术点和思考过程
一年前的今天,我肯定还不敢做前后端联动的工程,没有这个视野。如今有了些许,不敢自傲,还需学习。今天我站在稍上一点的角度,谈一谈我的思考过程及技术点。
63 0
|
设计模式 程序员 开发者
重构·改善既有代码的设计.01之入门基础
近期在看Martin Fowler著作的《重构.改善既有代码的设计》这本书,这是一本经典著作。书本封面誉为软件开发的不朽经典。书中从一个简单的案例揭示了重构的过程以及最佳实践。同时给出了重构原则,何时重构,以及重构的手法。用来改善既有代码的设计,提升软件的可维护性。
581 1
重构·改善既有代码的设计.01之入门基础
|
消息中间件 数据库 RocketMQ
综合案例功能介绍|学习笔记
快速学习综合案例功能介绍
65 0
综合案例功能介绍|学习笔记
|
程序员
《重构:改善既有代码的设计》-学习笔记二(+实战解析)
《重构:改善既有代码的设计》-学习笔记二(+实战解析)
523 0
《重构:改善既有代码的设计》-学习笔记二(+实战解析)