《PaaS程序设计》一2.2 开发者早期的选择

简介:

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

2.2 开发者早期的选择

不幸的是,扩展问题和数据丢失的情形非常普遍,主要是由于上一代应用开发者几乎没有太多的选择。大部分人要么选择共享web主机,要么选择专用web主机。如今,我们可以在两者之间加入一个更为强大,并且相对比较新的选择,那就是所谓的平台即服务。在我们深入平台即服务之前,先来检视一下前两种方案。

2.2.1 共享web主机

通常认为,web开发者刚开始的时候使用共享web主机是一种最容易的方式。例子包括GoDaddy、Yahoo!、Comcast以及如今的很多互联网服务提供商。
共享主机的核心概念就是一个FTP账号,即为登录FTP应用服务器而获取的凭证信息。这个服务器通常托管着几千个,甚至数万个网站。一般情况下,服务器是非常强大的,但是会很快陷入困境。如果这些网站中有一个或者两个开始出名,即使服务器能力非常强大,也会很快耗尽所有的服务器资源。于是会出现这样的结果:上千个网站变得异常缓慢,甚至没有任何响应。
使用共享主机有利的方面就是价格。共享主机价格便宜,有时候还是免费的。而且,是不需要手工维护的。开发者不需要安装安全补丁包、不需要管理软件、也不需要深入地理解软件是怎么编写的,只需要知道怎么编写HTML代码就可以了。开发者将写好的HTML代码交给服务商,后者会处理其他所有的事情。但是,由于非常便宜,服务供应商可能无法将所有的事情都处理得很好。例如,由于不能超出计算能力的限制,因此导致无法扩展规模。但是,对于简单的应用来说,通常还算不错的。
虽然,对于主机托管供应商来说,规模上比较划算,但这并不是非常可靠,尤其对于需要搭建一个网店、一个复杂的网站、甚至一个给客户提供稳定的联系信息访问的网站等应用。
另外一个不足之处就是安全。你的代码可能与其他10 000份代码共存于一个系统之上。记住,一个普通的网站每天遭到数百次的安全攻击是很容易的。将这一数据乘以10 000,就可以看到将正式的网站放在共享主机上的风险有多大了。
尽管有这些缺点,开发者依然觉地使用共享主机来托管个人网页、分享观点或者尝试新的想法,还是比较有用的。共享主机比较适用于开发时还不确定是否需要投资独立的服务器,并且还不需要面对规模扩展问题的时候。但问题是,一旦需要扩展,从共享主机迁移到独立主机会经历一段痛苦的过程。

2.2.2 独立主机

