如今,很多企业都在将他们的应用程序迁移到云端。将应用程序迁移到云端很容易,但如果需要迁移现有的基础设施怎么办?可以在云平台中重新创建网络,实现架构现代化,企业可以利用AWS等云计算提供商的诸多优势。
是什么让云计算如此有用?
在最基本的形式中,“云”就是基础设施即服务,允许企业租用硬件来运行其应用程序。许多企业通过自己的内部部署服务器运行他们的网络,从第三方租用服务器可以提供更大的灵活性,并可根据需要进行扩展。
然而,AWS、谷歌云平台和微软Azure等主要云计算提供商提供的不仅仅是服务器。他们的业务是提高运营效率,并为开发人员提供易于使用的工具,使构建应用程序变得更加容易。
例如,在云平台中运行服务器实际上可以为企业节省更多的成本。虽然专用服务器的成本会更昂贵,但像AWS公司这样的云计算提供商拥有先进的自动扩展系统。这些使企业可以完全自动化其服务器生命周期过程,随着需求波动创建和关闭服务器资源(通常一天多次)。企业可以在非工作时间缩减规模,从而节省总体成本,而不是为峰值容量付费。
设置自动扩展还允许企业在遇到更高负载时自动创建其他服务器。这使企业的网络具有高度可扩展性,并且意味着企业不会因高流量而真正遇到停机。这种可扩展的功能适用于所有服务。例如,AWS公司开箱即用的Lambda函数可以无限扩展。他们的系统为企业处理和运行代码;无论每秒调用多少次函数,它都不会出现瓶颈。
云计算还通过任务自动化来节省成本。例如,AWS的关系数据库服务(RDS)是一项完全托管的SQL服务,可以自动执行许多管理数据库的工作。企业可能已经通过自己的服务器完成这些任务;如果使用AWS RDS,则可以管理更多数据库并更有效地利用剩余时间。
最后,云计算基础设施通常比内部部署解决方案更耐用。这主要是由于像S3存储这样的服务对于数据存储来说是非常冗余的,但它也适用于高可用性网络设计。故障转移情况的设计很容易,在发生硬件故障时,备份服务器可以接管。而且在最坏的情况下,备份网络中的所有内容都非常容易,因为为服务器存储提供动力的EBS等服务可以配置为自动备份到S3存储设施中。
例如,AWS公司的DNS服务Route 53支持运行状况检查,如果服务器无响应,它会监控企业的硬件并在DNS级别自动切换流量。自动扩展还支持运行状况的检查,并且可以在服务器出现问题时完全终止和替换它。
使用云计算解决方案实现架构现代化
迁移到云平台是一大步,有了提供给企业的其他工具,就有充分的理由检查其架构,可以了解哪一部分是否可以从设计更改中受益。
例如,许多传统的应用程序被设计为一个“单体”,即打包成一个可以在服务器上运行的大程序。该程序可能与内部部署或远程数据库通信、处理传入的Web请求、执行查询、查找信息、处理队列,以及企业的用例所需的所有其他内容。
这对于应用程序的快速启动和运行是有好处的,但最终带来一个问题——效率不高。只要它试图同时处理许多复杂的任务,大型单体应用程序的某个方面总会成为应用程序其余部分的瓶颈。通常情况下,企业会被迫扩大规模,配置更多服务器,运行更多实例。如果程序中的其他组件没有受到那么大的压力,这可能会导致浪费。
因此,许多工程师正在转向的解决方案是“微服务”。 这些服务是单独的,每个服务都有一个明确的固定目标。或许企业的Web应用程序的一个元素处理视频,相比之下,当用户上传更大的视频时,它的压力更大。企业可以将这一部分转移到微服务中,在外部处理它,并在需要时简单地调用它。现在,该组件可以完全自行扩展;企业可能需要三台服务器运行视频处理服务,但只有两台服务器运行应用程序的其余部分。这样可以更有效地利用企业的资源,并且在总体上是一种更具可扩展性的设计。
企业应该考虑采用哪些服务?
无论企业是否选择微服务设计,其他云计算解决方案都非常有用。
以下将讨论AWS公司提供的一些服务,因为该公司是云计算行业的领导者,尤其是在提供的服务数量方面。但是,大多数主要云服务提供商都提供了类似的产品。
(1) 云对象存储(S3)
大多数内部部署解决方案使用块级存储,这意味着对象作为文件存储在磁盘上,并通过网络提供。但是,AWS等云计算提供商的规模允许在其简单存储服务(S3)中存储大量文件。
S3没有采用传统的文件夹,尽管它们确实有对象键,它们的工作方式大多与S3类似。S3不提供对底层驱动器的直接访问,而是仅允许企业在云平台中存储具有名称和位置的文件。就是这样,但是这种简单的设计模式提供了极大的灵活性。
例如,假设企业的应用程序允许用户上传的内容。将图像存储在S3中将是一个很好的选择,企业甚至可以使用AWS的CloudFront内容交付网络通过全球互联网提供它们。
切换到基于S3的存储是一个过程,但有混合解决方案,例如AWS的Storage Gateway。
(2) Cloud functions
像Lambda这样的云计算功能非常有用,它们允许企业在云平台中运行代码而无需考虑服务器。只需直接从AWS的API网关等API请求要执行的函数,它就会排队并在Lambda服务器上运行。
企业只需为函数使用的CPU秒数和内存量支付费用。不管调用多少函数,它都会扩展来处理它。
Cloud functions可以轻松地自动执行网络中的简单任务。如果企业在其中一台服务器上运行cron作业脚本,需要考虑将其移至Lambda。当然,Lambda不仅限于简单的脚本。它非常强大,可用于制作强大的应用程序后端。
(3) 负载均衡器和自动扩展
负载平衡器是在服务器之间分配流量的网络设备。传统上,企业必须设置服务器并使用HAProxy之类的程序自己配置。在AWS云平台上,它们内置于网络中,只需打开它们并支付费用即可。
自动扩展是建立在负载均衡器之上的另一项功能。企业的服务器列表不是静态的,而是基于流量需求。将根据需要在资源池中添加和删除服务器。
正如以上介绍的那样,这有很多好处,但它也会对企业使用和更新网络的方式产生深远的影响。因为企业的服务器安装过程是自动化的,所以可以进行蓝/绿代码部署,即通过创建全新的服务器来更新服务器,等待服务上线,并缓慢地将流量切换到它们以消除任何问题。
如果可以确定的话,那就是自动扩展企业的主要EC2服务。
(4) 自动化持续集成(CI)/持续交付(CD)管道
持续集成(CI)/持续交付(CD)是设置应用程序自动构建的过程,只要企业对源代码控制进行更改,该应用程序就会部署到服务器。
基本上,企业将提交推送到Github(或使用其他存储库),然后AWS CodePipeline之类的服务启动构建服务器。该服务器构建并测试应用程序,如果成功,它将完成的构建发送到企业的服务器进行更新。如果设置了自动扩展,则可以通过蓝/绿部署完成,并在必要时提供快速轻松回滚的选项。
(5)内置内容交付网络(CDN)
企业拥有内容交付网络(CDN) 可以显著加快交付时间。由于AWS是全球云计算巨头,因此他们的内容交付网络(CDN) 在全球拥有边缘节点。许多其他云计算提供商也有类似的解决方案;谷歌公司的内容交付网络(CDN) 是最快、最灵活的CDN之一,因为该公司实际上控制着构成互联网的许多基础设施。
企业可以在不停机的情况下迁移吗?
迁移将是一个漫长而复杂的过程,但这并不一定意味着延长停机时间。可能会有一些停机时间,但这一过程可以相当无缝。
企业可以采用以下两种策略中的一种:
第一种选择是一次性移动所有服务器并切换整个网络,或者将企业应用程序的一部分移动到云平台中,然后更新应用程序以使用新服务。
第二种选择是采用混合方法,这是大多数大型企业的选择,因为只迁移最有用的东西更具成本效益。AWS公司有许多服务通过将内部部署硬件与云平台集成来工作。
第一种选择对于小型部署很容易,并且通过AWS公司的应用程序迁移等服务变得更加简单,该服务可以将一组服务器快速移动到EC2上。企业可能仍然需要代码更新和配置,但它可以将企业的整个网络移动到一个测试环境中,可以在其中设置所有内容,然后在准备就绪时执行切换。
无论哪种方式,迁移到云平台对于企业来说都是一个重大的决定,企业应该确保经过充分研究并制定明确的计划。企业的具体设置会有很大的差异,因此需要研究要运行的应用程序类型的最佳实践。