无服务器是当前软件架构模式中的热门话题之一,像许多软件工程中的其他术语或趋势一样,无服务器也没有一个明确的定义,所以在这篇文章中我们会简单介绍一下无服务器的基本概念,并围绕无服务器的几个争论点展开讨论。
什么是无服务器? 根据MartinFowler.com的定义,无服务器体系结构是指主要依赖于第三方服务(称为后端即服务或"BaaS")的应用程序或在临时容器中运行的自定义代码(功能即服务或"FaaS")。 如上说述,如果你没有维护或管理自己的基础架构来运行应用程序,并根据使用情况付费(或者不付费),同时从供应商那里自动获得所需级别的高可用性、可扩展性和容错性,那么你就正在运行一个无服务器的应用程序。作为在无服务器环境中运行应用程序的所有者,你可以将所有的精力放在应用程序业务逻辑上,而不必担心其运行的基础架构以及应用程序周围的其他非功能性需求。
无服务器只是炒作? 如果你是无服务器的新手,并且在考虑将其作为架构,那么这就会成为你需要面对的问题之一。没错儿,无服务器是现在的热门话题,但是综合了之前和之后的发展,我个人认为无服务器并不是一个短期内的炒作,至少在3-5年不是,围绕无服务器的技术或许会被改变、替换,但是无服务器的概念不会。
技术层面如何向无服务器发展? 俗话说得好,观往知来、知古鉴今,所以在解释无服务器功能如何强大之前,我们先来看看它是如何在过去几年演变的: 1.1989 - 1991年 - Sir Tim Berners-Lee发明了万维网 2.1991 - 1995年 - 裸机时代 3.1995年 web hosting 4.1999年 - 软件即服务(SaaS)概念由Salesforce引入 5.2001年 - VMWare发布ESXi,"服务器虚拟化"成为了一件大事 6.2002-2006-AWS提出IaaS,人们开始谈论"云计算" 7.2009年 Heroku提出"平台即服务"(PaaS) 8.2011年 - Envolve / Firebase,实时数据库即服务 9.2012年 - Parse.com和第一个后端即服务(BaaS) 10.2013年 - Docker,"容器比虚拟机好" 11.2013-2015 - Kubernetes / Swarm / Nomad / CoreOs(containers at scale) 12.2014年 - AWS Lambda推出(FaaS) AWS lambda诞生了,无服务器这个词与FaaS一起出现在舞台上,虽然大多数人认为Lambda是无服务器的起点,但是containerization 将无服务器迁移推向第一个高潮,随着containerization的出现,全球领先的云服务提供商开始向客户提供"付费即用"的概念以及最需要的非功能性需求,支持使用其基础架构运营业务。
无服务器应用程序的关键特性 无服务器应用程序有四个关键特征: 1.没有服务器管理 -顾名思义,对于无服务器应用程序,应用程序所有者不需要涉及任何物理服务器。如果你是应用程序所有者,那么你将不知道有多少服务器代表你的应用程序及其物理位置运行。 2.灵活的扩展 - 因为你不需了解物理服务器层,所以不必担心可伸缩性。应用程序将按需分配更多资源以管理所需的容量级别。 3.高可用性 - 冗余和容错是无服务器框架的内置功能,不必保留自己的服务器以使应用程序高度可用。如果处理节点发生故障,框架会自动为您生成一个新节点或几个节点。 4.成本控制- 在无服务器的环境中,您无需多花费时间,这是成本考虑的关键优势之一。
FaaS和无服务器是一样的吗? 这是一个趋势类的常见问题,有些人声称FaaS是无服务器概念的技术实现,还有一些人认为无服务器不局限于FaaS,而是一个更广泛适用的概念。作为我个人来讲,我更赞同后面一种说法。 FaaS只是无服务器体系结构的事件驱动处理部分。对于应用程序来说,还有许多其他必需的构建块,如数据持久性,数据流,消息传递,用户管理等等,以便提供一些端到端的功能。最重要的是有一些没有FaaS组件的应用程序,但仍然可以被认为是无服务器应用程序。 举个例子,如果我们需要一些静态的虚拟主机,我们可以做到这一点,而不必考虑物理服务器。如果我们认为AWS是我们的云服务提供商,我们可以将我们的网页内容托管在S3存储桶中,并启用静态虚拟主机来托管网页。为了使其完成,你可以使用Route 53作为DNS和CloudFront作为CDN。 另一个例子是一个 thick client的Web应用程序,它只使用后端服务来进行身份验证和数据持久化。你实现这种应用程序无需拥有自己的物理服务器以及FaaS组件,有许多服务可用于身份验证和数据持久性。
无服务器会是未来吗? 在回答这个问题之前,我建议你先去看一下AWS的产品页面,如果你仔细看,那么你会发现大约有100个"服务产品",涵盖了从开发到部署和维护的整个软件开发生命周期。 如何看待AWS的愿景?我坚信,它将改变世界,使我们能够在解决方案的基础上全面开发,测试,部署和维护我们的应用程序。 如果你现在还没有准备好,那么可以去看看过去两年中AWS服务的增长情况,他们正在迅速扩大自己的版图,并从基础架构角度提升其服务范围,以涵盖软件生命周期过程中几乎所有的要求。当然,其中一些服务还没有完全完成(其中很少是在过去两个月内发布的),并且完全可以替代内部产品。但是,在未来的2 - 3年内,他们将确保在为云应用的开发、部署和维护提供服务。 那么,这些云服务提供商在哪里进行软件开发和维护?他们的目标是以无服务器的方式来覆盖所有可能的情况,并将他们的客户放在一个舒适的地带,以确保他们只需要关注他们的业务逻辑,并能够充分发挥其潜力。
现在达到了我们所需的能力水平吗? 现在你可能正在想:如果我们要转向无服务器的范式,FaaS如何能够提供所需的处理能力。下面我列举一个FaaS产品为例, AWS Lambda。当然,很多人都可以轻易的说出,AWS Lambda没有能力来促进几乎所有的处理场景(我仍然指的是基于事件的应用程序)。但对于我来说,几乎所有这些限制都只是软限制,都可以放宽标准,未来 AWS Lambda有信心能够覆盖至少90%的案件。 最近声称,到2021年,FaaS市场预计将增长到32.7%。这仅仅是FaaS,如果你看一看无服务器的范例,你就会明白它有多大的潜力。
结论 "无服务器"目前是一个热门话题,在未来几年肯定会成为主流,你将不必担心基础设施,完整软件生命周期将取决于云服务提供商。如果你热衷于掌握最新技术,那么欢迎你来了解无服务器范例和云产品。 正如前文所说,本文中所有提出的问题都是极具争议性的,没有正确的答案。
相关主题 |