编者按:本文由EucalyptusSystems首席执行官MartenMickos撰写。自从软件被发明以来,模型就没有改变过:你运行应用程序,应用程序在平台上运行。但应用程序设计和部署的基础确实会随着基础设施的突飞猛进而时常发生变化——有时会发生巨大变化。例如,20世纪80年代PC的出现,x86架构的出现,以及客户端/服务器模型的诞生,导致应用程序设计原则发生了巨大的变化。然后,随着20世纪90年代中期网络和开源技术的出现,又发生了一次剧变。每次发生这种剧变时,开发人员都被迫重新思考软件的开发和部署方式。现在基础设施能力有了新的飞跃,由AmazonWebServices主导(尤其是考虑到网络速度的飞跃)。显然,为了充分利用新的云基础设施,在AWS上成功的应用程序必须与在企业服务器上运行的应用程序有根本的不同——即使它们是在虚拟服务器上运行。除此之外,还有其他一些因素决定了云应用程序的设计必须与过去不同。下面列出了一些决定旧世界和新世界演变方式的关键因素:可扩展性旧世界通过扩展来扩展——为了容纳更多的用户或数据,只需购买一对更大的服务器。在新世界中,可扩展性通常是通过向外扩展来实现的。添加的不是更大的机器,而是同类机器的多台。在云世界中,这些机器是虚拟机。弹性以前,软件是不可靠的,弹性是在硬件层实现的。如今,底层基础设施硬件被视为薄弱环节,因此应用程序必须自行调整。应用程序不保证每个虚拟机实例都能正常工作。如果单个虚拟机在一段时间内发生故障并不重要,应用程序必须为此做好准备。以Netflix为例。这可以说是最先进的云用户,在云应用的道路上迈出了最远的一步。他们有一个名为ChaosMonkey的进程,可以在应用程序负载下随机杀死VM实例。这样做的目的是什么?是为了保证应用的正常运行和弹性:通过让应用面临随机实例丢失,倒逼应用开发者开发更具弹性的应用。突发在旧世界中,会计和工资单等应用程序通常具有稳定且可预测的负载。系统用户的数量和特定时刻要处理的记录数量基本是已知的。在新世界中,工作负载是动态且不可预测的。今天的软件系统必须到达更远的地方才能到达需要服务的消费者和设备,时间不可预测,负载无法衡量(想想成为众矢之的12306网站)。适应单个应用程序负载中这些不可预见的波动需要新的架构。虽然我们现在已经上云了,但显然还处于早期阶段。软件多样性过去,软件的多样性并不多。每个应用程序都是用一种语言编写的,并使用数据库。公司通常依赖一个或几个操作系统。软件堆栈非常简单(至少目前如此)。在新的云世界中,情况大不相同。一个应用程序可能使用多种不同的语言、不同的库、不同的工具包和不同的数据库产品。由于在云中您可以创建和启动自己的图像,根据特定需求进行定制,因此公司的应用程序必须能够在各种不同的配置上运行。即使是相对较新的虚拟机管理程序和现代的云计算方式也存在差异。由虚拟化先驱和领导者VMware开发的管理程序本质上就像一台物理机。在云端,虚拟的不是物理服务器的代表,而是计算单元的代表。用户耐心在过去,用户被教导要有耐心。由于系统的响应可能需要很长时间才能完成一些简单的拉取或更新请求,因此新功能的添加也很慢。在新世界里,用户是没有耐心的。他们对延误几乎没有容忍度,也不愿意等待。他们希望软件能够经常更新,如果不是每天更新,至少每周更新一次。您可以在自助服务IT中找到这方面的证据。在那里,用户无需向IT部门发送通知并等待几天的响应,而是可以自行配置用户所需的资源。英文原文:gigaom.com翻译链接:http://www.36kr.com/p/203410.html
