天天看点

将应用迁移至云端面临的问题​

传统软件的架构设计就是为了运行在公司的企业防火墙内。如果软件开发是在数年以前完成的,那么软件对其运行所处的物理硬件甚至开发使用的技术堆栈非常可能有着很高的依赖性。通常我们称之为“紧耦合”架构,因为如果从特定的物理环境中分离出来之后,软件将不能正常运行。云计算架构要求的是一种“松耦合”的架构。弹性是云计算的关键组成特性之一。而真正具有弹性,意味着软件能够按需进行扩展或缩减,而且必须不受运行所处物理环境的限制。​

大多数遗留(legacy)架构在进行构建时,从未考虑过系统随交易量上升自动扩展的问题。传统的扩展技术通常只意味着垂直扩展。垂直扩展通过增加现有硬件来完成,也就是说在现有的基础上增加更多的CPU、内存或磁盘空间,抑或以更大或更强的硬件来替换现有的基础设施。垂直扩展也是人们所说的“纵向扩展”(scaling up)。垂直扩展对软件的要求不会太多,通常只限于进行配置更改,保证在基础设施条件类型不变的前提下能够使用新设备。​

在这种扩展策略下,架构师在设计软件时通常不会考虑如何脱离基础设施限制的问题。举例来说,如果某个应用基于IBM的iSeries计算机构建,那么通常在开发软件时就会从尽量充分利用专有基础设施性能的角度进行,从而不可避免地出现软件与硬件紧耦合的情况。迁移这样的应用可能就必须进行较多的再造工程,移除软件对iSeries的依赖性,使其在云中能够变得具有弹性。而一个具有弹性的系统,则意味着能够处理不曾预料到的、突然爆发的工作负载。​

虽然云的伸缩性可以通过垂直扩展来体现,但是大多数情况下还是通过自动化的水平扩展来完成。水平扩展的完成方式是在现有的基础设施之外增加其他共同运行的设备,通常也被称为“横向扩展”(scaling out)。水平扩展通常涉及系统架构的多个层级。一些常见的水平扩展方法是按照服务器类型(见图1)、客户类型及应用领域类型(见图2)等增加节点。​

将应用迁移至云端面临的问题​

图1按照服务器类型​

将应用迁移至云端面临的问题​

图2按照客户类型扩展​

遗留应用程序面临的另一个挑战是系统的设计是“有状态”(stateful)还是“无状态”(stateless)。云服务是无状态的。一个“无状态的”服务是指服务不知道前一个请求或响应的任何信息,只知道服务处理给定请求这一持续期间的信息。无状态的服务在客户端而非服务器端存储应用的状态,因此对基础设施没有依赖性。​

无状态架构比有状态架构更适合云。将底层架构从保持状态转变为无状态的工作通常都不太可行,对应用进行整体替换反而更为现实。如果公司想要充分利用云计算的各种优势,那么将遗留的有状态应用迁移至云端可能会收到令人失望的结果。​

总之,除非本地应用在进行架构设计时,就是按照可被其他技术和无关基础设施的服务访问的一系列松耦合服务的理念进行的否则,迁移至云端或者需要进行较多的工程再造工作,或者可能会从云服务中收益少,抑或可能根本就不可行。​

继续阅读