无服务器计算与容器


在过去的几年里,无服务器计算得到了广泛的应用,所有主要的公共云提供商都支持无服务器架构。AWS Lambda,Azure函数和Google云函数提供了一个抽象层,以部署小段代码,而不是单片应用程序,并进一步简化了公有云消费。但是,无服务器体系结构并不是适用于所有的应用,有其自身需要考虑的问题。

虚拟机,容器和无服务器都是资源虚拟化的不同机制,并且已经演化为简化和管理资源。从一种机制转移到另一种机制通常涉及到重要的工作流转换,在选择正确的计算模型之前需要小心。

传统上,VM是事实上基础设施虚拟化的标准。虚拟机管理程序用于虚拟化硬件资源,操作系统不知道底层资源管理。对于给定的hypervisor,每个VM都有自己的操作系统,并且hypervisor虚拟化硬件,使得每个VM都相信自己有一组专用的资源。

随着容器的蓬勃流行,出现了一种新的资源利用方式,即虚拟化操作系统本身而不是物理硬件。VM由整个操作系统和应用程序特定的库组成,但是容器只包含运行应用程序所需的库,所有容器共享一个操作系统。

进入无服务器计算。无服务器计算是操作系统之上的另一个抽象,它提供了一种机制,可以在许多较小的部分中运行应用程序。它提供了执行应用程序任务的功能或模块,这些任务可以按需执行,而无需担心底层操作系统和硬件基础设施。这些任务通常是短期的,并根据应用程序的需求定期运行。与云计算需要物理硬件的方式类似,无服务器计算也需要服务器来执行任何应用程序。

利益似乎无穷无尽;采用无服务器可以降低成本,加快部署时间,提高可伸缩性,并减少过度劳累的IT团队的管理时间。无服务器对于支持各种微服务也很棒,并且很受开发人员的欢迎。

Astudy conducted last year by New Relic70%的企业已经将大量工作负载迁移到公有云。其中39%使用无服务器,40%使用容器,34%使用某种容器编排。这指出了无服务器技术的采用现在是如何与容器相匹配的,但目前还不十分清楚的是在生产应用程序中的使用程度。

另一项研究来自Cloudability显示基于2017年末的数据,容器和无服务器计算服务的采用每季度以三位数的速度增长。具体而言,对于亚马逊网络服务用户来说,2017年第四季度,容器的采用率增长了246%,上一季度增长了206%,大多数客户倾向于Kubernetes,将其作为一种受欢迎的服务。这项研究还显示,云用户对无服务器计算的采用有了巨大的增长,在被跟踪的站点中增长了667%。无服务器仍然对组织有吸引力,因为随着公司继续构建云原生架构,它不需要对基础设施进行管理。

让我们考虑两个不同的用例,以找出无服务器和基于容器的体系结构的优缺点。

餐厅审查和预订申请

我们的应用程序设计将由两个数据库组成,分别存储与餐厅评论和预订事务相关的信息。我们的应用程序浏览器应该能够执行基于某些关键字的餐馆搜索,提交餐馆评论和预订一张桌子。这样的应用程序的无服务器体系结构可以如下所示设计:数据库即服务(DBaaS)使用DynamoDB和RDS用于餐厅详细信息和预订。AWS Lambda提供FaaS(功能即服务)来执行这些任务:

  • 餐厅搜索
  • 餐厅评论
  • 餐厅预订

AmazonAPI网关被用作HTTP服务器,将请求重定向到上面的Lambda函数。这些函数是短暂的任务,可以按需调用并在执行后终止。此应用程序的无服务器体系结构消除了物理服务器,系统管理员和过度供应资源的需要,以处理高峰用户流量场景。

基于容器的体系结构也可以用于此实现,但它将涉及另一个容器编排层的开销以及一个可以处理餐厅任务并取代API网关的接口。此用例的无服务器架构允许企业通过简单地添加新的Lambda功能和按需扩展应用流量来引入新特性。

持续集成和持续部署(CI/CD)管道

CI/CD管道是以小的增量频繁地交付现代软件的关键组件。作为CI/CD管道的一部分,每当进行任何代码更改时,都需要重新构建软件,执行回归和功能测试,并在需要时重新部署软件。这似乎是一个完美的适合无服务器架构,可以开发如下所示。

如果构建任务开始花费大量时间,或者测试涉及长时间运行的操作,则无服务器体系结构可能无法工作。所有公共FaaS提供商(如AWS,Azure和Google Cloud)都有一个允许运行任何给定任务的最长持续时间(300到540秒)。对于此类不可预测的长时间运行任务,使用基于容器的体系结构运行是有益的,该体系结构可以在任何给定时间点执行后关闭任务。可以如下所示构建CI/CD管道的基于容器的体系结构:

它涉及部署容器编排器,如Kubernetes,它可以在分布式环境中高效地运行容器。基础设施编排工具Chef用于与Kubernetes协调,并在需要时调度容器。用户仍然可以选择通过在云中运行容器来消除服务器管理。

寻找企业中的平衡

比较容器和无服务器计算,就像比较在本地数据中心内部运行应用程序还是在云中运行应用程序一样。归根结底,必须有人管理基础设施并为此付费。容器最适合于构建无服务器计算框架,并减轻最终用户的基础设施管理--但这是有代价的。

用户需要在成本和复杂性之间找到一个平衡点,以便无服务器计算能够证明卸载基础设施管理的额外成本是合理的。无服务器计算和FPaaS(function platform as a service)最适合在公有云中运行应用程序,容器在将内部硬件资源转换为私有云中非常有用。

这些研究并没有说谎--容器和无服务器计算都在蓬勃发展,而且还会继续下去。最后哪一个会赢?