无服务器是当前软件架构模式中的热门话题之一,像许多软件工程中的其他术语或趋势一样,无服务器也没有一个明确的定义,所以在这篇文章中我们会简单介绍一下无服务器的基本概念,并围绕无服务器的几个争论点展开讨论。
什么是无服务器?
根据MartinFowler.com的定义,无服务器体系结构是指主要依赖于第三方服务(称为后端即服务或"BaaS")的应用程序或在临时容器中运行的自定义代码(功能即服务或"FaaS")。
如上说述,如果你没有维护或管理自己的基础架构来运行应用程序,并根据使用情况付费(或者不付费),同时从供应商那里自动获得所需级别的高可用性、可扩展性和容错性,那么你就正在运行一个无服务器的应用程序。作为在无服务器环境中运行应用程序的所有者,你可以将所有的精力放在应用程序业务逻辑上,而不必担心其运行的基础架构以及应用程序周围的其他非功能性需求。
无服务器只是炒作?
如果你是无服务器的新手,并且在考虑将其作为架构,那么这就会成为你需要面对的问题之一。没错儿,无服务器是现在的热门话题,但是综合了之前和之后的发展,我个人认为无服务器并不是一个短期内的炒作,至少在3-5年不是,围绕无服务器的技术或许会被改变、替换,但是无服务器的概念不会。
技术层面如何向无服务器发展?
俗话说得好,观往知来、知古鉴今,所以在解释无服务器功能如何强大之前,我们先来看看它是如何在过去几年演变的:
1989 - 1991年 - Sir Tim Berners-Lee发明了万维网
1991 - 1995年 - 裸机时代
1995年 web hosting
1999年 - 软件即服务(SaaS)概念由Salesforce引入
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(containers at scale)
2014年 - AWS Lambda推出(FaaS)
AWS lambda诞生了,无服务器这个词与FaaS一起出现在舞台上,虽然大多数人认为Lambda是无服务器的起点,但是containerization 将无服务器迁移推向第一个高潮,随着containerization的出现,全球领先的云服务提供商开始向客户提供"付费即用"的概念以及最需要的非功能性需求,支持使用其基础架构运营业务。
无服务器应用程序的关键特性
无服务器应用程序有四个关键特征:
没有服务器管理 -顾名思义,对于无服务器应用程序,应用程序所有者不需要涉及任何物理服务器。如果你是应用程序所有者,那么你将不知道有多少服务器代表你的应用程序及其物理位置运行。
灵活的扩展 - 因为你不需了解物理服务器层,所以不必担心可伸缩性。应用程序将按需分配更多资源以管理所需的容量级别。
高可用性 - 冗余和容错是无服务器框架的内置功能,不必保留自己的服务器以使应用程序高度可用。如果处理节点发生故障,框架会自动为您生成一个新节点或几个节点。
成本控制- 在无服务器的环境中,您无需多花费时间,这是成本考虑的关键优势之一。
FaaS和无服务器是一样的吗?
这是一个趋势类的常见问题,有些人声称FaaS是无服务器概念的技术实现,还有一些人认为无服务器不局限于FaaS,而是一个更广泛适用的概念。作为我个人来讲,我更赞同后面一种说法。
FaaS只是无服务器体系结构的事件驱动处理部分。对于应用程序来说,还有许多其他必需的构建块,如数据持久性,数据流,消息传递,用户管理等等,以便提供一些端到端的功能。最重要的是有一些没有FaaS组件的应用程序,但仍然可以被认为是无服务器应用程序。
举个例子,如果我们需要一些静态的虚拟主机,我们可以做到这一点,而不必考虑物理服务器。如果我们认为AWS是我们的云服务提供商,我们可以将我们的网页内容托管在S3存储桶中,并启用静态虚拟主机来托管网页。为了使其完成,你可以使用Route 53作为DNS和CloudFront作为CDN.
另一个例子是一个 thick client的Web应用程序,它只使用后端服务来进行身份验证和数据持久化。你实现这种应用程序无需拥有自己的物理服务器以及FaaS组件,有许多服务可用于身份验证和数据持久性。