为了解决面临的业务问题,通常需要开发人员花费一定的时间编写完代码,再交由运维工程师确保正常的运行,整个过程下来比开发的时间要多的多。因为运维工程师不仅要清楚如何在特定的计算机上运行开发人员编写的代码,而且要确保它们在后续工作中平稳的运行——这倒像是一个永无止境的任务。为什么不把这部分工作留给别人呢?
在过去20年的发展中,IT领域的许多创新——虚拟机、云计算、容器——不必过多考虑代码运行的底层物理机器。近年来,无服务器计算也变得越来越流行。它不用了解运行代码的任何硬件或操作系统,因为所有这些都由服务供应商来提供。
什么是无服务器计算?
无服务器计算是云的一个执行模型,在这个模型中,云提供商动态地分配特定代码段所需的计算和存储资源。涉及的服务器也完全由供应商负责供应和维护。2017年,亚马逊的无服务器倡导者克里斯·芒斯(Chris Munns)在一次会议上表示,“在编写和部署代码的开发者看来,根本不需要管理或提供服务器。任何涉及到主机管理或在操作系统级别的处理,都不属于无服务器世界。”
开发人员Mike Roberts解释说,这个术语曾经用于所谓的“后端即服务”场景,即移动应用程序将连接到完全托管在云中的后端服务器。如今当人们谈到无服务器计算或无服务器体系结构时,他们指的是“功能即服务”,其中客户只编写处理业务逻辑的代码并将其上传到供应商那里。供应商负责相关硬件供应、虚拟机和容器管理,也包括多线程这样的任务。
无服务器服务是事件驱动型的,这意味着只有触发请求时才调用代码。供应商只按执行代码的时间收费,而不是对维护的物理或虚拟服务器收费。可以将这些服务创建成管道或者应用程序的组件,与容器或传统服务器上运行的其他代码进行交互。
无服务器计算的优点和缺点
无服务器计算有两个明显的好处:开发人员只需要关注代码的业务目标,而不是基础设施问题;而且企业只为它们实际使用的计算资源付费,而不是购买物理硬件或租用闲置的云服务。
这对于事件驱动的应用程序特别有优势。例如应用程序可能大部分时间处于空闲状态,但在某些条件下必须同时处理许多事件请求;或者有一个应用程序,它处理来自有限或间歇性Internet连接的物联网设备的数据。在这两种情况下,传统的方法都需要提供一个强大的有处理峰值能力的服务器,但是该服务器在大多数情况下都没有得到充分利用。使用无服务器架构,您只需为实际使用的服务器资源付费。无服务器计算也适用于特定类型的批处理,例如上传和处理一系列单独的图像文件,并将它们发送到应用程序的另一节点。
无服务器最明显的缺点是,它们不适合长期任务。大多数无服务器供应商不会让代码执行超过几分钟,但是每次启动服务时,它不会保留以前运行实例中的任何数据。还请注意,无服务器的代码可能需要长达几秒钟的时间来启动——这对于大多数用例来说都不是问题,除非您的应用程序需要较低的延迟。
无服务器也存在其他一些缺点,这可能与厂商有关。目前无服务器市场由大型商业云提供商所主导,这意味着开发人员一旦使用来自供应商的工具,如果不满意就很难切换。而且,由于太多的无服务器计算是在供应商的基础设施上进行的,因此很难将无服务器代码集成到内部开发和测试管道中。
无服务器供应商:AWS Lambda、Azure和Google云
无服务器计算始于2014年推出的AWS Lambda,这是一个基于亚马逊云服务的平台。2016年,微软也推出了Azure功能。2017年,谷歌云功能开始测试,于2018年7月正式生产。这三种服务的优势、劣势、支持的语言和处理方式略有不同。还有IBM Cloud功能也在部署中,它是基于开源Apache OpenWhisk平台。
无服务器堆栈(Serverless stacks)
与许多软件领域的情况类似,无服务器时代见证了软件堆栈的演变,这些堆栈将构建无服务器应用程序所需的不同组件组合在一起。无服务器堆栈包含要编写代码的语言环境、为代码提供结构的应用程序框架和平台启动代码的触发器。
这些内容根据供应商的不同,也有一些区别。例如对于开发语言,AWS Lambda支持 Node.js、Java、Go、C#和Python,但是Azure只支持JavaScript、C#和F#。关于触发器,AWS Lambda其中许多都是针对AWS平台的,比如Amazon Simple Email Service和AWS CodeCommit;谷歌云服务还可以通过通用HTTP请求触发。
无服务器框架(Serverless frameworks)
软件框架/软件架构对构建应用程序非常重要。Amazon有自己的软件架构,如无服务器应用模型( Serverless Application Model,SAM),其中大多数是跨平台的,也是开源的。其中最流行的是无服务器框架,例如AWS Lambda、Azure服务、谷歌云服务和IBM OpenWhisk。另一个受欢迎的产品是Apex,它的优势在于提供了更为丰富的语言环境。
无服务器数据库(Serverless databases)
无服务器计算的缺点是没有持久状态,这意味着本地变量的值不会保存。因此代码需要访问的任何持久性数据都必须存储在其他地方,大部分无服务器供应商都提供了可以与之交互的数据库。
与其他服务不同的是,无服务器数据库的数据是无限期存储的。通过配置集群,数据库所有的维护、补丁、备份、复制和扩展都将自动完成,从而大大节省成本开销。功能即服务,您只需要为实际使用的计算时间付费,并且能够根据需要对资源进行灵活调整。
三大无服务器提供商都提供了自己的无服务器数据库:Amazon有Aurora serverless和DynamoDB, Microsoft有Azure Cosmos DB,谷歌有Cloud Firestore。不过,这些并不是唯一可用的数据库。
无服务器计算和Kubernetes
容器有助于在底层支持无服务器技术,由供应商负责管理容器的开销,因此对用户是不可见的。许多人将无服务器计算视为实现微服务容器化的一种方法,甚至开始讨论后容器时代。
事实上,容器和无服务器计算可能会在未来的许多年中共存,而且无服务器服务可以与容器化的微服务存在于同一个应用程序中。最流行的容器编制平台Kubernetes也可以管理无服务器的基础设施。您可以使用Kubernetes在单个集群上集成不同类型的服务。
无服务器离线运行(Serverless offline)
这样看来,无服务器计算貌似需要与供应商签约(合作开发)才能体验,是不是感觉使用无服务器计算的前景有点吓人。但是不要担心:无服务器的代码也是可以在本地硬件上离线运行的。例如,AWS SAM就提供了一个本地运行代码的插件Serverless-offline,支持离线测试Lambda代码。快来尝试吧!
版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有