Web应用的云端部署策略研究
2022-12-06刘班
刘 班
(武汉职业技术学院,湖北 武汉 430074)
0 引 言
随着Web2.0技术的兴起,Web应用已经成为一种最重要的信息服务提供方式。但Web应用采用传统的方式部署之后,可伸缩性不强,在一定程度上限制了其快速发展。云计算技术的出现和逐渐流行为Web应用的部署提供了一个新的途径。云计算按需使用、动态可伸缩以及资源共享的优势非常适用于Web应用的部署。本文从多个不同的方面详细分析了在云端部署Web应用时需要遵循的各种策略和原则。
1 Web应用的云端部署模式
Web应用可选择3种不同的模式进行部署,分别是基础设施即服务(Infrastructure as a Service,IaaS)、平台即服务(Platform as a Service,PaaS)以及软件即服务(Software as a Service,SaaS)[1]。具体采用哪一种部署模式取决于应用需求的实际情况。
1.1 基础设施即服务(IaaS)
IaaS是一个为用户提供IT基础设施的平台。云端服务商仅提供硬件服务器或者虚拟机,用户可以利用这些基础设施(CPU、内存、存储、网络等)来自由部署和运行自己所需的任意软件,如操作系统或应用程序等,也能获得对网络组件(路由器、防火墙、负载均衡器等)的有限控制权。IaaS是自由度最大的一种部署模式,用户可以决定安装什么操作系统以及是否需要安装或者安装什么类型的数据库、安装什么软件等。不过该模式的缺陷也很明显,除了管理维护量大之外,还有就是会导致计算资源的严重浪费。操作系统、数据库以及中间件这些组件本身就要消耗大量的计算资源,而这些消耗对于用户来说毫无实际意义。
1.2 平台即服务(PaaS)
PaaS是运行在IaaS之上的一种模式。在该模式下,云端服务商为用户提供除用户应用程序和数据之外的所有软硬件设施,包括硬件服务器、虚拟机、操作系统、数据库管理系统软件、中间件以及运行库等。基于PaaS模式部署应用,使用户可以将精力集中在应用程序核心功能的开发上,此外还提供了专门针对应用程序的功能。为了方便服务提供商有效地管理平台,在PaaS模式下,用户被限制只能使用某些软件服务。
1.3 软件即服务(SaaS)
在SaaS模式下,云端服务商为用户提供了包括用户业务所需应用程序在内的几乎所有的软硬件设施,用户只需要把应用程序业务数据导入其中即可开始工作。由于应用程序代码是由云端服务商提供的,开发人员没有应用程序的修改权限,因此很难将外部工作流集成到用户自己的系统中[2]。SaaS模式通常不是部署自定义Web应用程序的最佳选择。
通过分析Web应用3种不同的云端部署模式可知,应该选择PaaS这种模式来部署Web应用,从而可以让开发人员更专注于应用软件功能的实现上。
2 云端Web应用程序的伸缩方式
PaaS为大多数语言和运行提供了开箱即用的弹性伸缩功能。但是对于开发人员来说,还需要了解云端服务提供的各类伸缩方式。
2.1 垂直伸缩
垂直伸缩是非常常见的一种伸缩形式,通过使用配置更好的系统来实现。例如,通过将服务器的配置升级为TB级别的随机存取存储器(Random Access Memory,RAM)和大量多核心中央处理器(Central Processing Unit,CPU),从而大幅度提高应用程序的运行效率。通常情况下,当使用垂直伸缩时,可以用单个大型系统处理来自用户的大部分或所有请求[3]。
2.2 水平伸缩
通过水平伸缩,应用程序的负载和收到的请求通常被分配到一组位于负载均衡服务器后面的普通服务器上。当很多不同的用户向应用程序发出大量请求时,负载均衡服务器会将这些请求均衡地分配到各个普通服务器上,然后跨服务器集群进行会话状态管理。为了给用户带来最好的使用体验,通常会采用两种类型的水平伸缩,一种是手动伸缩,另一种是自动伸缩。
2.2.1 手动伸缩
当能预测到即将会出现一个大幅增加Web应用负载的任务时,用户可以通过手动伸缩的方式增加Web应用的规模,以便能更快地处理这个即将到来的大型任务[4]。例如,某公司即将要举办一个促销活动,以吸引更多消费者使用该公司的购物网站。为了让Web应用适应这种大规模并发访问需求,开发人员应该手动地向现有的服务器集群添加更多的应用服务器。此外,大多数PaaS服务商都允许用户使用一个简单的命令来实现此功能。
2.2.2 自动伸缩
自动伸缩通过设置Web应用自动伸缩条件来实现。当符合条件时,Web应用就可以自动实现伸缩。伸缩条件可以基于Web应用正在接收的并发HTTP请求的数量或者Web应用正在使用的CPU的数量来定义,这使得开发人员能够在Web应用的负载较高时自动向负载平衡集群添加新的服务器。自动伸缩提供了一种无需用户干预的伸缩方法,以确保及时满足用户的需求。当负载量动态变化幅度很大,导致用户无法预估Web应用的负载量时,采用自动伸缩模式最为合适。
3 Web应用程序的状态
大多数提供PaaS模式的云端服务商都要求用户基于当前的PaaS平台重新开发项目。因为平台的文件系统不允许在其上保存应用程序状态或资源,所以将现有或者过去遗留的Web应用移植到PaaS平台是非常困难[5]。如果要获得云端基础设施提供的全部优势,那么用户就需要在项目中使用无状态应用程序设计,要实现这一点,需为新应用程序提供下文所述3个功能。
(1)允许应用程序服务器或容器在整个集群中维护用户的会话状态,而不是依赖于文件系统来保存这些状态数据。(2)使用基于云的存储服务,并通过为存储服务提供的表述性状态转移风格应用程序编程接口(Representational State Transfer Application Programming Interface,REST API)来实现各种资源的传输。不要将文件或用户资源保存到部署代码的服务器的物理文件系统上。(3)如果无法访问和使用云存储API,就要借助数据库来存储与用户相关的资源。
通过上面的分析可知,用户应该设计无状态的Web应用程序并部署到云端,这类应用不会在文件系统上存储用户资源。而对于遗留的或已开发完成的应用,请选择同时支持有状态和无状态应用程序的PaaS服务。
4 云端Web应用的数据库
现在,几乎所有应用程序都依赖于各类后端数据库来存储和检索信息。当开发云端运行的Web应用程序时,还必须考虑将要使用何种数据库以及这些数据库所在的具体位置,即该数据库是应该与应用程序托管在相同的服务器上,还是将这个数据库托管在单独的服务器或容器上[6]。
通常情况下,Web应用依赖的数据库通常都位于防火墙之后,而前端界面则部署在公有云上,可以选择以下的两种方式来高效访问需要在前端呈现的数据库信息。(1)选择一个允许用户通过远程虚拟私有云(Virtual Private Cloud,VPC)连接数据的PaaS云端服务商。(2)通过部署在PaaS基础设施上的一组经过身份认证的REST API与数据库进行通信。
当然,通过这两种方式从外部的云端应用连接到公司防火墙后的数据库时,都存在固有的安全隐患。为了避免出现安全相关的问题,用户可以选择一个允许云端应用程序部署在非多租户环境上的PaaS云端供应商。
如果应用程序没有连接到公司内部数据库的需求,那么数据库的选择就非常自由和灵活。建议将这类数据库部署在与应用程序距离较近的单独容器或服务器上,可以实现独立于Web层伸缩数据库的功能。此外,还要选择一个支持高效伸缩的关系型或非关系型数据库。
5 Web应用部署的地理位置
云计算最大的优势是可以在世界各地部署Web应用基础设施,而几乎不用花费任何前期成本。例如,采用传统方式在中国上海和美国纽约同时部署一个Web应用,需要耗费巨大的前期成本购买硬件和数据中心,而借助云端提供的基础设施可以轻松地跨多个地区部署Web应用程序,并且不用花费任何前期成本[7]。当然,对于那些用户数量有限的简单Web应用而言,完全不需要这样做。但是通过将Web应用部署到尽可能接近每个客户的多区域位置,就更能提升客户的满意度。另外,如果再结合云端提供的手动或自动伸缩功能,那么将会获得比在传统IT基础设施上部署Web应用更优的效果。
综上所述,要选择能够支持在全球多个地区部署和弹性伸缩Web应用基础设施的云端服务商,以确保每个客户在使用Web应用时获得更好的体验。
6 创建和使用基于REST的Web服务
在云端部署Web应用可以获得很多优势,其中一个显著的优势是能够独立地伸缩Web层和数据库层。另外,还可以将核心业务逻辑改写为可以供前端代码调用的Web服务,进而实现Web服务层独立于数据库和前端表现层的单独伸缩[8]。将Web应用的核心逻辑与前端表现层分离,为Web应用的开发提供了一个全新的思路,如可以使用Node.js和Vue.js这类平台或框架创建单页面Web应用。
7 实施持续集成和持续交付
在DevOps思想的指导下,为了实现Web应用的快速交付,将Web应用部署到云端的基础设施上时,需确保在现有的构建系统中包含了持续集成和持续交付(Continuous Integration/Continuous Deployment,CI/CD)的工作流,以便可以在不同的环境中部署Web应用的代码。如今大多数的构建系统都为一些顶级云端服务商提供了各种插件,这使得用户配置应用程序的部署规则变得更加容易。
选择一个满足上述所有要求的云端服务商,然后在平台上添加CI/CD工具。选择的云端服务商应该允许部署用户的构建系统,或者具有轻松地与部署在云平台之外的系统进行集成的能力。
8 基于容器的部署
当前,Web应用越来越流行基于Docker容器的部署。Docker是一个用来开发、交付和运行应用程序的开放平台。使用Docker可以将应用程序与基础架构分离,以便快速交付软件。在Docker的支持下,用户能够以管理应用程序的方式来管理基础架构。通过Docker快速交付、测试和部署代码,可以显著缩短编写代码与在生产环境中部署和运行代码的时间间隔。
9 结 语
在云端部署Web应用的优势非常多,开发人员应该在日常的Web应用研发和部署中充分利用这些优势,以使自己的Web应用拥有更高的稳定性、更大的可伸缩性以及更完善的安全性,同时还要善于使用云端容器技术来提升Web应用部署的可靠性和灵活性,并且降低Web应用部署和维护的成本。