云计算如何要求我们重新思考应用程序开发





4.00/5 (1投票)
如何以及为什么迁移到基于云的部署模型需要改变我们对应用程序开发的思考方式
引言
毫无疑问,云计算的出现已经彻底改变了应用程序开发。在本文中,我将着眼于更传统的本地部署模型与云计算之间的具体差异,并描述这些差异对应用程序开发意味着什么。
主要差异
类别 | 本地部署 | 云计算 |
硬件 |
|
|
安全 |
|
|
处理问题
传统上,我们指定并购买了内置容错功能的硬件,并编写了不容错的软件以在其上运行。这意味着开发人员对可用性、带宽和响应时间做出了假设,并且出现的任何问题都以故障排除的方式处理(通常是通过改进硬件规格)。
在云部署模型中,硬件容错的承诺被服务级别协议(SLA)——基于百分比的承诺所取代。这意味着你也应该使你的软件具有容错能力——如果遇到瞬时故障,你需要重试操作,并且如果你没有获得你期望的硬件可靠性,你需要考虑优雅降级。拔电源的异常处理方法不再可行。
一些公司,为了打破开发人员对硬件的过度自信,甚至部署了一个 混沌猴子,故意降低他们正在使用的硬件的可预测性和可靠性。
智能扩展
当硬件位于你自己的数据中心时,购买的实际成本往往对应用程序开发团队是隐藏的——它通常是一种沉没成本,并在整个公司范围内分摊。 云部署并非如此——通常,你将需要为你使用的存储、网络 IO 和计算时间付费。
这意味着你希望你的应用程序能够在需求增加时向上扩展,并在需求减少时再次向下扩展(释放未使用的资源)。
你还需要设计你的应用程序以避免瓶颈。 如何实际实现这一点因情况而异,但根本的想法应该是“我如何使这个过程并行”。
位置独立性
在云部署环境中,你无法保证你的应用程序将托管在特定的机器上。 这意味着任何应用程序内部通信都需要使用消息传递提供程序或消息队列,并将位置独立性作为主要设计考虑因素。
为富足的土地编码
云部署提供了如此巨大的计算能力,因此值得考虑如何为富足的土地编码。
实际上,这意味着存储进入你系统的所有数据,而不仅仅是你当前已知需要的数据。诸如 HDInsight 之类的工具意味着这些数据总有一天会对某人有用。
为资源稀缺的时代编码
在云部署场景中,有一种资源并没有变得更加丰富——那就是开发人员。幸运的是,已经构建了大量可以利用的代码——无论是开源的还是作为付费插件服务。开发人员的座右铭应该是“只编写只有你才能编写的代码”。
历史
- 2014年8月13日:初步想法