由于共享主机便宜而且易于使用,因此,开始的时候,开发者——尤其是web开发者——通常会选择共享主机。但在经历了这一阶段之后,通常都会转向独立web主机。这和在家里通过互联网托管自己的服务器一样简单。但是,独立主机也会依据不同的选项,提供不同级别的服务和可伸缩性。
以下是可供选择的独立主机类型的一个列表,按照控制程度(通常也是性能)降序排列:
托管服务器
管理服务器
虚拟私有服务器
基础设施即服务
下面我们来深入探讨一下每种类型。
托管服务器
使用服务器托管,你通常得自己购买服务器,然后将服务器安置在一个可以通过宽带连接的数据中心,并按月付费。托管数据中心提供互联网访问,有时候也帮助调试或者重启服务器。但是,除了需要预先花钱购买服务器之外,你还得自己负责维护和管理服务器。
管理服务器
“管理服务器”这个名词有点不是那么恰当。事实上,对于服务器的管理是非常有限的。如果RAM损坏了,服务商会把内存换掉。如果其他硬件有问题,服务商也会将这些硬件换掉。但是,在RAM或者磁盘被换掉的时候,他们并没有把你的数据换回来。因此,对数据进行离线备份就相当必要。
采用管理服务器有许多不同的好处。通常,不需要自行购买服务器,只需要从托管和管理服务器的供应商那里直接租用就可以了。相对于其他独立主机方案来说,管理服务器可能更快,更稳定和健壮。管理服务器也会挂掉,但一般不会那么快。通常是在磁盘失效的时候,而磁盘的平均失效时间在一年或者两年左右。对比起来,亚马逊的Web服务中短暂的服务器,差不多每隔几天或者几个星期就会宕机。管理服务器不利的一面,就是通常需要几个星期甚至一个月的时间来开通新的服务器。
虚拟私有服务器
虚拟私有服务器,或者VPS,与管理服务器非常相似,但它是虚拟的。在桌面环境下,Parallels、VirtualBox以及Fusion等虚拟机软件可能广为人知。对于服务端虚拟化来说,可以使用的工具(也叫管理程序)包括XenServer、KVM、Virtuozzo、VServer以及Hyper-V。
通过虚拟化,可以将拥有若干TB字节的RAM和数百个处理器核的大型服务器划分成若干个拥有GB的RAM和 1~4个核的虚拟服务器。这就可以比较容易地启动和运行服务器,而且相比非虚拟化的独立服务器来说,更容易替换。
虚拟化技术可以使每个虚拟服务器在安全方面独立于其他服务器,相对于以多宿主方式在一个Apache实例上共享服务器的形式来说,以一种更为全面的方式隔离进程和宿主程序。每个虚拟机都有自己的Root账号,这个账号在遭受攻击的时候,没有办法访问其他的虚拟服务器。
VPS也有其不利的一面,那就是由于底层的物理资源也是可以共享的,那么其他的宿主程序就有可能过多地占用你的处理器和磁盘I/O,从而以一种非预期的方式降低程序的性能。
基础设施即服务
基础设施即服务类似按需使用的、易伸缩的、具备一个应用编程接口(API)的虚拟私有服务器(VPS)。从可用性的角度来看,这是独立主机最快的实现方式。但是,由于依然需要获取Root访问权限,因此这依旧是一种独立Web主机。与其他主机托管方式最大的不同在于,IaaS可以让服务器在30秒之内启动并且运行。Iaas可以是独立的真实的服务器,但通常是虚拟服务器。可以用来实现虚拟化的软件从VMware的vSphere到Xen,从Citrix到微软的Hyper-V。最流行的Iaas就是亚马逊(Amazon)的Web服务,它采用Xen来虚拟化硬件。
使用IaaS的时候,可以得到一个独立的服务器以及一个专有的IP地址。但是,必须自己完成所有的系统配置和管理:安装软件、安装和配置Apache、配置安全属性、优化服务器、优化MySQL、增加账号、分发密码、设置SSH、生成SSH的密钥、安装和升级软件包,以及确保应用软件与服务器上的其他软件相互兼容。
采用IaaS的好处在于,可以按照实际需要获得任意数量的服务器,并且可以非常快地完成扩充。不利的一面在于,这些服务器通常要比其他独立主机方案慢。由于没有办法提供高性能和高可靠性,通常这些服务器的运行都是短暂的,意思是可能在没有任何通知的情况下就宕机。因此,必须从系统的角度进行设计,以专门处理非预期的服务器宕机,这就增加了复杂的层次。
比较成本
这几种独立Web主机的成本构成差别很大。
主机托管方式,开始的时候需要支付购买服务器的固定成本,然后只需要在托管数据中心租用场地即可。因此,相对于小规模的IaaS来说,后继成本极低。很多大型应用都采用了主机托管的方式,通过硬件的投资来节约每个月的成本。这也被称为通过增加资本支出(capex)来减少日常运营成本(opex)。主机托管的成本也有所不同,可以在刚开始的时候每月花费大约1000美元租一个机架,最多可以放置16台服务器。记住,采用主机托管,开发者仍然负责维护和管理这些服务器,因此开发者需要进入数据中心,安装机器,将它们相互连接,并且在服务器出故障的时候,自己去解决问题。
相对而言的另一端,即采用IaaS的时候,则要按照实际需要使用的资源,按小时支付特定的费用(也称为通过增加日常运营成本来减少前期的资本支出)。通常,有很多不同的组合方案可供选择,包括不同的CPU速度、磁盘大小以及I/O性能。
由于IaaS通常按小时付费,并且不需要长时间的保障,因此在短时间之内需要很多服务器的时候就非常方便,例如,在一定量的数据之上进行大规模计算。这个应用场合会对预算造成多大的影响呢?
假设我们需要进行DNA测序。这一工作有着确定的一组问题以及一组数据。使用IaaS,就可以启动上千台服务器,在特定的时间之内完成DNA测序,然后再关闭这些服务器。那么整个过程只需要为使用这些服务器的实际时间支付费用。如果购买上千台服务器,那么完成DNA测序之后,服务器将无事可干,而采用IaaS则只需要按照实际需要付费。
Web应用的生命周期通常要比DNA测序程序长很多,因此,表面上看来,采用capex可能要比opex更划算些,因为可以得到长期的服务。采用IaaS的方式来托管Web应用就不那么经济了。但是,由于Web应用程序可能会遇到访问峰值,因此,当考虑到准备上一场脱口秀或者一项新节目的时候,我们就必须要准备好应付随之而来的网站访问流量地增长。当采用服务器托管方式时,必须首先购买服务器,等待几周的时间,然后将它们放置到数据中心,并花费数周的时间安装配置。而采用基础设施即服务的方式时,则可以每天24小时的调用自动化的应用编程接口,并且可以在数分钟之内加入上千台服务器。在访问流量减少之后,则又可以释放这些服务器,并且仅需要为实际使用的时间支付费用。
使用IaaS最常见的问题就是,由于服务器通常都不是永久的,因此,必须采用某种方式的持久化块存储,用于保存数据。例如,当采用MySQL作为数据库时,在服务器宕机而又不想丢失数据的情况下,就必须要将数据持久化到块存储设备或者其他类似的持久化存储设备上。这些服务以及其他一些服务需要额外按小时付费。
基础设施即服务是一种按需所求的系统。因此,可以按照实际需要增加服务并且按小时支付费用。

