无服务器会成为企业应用开发的下一个大事情吗?

无服务器是目前软件架构模式中的热门话题之一,与软件工程中的许多其他术语或趋势一样,无服务器也没有明确的定义。这篇文章中介绍无服务器及示例。此外,还将探索无服务器的潜力,并讨论无服务器相关的一些争议。


什么是无服务器
根据MartinFowler.com定义:

无服务器架构指的是严重依赖于第三方的服务(后端即服务或“BaaS”)的应用程序,或者是指在短暂容器中运行的自定义代码(函数即服务或“FaaS”)

简单来说,如果你没有力量自己维护或管理系统来运行你的应用程序,那么你可以选择云平台根据使用情况付费,同时能自动获得所需的高可用性、可扩展性和容错能力。从你的角度来看,你正在运行无服务器应用程序。

你作为在无服务器环境中运行的应用程序的所有者,可以将100%精力专注于业务逻辑,而无需担心其运行的基础架构,以及应用程序周围的其他非功能性需求,如高可用性,故障容忍度和可扩展性。


无服务器只是炒作吗?
如果你是无服务器的新手并且正在考虑将其作为架构,那么这个问题可能是你遇到的主要难题之一。是的,无服务器现在是一种炒作,但在考虑过去以及技术如何发展之后,我个人认为它不仅仅是一个短期炒作,而是至少会在未来3 - 5年内一直这样。无服务器周边的技术将被更改或替换,但无服务器背后的概念不会变。

技术如何实现无服务器化?
在解释无服务器功能有多强大之前,让我们先看看IT在过去几年中是如何发展的。

“你必须了解过去才能理解现在。” - 卡尔萨根
这就是它随着时间的推移而演变的方式......

1989-1991-由Tim Berners-Lee爵士发明的万维网
1991-1995 - 裸金属时代
1995年 - 网络托管的发明
1999年 - Salesforce推出了软件即服务(SaaS)概念
2001年 - VMWare发布ESXi,“服务器虚拟化”成为一件大事
2002-2006 - AWS诞生(IaaS),人们开始谈论“云计算”
2009年 - Heroku和“平台即服务”(PaaS)的发明
2011 - Envolve / Firebase,实时数据库即服务
2012年 - Parse.com和第一个后端即服务(BaaS)
2013年 - Docker,“容器优于虚拟机”
2013-2015 - Kubernetes / Swarm / Nomad / CoreOs(大规模容器)
2014年 - 推出AWS Lambda(FaaS)
(参考 -  http://www.computerweekly.com/feature/A-history-of-cloud-computing)

随着AWS lambda的诞生,无服务器这个词与FaaS一起出现在舞台上。虽然我们将Lambda视为无服务器的起点,但容器化是无服务器运动的第一次浪潮。随着Docker化概念的深入,世界领先的云服务提供商能够为其客户提供“按使用付费”的概念,以及使用其基础设施实现业务所需的大多数非功能性要求。

无服务器应用程序的关键特性
无服务器应用程序有四个关键特征:

1. 没有服务器管理 - 顾名思义,对于无服务器应用程序,应用程序所有这边端没有涉及任何物理服务器。如果你是应用程序所有者,使用无服务器后你不会不知道你的应用程序运行了多少台服务器及其物理位置。

2. 灵活的扩展 - 由于你不了解物理服务器层,因此你不必担心其可扩展性。你的应用程序将按需分配更多资源,以管理所需的容量级别(可以是处理,内存,磁盘,数据库存储等)。

3. 高可用性 - 冗余和容错是无服务器框架的内置功能。你无需保留自己的服务器即可使应用程序具有高可用性。如果存在处理节点故障,则底层框架将自动为你生成一个新节点或多个节点,你根本不会感觉到任何东西发生。

4. 永远不用为空闲付费 - 在无服务器环境中,你永远不会为空闲时间付费,这是成本考虑的关键优势之一:-)

FaaS和无服务器都是一样的吗?
这是当前的一个热门话题,因为有些人声称FaaS是无服务器概念的技术实现,而有些人认为无服务器不受FaaS限制,而是更广泛适用的概念。我同意后一组,让我解释一下为什么......

FaaS只是无服务器架构的事件驱动处理部分,对于应用程序,还有许多其他必需的构建块,例如数据持久性,数据流,消息传递,用户管理等等,以提供端到端的功能。最重要的是,可能存在一些没有FaaS组件的应用程序,但仍然可以将其视为无服务器应用程序。

例如,如果我们需要一些静态Web托管,那么现在我们可以在不考虑物理服务器的情况下做到这一点,这要归功于世界领先的云服务提供商。如果我们将AWS视为我们的云服务提供商,我们可以将我们的网页内容托管在S3存储桶中,并启用静态Web托管来托管我们的网页。要使其完整,你可以使用Route 53 for DNS和CloudFront for CDN做CDN加速。

另一个例子是具有胖客户端的Web应用程序,它将仅使用后端服务进行身份验证和实现数据持久性,你可以自己实现此类应用程序,而无需拥有自己的物理服务器或FaaS组件。你可以使用许多云端服务进行身份验证和数据持久性。

无服务器将成为未来吗?
在回答这个问题之前,我建议你查看此页面,这是AWS页面的产品部分。如果仔细观察,大约有100个“提供服务的产品”,涵盖整个软件开发生命周期,从开发到部署和维护。

你如何看待AWS的愿景?我坚信他们将推动这项改变世界的努力,以便我们能够在他们的解决方案之上完全开发,测试,部署和维护我们的应用程序。

如果你还没有准备好相信我,请看看在过去两年内AWS服务的增长情况,从基础架构的角度来看,他们正在迅速扩展其范围并增强其产品,以涵盖软件生命周期过程中的几乎所有要求。是的,其中一些服务尚未100%完成(其中很少一部分已在过去两个月内发布)并且完全可以替换为内部部署产品。但是,在未来2 - 3年内,他们将确保你在为应用程序开发,部署和维护选择基础架构之前不必考虑云产品。

那么,这些云服务提供商在哪里进行软件开发和维护?当然,他们的目标是在无服务器方法下覆盖所有可能的场景,并为他们的客户提供一个舒适的区域,以确保他们只需要专注于他们的业务逻辑,并将能够充分发挥其潜力。

FaaS能否达到所需的容量水平?
现在你可能会想到这一点 - 如果我们要转向无服务器范式,FaaS有多大能力促进所需的处理能力水平?让我用一个示例FaaS产品来解释这一点,AWS lambda(当然AWS不是本节中唯一的主要参与者,但我选择的是我更熟悉的那个:-))。是的,如果你考虑AWS lambda的当前限制/约束,你可以轻易地争辩说AWS lambda没有能力有助于许多常见的处理方案。但是,对我来说,几乎所有这些限制都只是软限制,完全可以根据客户要求轻松放宽。相信我,将来,他们肯定会扩展这些限制,以确保lambda能够覆盖至少90%的案例。

最近的一份报告称,到2021年,FaaS市场预计将增长到32.7%。这仅适用于FaaS;如果你看一下无服务器范例的完整图片,你就会明白它有多大的潜力。

结论
无服务器目前是一个热门话题,在未来几年内肯定会成为一个重大事情。在未来,你不必担心基础架构,因为你的完整软件生命周期将取决于云服务提供商。如果你热衷于了解该技术,我欢迎你熟悉无服务器范例和这些云产品。


Will serverless be the future of enterprise applic