硬件平台
Hardware Platforms
对大型Web应用程序而言,软件是整个谜题的重要一环,但并非全部。在设计阶段和实现阶段,硬件和软件同样重要。大型应用程序的总体设计需要同时考虑软件组件和运行软件的硬件平台。至少在起步阶段,硬件平台总会在Web应用程序部署总体成本中占一大部分。软件开发成本主要包括持续支出的开发人员的薪水,它到最后会占更多部分,但硬件成本的支出很早,又是一次性的。因此考虑好如何设计硬件平台是很重要的,这样做才能保持较低的初期成本,并对扩展路线有清晰的概念。
究竟什么是……硬件平台?
我们所谈及的硬件平台,并非是指特定的处理器或者总线架构,而是指那些构成应用程序的,包括机器、硬件组件和系统软件等,杂七杂八的所有东西的总体。一个硬件平台有可能就是运行一个操作系统的一台机器,但更为常见的硬件平台则可能由多种级别的机器组成,而且很可能运行着多种操作系统。
高德纳说过一句很精辟的话,值得我们时常回顾:
忘记那些微不足道的性能调整,在97%的情况下,不成熟的优化是罪恶之源。
这句话不仅仅适用于软件开发,对于硬件平台的设计以及软件过程大体上也是相当适用的法则。起步阶段注意控制规模和通用性,可以避免在以后终究会被丢弃的事物上浪费时间。
根据上述原则可以衍生出适用于硬件平台初期设计时适用的规则:
购买经济型硬件
除非以前构建过相同规模的应用程序,否则请购买经济型的硬件,至少在初期要购买经济型硬件,这一般是不会错的。通过购买现货供应的服务器和网络部件,可以降低成本,并加强推倒重来的能力。如果应用程序还不能有效的运行就失败了,这样做可以少浪费一些钱。如果应用程序运行很成功,那么在一开始花的钱越少,将来就有越多的钱用于扩展。过高估计刚刚起步的应用程序的硬件需求,会花费大量金钱,而这些钱本来可以用于解决更为紧迫的问题,比如说支付员工薪资和在需要时扩展硬件平台。
如果你没有运营类似应用程序的经验,就不可能一开始就知道是否需要更多的数据库、磁盘或网站服务能力。你将无法理解采用8GB内存的数据库服务器和2GB内存的区别。在硬件上过早进行优化,会让时间和金钱的规划处于危险的境地,因此最好选择经济型硬件来组成稳健的平台,以此作为开始。
使用编译好的操作系统
这条规则看上去是理所应当的,但还是值得一提,在应用程序开发初期,开发人员基本上没有必要编译专用操作系统。过去有很多这样的案例,应用程序刚刚起步,就花大量精力来调整内核参数、移除内核模块等,来勉强赢得越来越少的性能提高。如果10%的性能提高得用一个程序员花费一个月,而这种服务器的费用低于一个程序员10个月的工资,那换算下来就浪费了时间和金钱。只有当规模大到了一定程度,调整所用的时间和精力能够节省成本(有足够多的服务器,优化使每台服务器节省10%的性能,总体价值超出工程师的成本),这时进行这种级别的优化才是明智的。
几乎所有的应用程序在默认的内核上都运行得不错。可能有一些特例,需要特定的内核支持(比如物理地址扩展(PAE),或者内核中的HTTP服务器),而主要的内核编译版本不支持这些特性,但不管怎么说,请记住这条重要的规则:不要在开发初期编译专用内核。
使用编译好的软件
基于相同的理由,编译自己的软件常常是浪费时间。操作系统自带的Apache、PHP,还有Perl基本上都已经很适合了(本规则对MySQL例外,最好从MySQL.com获取它的最新版本)。若确实需要用到不同的版本,使用直接提供的二进制文件是个好办法。以为自己编译的MySQL会带来任何好处,这样的想法是完全没有道理的。事实上,就 MySQL而言,自己编译的版本往往更慢。编译好的二进制文件已经由庞大的开发团队测试过,所以可以省去自己进行测试的工作量。你总不会希望在发现应用程序的缺陷时,还得去区分这到底是软件的缺陷呢,还是由于自己编译错误导致的服务器端应用程序的问题。
共享硬件
Shared Hardware
应用程序度过了在本地机器上运行的阶段之后,接着就需要用共享硬件了。共享硬件一般是由大型供应商提供的,如ISP和主机服务,你需要与很多其他用户共享这些硬件。这种平台非常适用于原型系统和在其上进行开发,甚至也可以用于小规模的正式运行。共享主
机往往价格低廉,而且你将得到的是与价格相称的服务。如果应用程序使用了数据库,它的性能跟其他的数据库用户会有很大关系。而网络服务器的配置和模块定制往往是不可能的。大型供应商会在合适的时候为你提供升级途径,帮你迁移到专用的硬件平台,甚至会简化到完全安装的迁移过程。
专用硬件
Dedicated Hardware
当共享硬件能力不足之后就需要迁移到专用硬件了。“专用硬件”这个词很容易让人误解,其实硬件还是从供应商处租借,隶属供应商所有,并由供应商负责维护,但硬件现在是专门用于运行你的应用程序。使用专用硬件,你所涉及的工作仍然仅限于SSH远程登录,而不需要你来切换磁盘、架设机器等。专享的主机服务涵盖了从完全的托管到完全的非托管整个范畴,完全托管指的是你只要获得用户登录,其他一切交由主机提供商处理,而完全的非托管指的则是你会得到一个远程控制台,由自己来安装操作系统。
使用专用硬件平台有时是最划算的,这取决于你打算增长到的规模大小。采取这个方案后,你不再需要在工程师团队中配备系统管理员,也不再需要在配置任务上花费开发人员的时间。然而,这种方案的效率密切依赖于你和主机网络操作中心(NOC)及其员工的工作关系。主机提供商所提供的服务等级差异很大,因此最好去咨询一下你认识的从事类似工作的人员。
主机托管
Co-Located Hardware
如果打算创建真正的大型应用程序,这种主机托管的形式并非长久之计。世界上最大的Web应用程序需要数十万台服务器,尽管你基本不会碰到这种规模的应用程序。连专用服务器模式一起,你有两个选择。小公司和正在创业的公司往往选择主机托管作为开始。主机托管机构(co-location,简称colo)提供空间、电力、带宽,而你则提供硬件及支持。
Colo提供的服务种类颇为丰富。其中有些是虚的,而有些则能提供对服务器和服务的监测,还能和你通过电话诊断服务器问题。尽管服务内容是根据合同确定的,但基本上各种服务机构都会提供网络监控以及一些基本的服务,如重启崩溃的服务器,这样的服务可能是按次收费的。
选择colo是一个重大的任务,不容小觑。虽然总归可以更换colo,但这样代价太大,应该尽可能去避免。如果你因为选择了一家低劣的colo而受苦受难,但这种窘境却又远低于更换colo付出的代价,最终你会放弃更换而不得不继续受苦(事实证明,有些colo看起来还是可以指望的)。和采用专用硬件方案时选择主机提供商一样,你需要收集正在使用你感兴趣的colo的人的意见。特别要确保与开发同等规模应用程序的开发人员进行讨论。一些colo擅长于小型平台,对大型平台的支持就跟不上,而其他一些却只为大客户提供良好的服务。
自有主机
Self-Hosting
当规模达到数千个服务器时,运营自己的数据中心(DC)往往更为有利。这个任务量很大,一般需要设计为特定目的而建造的设施,雇用24小时NOC和现场操作人员,配备多个冗余电力网格连接、大量的UPS、电力过滤和生成设备、消防设备,并且和宽带电信公司签订多个对等协议。
在应用程序规模还小时,自有主机的方案有时也颇具诱惑;租用一条线路到办公室,在办公室运行服务器,看起来相当简单。但这一般不是个好主意,应该尽量避免。和其他解决方案相比,这种方案最终往往会花钱更多,遇到的问题也更多。如果附近没有colo,那就找寻有没有管理环境可以托管,或者雇用住处离colo较近的系统管理员。自有主机一开始能工作得不错,但到特定程度就不行了。带宽会变得过于昂贵(到某个私有地点的上行带宽通常比下行带宽贵得多)或者容易受到断电的影响。如果是到家中的连接,就可能因为什么人切断电话电缆而数日都不能运营,这是非常让人苦恼的,但如果这就是你全部的生意,你也只能忍耐这些间歇性的运营中断。
帮助你建立数据中心显然超出了本书的范围,但还是预祝你的应用程序能够不断成长,终有一天,规模达到可能需要DC的程度。
| 回书目 上一节 下一节 |
|
||||
| · 微软Forefront企业安全.. · 如何优化IT 控制能耗 · 国际文档格式标准开战 · CISSP认证成长之路 · 珊瑚虫QQ作者侵权案开庭 · 微软出价446亿美元收购.. · Windows Server 2008专.. · 隐私保护技术探讨 |
· 贝恩资本携手华为22亿.. · 802.11n:下一代的无线.. · 体验Visual Studio 200.. · 运营商封堵非法ADSL共享 · ADSL应用面面俱到 · 龙芯要做中国的“奔腾” · 华为七千人主动辞职规.. · 华为路由器配置 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · SQL Server 2008/2005.. · 中间件应用技术专题 · 深入了解PGP加密技术 · MySQL数据库备份 |
· 病毒查杀专题 · VPN技术 · Solaris 10 配置管理 · SSL VPN详细知识 · Linux防火墙 · 打造安全服务器 · Sniffer安全技术从入门.. · SOA 面向服务架构 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · 中间件应用技术专题 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · MySQL数据库备份 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · SSL VPN详细知识 · Sniffer安全技术从入门.. · VPN技术 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 网络钓鱼 |
|||