相关文章
|
1月前
|
存储 C++
【C++】——基础编程
【C++】——基础编程
45 1
|
1月前
|
存储 编译器 C++
嵌入式中C++ 编程习惯与编程要点分析
嵌入式中C++ 编程习惯与编程要点分析
18 1
|
1月前
|
存储 缓存 IDE
嵌入式开发中的几个有用的经验!
嵌入式开发中的几个有用的经验!
21 0
|
4月前
|
机器学习/深度学习 人工智能 IDE
编程基础
编程基础
33 2
|
6月前
|
程序员 开发者
|
9月前
|
搜索推荐 数据库 Nacos
项目实战典型案例8——让软件的使用者成为软件的设计者
项目实战典型案例8——让软件的使用者成为软件的设计者
76 0
|
9月前
|
算法 Java 程序员
01-C++核心语法|C++概述【C++简介、C++起源、可移植性和标准、为什么C++会成功、从一个简单的程序开始认识C++】
复习`C++核心语法`,且适当进行汇编探索底层实现原理,进一步夯实基础,为以后的`底层开发`、`音视频开发`、`跨平台开发`、`算法`等方向的进一步学习埋下伏笔。
01-C++核心语法|C++概述【C++简介、C++起源、可移植性和标准、为什么C++会成功、从一个简单的程序开始认识C++】
|
11月前
|
缓存 微服务
聊聊编程学习方法,企业级开发到底在做什么,难不难?
聊聊编程学习方法,企业级开发到底在做什么,难不难?
|
开发框架 Java 中间件
java程序设计与j2ee中间件技术/软件开发技术(I)-实验二-类与对象
java程序设计与j2ee中间件技术/软件开发技术(I)-实验二-类与对象
122 1
java程序设计与j2ee中间件技术/软件开发技术(I)-实验二-类与对象
|
缓存 算法 Java
C++ 编程基础总结
C++ 编程基础总结
234 0