导读:近期灵雀云技术专家邵明岐翻译了Mike Roberts & John Chapin所著的《What is serverless》一书的部份内容,能够说是对Serverless科普与观察的上佳素材。本文为第1篇,他首先经过回溯云计算的发展史,来找出是什么缘由致使进化出了 Serverless,而后解释 Serverless 到底为什么物,最后总结为何 Serverless 是云计算成长的必然产物,同时也是应用交付方式的巨大飞跃,很是值得一读!sql
原著:《What is serverless : understand the latest advances in cloud and service-based architecture》 做者:Mike Roberts & John Chapin 译文来源:深刻浅出谈架构(ID:deep-easy-arch) 译者:灵雀云邵明岐编程
让咱们回到2006年, 那时候尚未 iPhone 和移动互联网,Ruby on Rails 是一个很是热门的编程框架,Web 2.0 在当时是互联网最火热的名词。那时候大部分应用程序的后端服务,都是运行在托管或者自建的数据中心和物理服务器上。后端
云的诞生api
2006年8月发生的事情将从根本上改变这种模式。 亚马逊新的IT部门 AWS 宣布推出Elastic Compute Cloud(EC2),EC2是众多基础架构即服务(IaaS)产品中的第一个, IaaS容许公司租用计算资源 (主要是面向互联网应用的虚拟主机),而不是购买本身的服务器, 它还容许人们在几分钟以内就能够获取到主机资源。 EC2的五个主要优点是:服务器
1.下降人工成本网络
在 IaaS 出现以前,公司须要雇佣有专门技能的人来管理数据中心和里面的物理服务器,他们须要管理从电源和网络,到货架和安装,到修复机器的磁盘等物理问题,到设置操做系统(OS)。 经过IaaS,全部这些都消失了,而是都交给 IaaS 服务提供商,好比 AWS 或者阿里云。架构
2.下降风险框架
在管理本身的物理服务器时,常常会遭遇一些意外事件,好比硬件故障,从而致使系统不稳定或者长时间宕机,由于硬件问题很难预测,而且可能须要很长时间才能解决。 经过IaaS,客户虽然仍须要作一些工做来对抗硬件故障发生的风险,但再也不须要知道如何修复硬件, 相反,能够简单地在几分钟内申请到新机器实例,并从新安装应用程序,从而限制了这些问题的风险。less
3.下降基础设施成本异步
在大部分状况下,当您考虑电源、网络等成本的时候,EC2实例的成本比运行本身的硬件便宜,尤为是当您只想临时须要运行主机几天或几周而不是几个月时。
4.灵活扩展
考虑到IaaS带来的扩展优点,基础设施成本显着降低,经过IaaS,公司在扩展其运行的服务器的数量和类型方面具备更大的灵活性, 再也不须要提早几个月预先购买10台高端服务器,相反,您能够从一个或两个低功耗,廉价的实例开始,而后随着时间的推移逐渐扩展您的实例数量和类型。
5.交付时间短
在托管服务器的旧时代,为新应用程序采购和配置服务器可能须要数月时间。 若是你想出新的想法,而且但愿尽快尝试一下,在传统的方式下很难办到。 使用IaaS,交付时间从几个月缩短到几分钟。
基础设施外包
使用 IaaS,本质上咱们能够认为是基础设施外包的技术。 当咱们开发和运营软件时,咱们须要作的工做大体能够分为两类:一类是针对需求须要定制的工做。另一类是和其余公司都差很少,比较通用的工做。
基础设施就是属于第二种,其范围包括物理的设备,例如运行咱们机器,电路,网络等,也包括一些通用的软件功能,好比用户认证。
基础设施外包一般能够由服务提供商(SP)提供。 例如,电力由电力供应商提供,而且网络由互联网服务提供商(ISP)提供,他们经过 2 种模式来减低成本和提升效率:规模化和技术创新。
规模化
几乎全部形式的基础设施外包都经过规模化的模式来下降成本,把大量工做打包在一块儿批量作,成本比单独一件一件作,效率大大提升。例如,AWS 能够以远低于小公司的价格购买相同规格的服务器,由于 AWS 一次性购买成千上万的服务器,而不是购买几十台服务器。 一样,AWS 的每台服务器运营成本远低于自建 IDC 的公司。
技术创新
基础设施外包一般也部分归因于技术创新。好比 EC2,是经过硬件虚拟化的技术来实现的。在IaaS出现以前,一些IT供应商已经开始容许公司来按月租用物理服务器。显然,EC2 的按小时租用主机的方式更具吸引力,并且,虚拟化技术能够将物理服务器细分为许多更小的,快速启动和关闭的虚拟机(VM),这样 IaaS 才变得可行。
基础设施外包与 IaaS 的五大好处彻底一致:
• 下降人工成本 :减小人员,减小维护基础设施工做所需的时间; • 下降风险 :消除了一部分对特殊技能专家的需求,而且可以得到及时的运营支持能力; • 下降资源成本 :一样功能的成本更低; • 提升扩展的灵活性:能够访问更多资源和不一样类型的相似资源,而不会形成重大损失或浪费; • 缩短交付周期:缩短重新想法到生产可用性的交付时间;
固然,基础设施外包也有其缺点和局限性,咱们将在后面的部分介绍。
云计算的发展
云计算的发展是从IaaS开始的,好比EC2和AWS Simple Storage Service(S3), AWS是云计算早期的推进者,紧随其后的还有微软、谷歌、阿里云等。当咱们谈论“云”时,咱们一般指的是公共云,可是,咱们也看到了私有云的市场发展的也不错,好比OpenStack。
公共云以后的另一个潮流是PaaS,Heroku是当时最受欢迎的PaaS厂商之一, PaaS层面置于IaaS之上,将操做系统(OS)添加到外包的基础架构中,使用PaaS,您只需部署应用程序,云平台负责操做系统安装、补丁升级、系统级监控、服务发现等。
Heroku是公有云服务,Cloud Foundry是PaaS的一个私有云版本, 因为PaaS位于现有虚拟化解决方案之上,所以您能够在企业内部部署或者在IaaS公共云服务上部署“私有PaaS”,同时使用公共云和私有云一般被称为混合云, 可以在混合云环境中实现一个统一的PaaS平台对企业特别有用。
在虚拟机之上使用PaaS的最新方式是使用容器,Docker在过去几年中变得很是很是受欢迎,由于它能够从操做系统开始,更清楚地描述应用程序的系统需求,而管理/编排容器的云服务,一般称为容器服务(CaaS),好比Google的Container Engine和AWS的ECS。 一些私有云的CaaS是Kubernetes和Mesos,您也能够把它们搭建在公共IaaS或者私有IaaS之上运行。
就像IaaS同样,PaaS和CaaS都是基础设施外包的另一种更加高级的形式,它们和IaaS的主要不一样之处是,有更高级别的抽象性,容许咱们将运行应用的更多技术细节交给云平台,所以,PaaS和CaaS带给咱们的好处,与咱们以前列出的IaaS的五个好处彻底同样,因此,咱们能够将全部这三个(IaaS,PaaS,CaaS)组合为计算即服务(Compute as a Service)。
** Serverless时代到来**
前面解释了半天云计算的发展史,主要就是想引入主题——Serverless。它将会是云计算演进的下一个重要技术,也是另一种形式的基础设施外包,它一样具备咱们已经看到的云计算的五大优点,云厂商一样也是经过规模化和技术创新来提供这些优点。
Serverless 并不等于 FaaS
大部分人开始了解Serverless时,会有一个误区,觉得Serverless就是FaaS,好比AWS的Lambda,Google的Cloud Function。但深刻研究就会发现,Serverless实际上涵盖了一系列技术,咱们将这些技术分为两类:Backend as a Service(BaaS)和Functions as a Service(FaaS),因此,简单来讲Serverless=BaaS+FaaS。
BaaS
BaaS就是用现成的第三方服务替换原来本身编码实现或者本身搭建的服务器端组件,它在概念上更接近于Software as a Service(SaaS),不一样之处在于SaaS一般是关于外包业务流程,好比人力资源或销售工具,或者像Github这样的服务技术工做者的产品。然而对于BaaS来讲,其实是将应用程序分解成更小的组件,并将其中一部分组件用第三方提供的服务来完成,这个第三方服务一般就叫作BaaS。
BaaS服务是经过API远程调用的组件,而不是SDK,或者Library,咱们经过远程API的调用,来完成应用程序的一部分功能。这里有一个很好的例子是身份验证,许多应用程序经过本身的代码来实现注册、登陆、密码管理等功能,可是这些代码在不少应用程序中很是类似,一样的事情无数的公司和团队作过了无数遍,已经很是成熟了,能够把它们抽象出来变成一个第三方公共服务再好不过,这正是Auth0和亚马逊的Cogono等产品的目标,这两种产品都容许任何人,不须要写一行代码的状况,就能够在移动应用程序和Web应用程序上实现很是完善的身份验证和用户管理功能。
BaaS最先的时候,在移动应用程序开发中特别受欢迎,一开始人们甚至把它叫作Mobile Backend as a Service(MBaaS),可是实际上,BaaS除了被用做移动应用的后端服务以外,还能够应用到很是多的场景,好比咱们能够不须要本身搭建和维护Mysql实例,而是使用亚马逊的RDS服务,或者能够用Kinesis替换本身搭建和管理的Kafka消息队列,其余数据基础设施服务包括文件系统、对象存储和数据仓库、语音分析、以及咱们以前提到的身份验证,这些服务都是BaaS,均可以做为一个应用的后端服务的一部分。
FaaS
Serverless的另外一半是FaaS, FaaS是Compute as a Service的另外一种形式,概念上容易混淆的地方在于,AWS有时候将本身的FaaS服务,Lambda,称为Serverless Compute。
FaaS是一种构建和部署服务器端软件的新方法,只不过粒度更细,可以独立的部署某一个函数,许多人认为Serverless就是FaaS,可是实际上并不彻底正确。
咱们经过传统方式部署服务器端软件时,从主机实例开始,一般是虚拟机(VM)实例或容器(参见下图), 而后咱们在主机中部署应用程序,若是主机是VM或容器,那么应用程序是一个操做系统进程, 一般咱们的应用程序中的代码实现了一些不一样功能的操做,例如,Web服务提供检索和更新资源的操做。
FaaS改变了这种部署模式(以下图), 部署模型中少了主机实例和应用程序进程,咱们只关注实现应用程序逻辑的各个操做和函数,将这些函数代码单独上传到云供应商提供的FaaS平台。
可是,这些函数在云服务托管的服务器进程中缺省处于空闲状态,直到须要它们运行的时候才会被激活(以下图), 经过配置FaaS平台来监听每一个函数的激活事件。 当该事件发生时,FaaS平台实例化函数,而后使用触发事件调用它。
FaaS本质上是一种事件驱动的模型,除了提供托管和执行代码的平台以外,FaaS平台还集成了各类同步和异步事件源,HTTP API网关就是一种同步事件源,消息总线、对象存储或相似于(cron)的定时器就是一种异步源。
AWS在2014年就推出了Lambda,到目前为止成熟度和接受度已经得到大幅的提升,一些公司天天在使用Lambda处理数十亿的事件,到目前为止,Lambda集成了超过20种不一样类型的事件源,能够支持各类不一样类型的应用程序。
除了AWS Lambda以外,还有其余一些来自Microsoft,IBM,Google厂商的商业FaaS产品,正如咱们以前讨论的各类其余计算即服务平台(IaaS,PaaS,CaaS)同样,也有能够运行在私有云上开源FaaS项目,私有的FaaS领域目前比较早期,没有绝对的领先者,一些比较活跃的项目有OpenWhisk、Fission、IronFuncions、Serverless、Nuclio等。
** 为何FaaS和BaaS都叫Serverless?**
从表面上看,BaaS和FaaS彻底不一样,BaaS是托管应用程序的一部分依赖组件,FaaS托管应用程序的代码,那么为何咱们把它们放在一块儿,都叫作Serverless呢?
这里的关键就是不须要管理本身的服务器主机或服务器进程,彻底使用Serverless架构的应用程序,将再也不须要考虑服务器或者进程,应用程序的全部逻辑。不管您是本身编写的,仍是与第三方服务集成的部分,都运行在彻底弹性的环境中,状态也采用以相似弹性的形式存储,无服务器并不意味着服务器已经消失,这只是意味着着您再也不须要关心它们了。
Serverless带给云计算的重大变化
在云计算过去十年的发展中,咱们已经将应用程序的运行环境和通用组件,愈来愈多的外包给云厂商。Serverless也一样符合这一趋势,主机管理、操做系统管理、资源分配、扩展、甚至应用逻辑的整个组件,都外包给云厂商,在成本和运营效率方面得到了显著的提高。
可是,在应用程序架构方面,Serverless有很大的变化。以前的云计算服务,并无从根本上改变设计应用程序的方式,例如,当使用Docker这样的工具时,咱们在应用程序周围放置了一个更薄的“盒子”,但它仍然是一个盒子,逻辑架构不会发生显著的变化,在云中托管MySQL实例时,咱们仍然须要考虑工做负载所需的虚拟机资源,并且仍须要考虑故障切换。
这种状况随着Serverless而发生变化,而且是很是大的变化,FaaS本质上是和传统架构很是不同的架构类型——事件驱动模型。它的部署方式更加细粒度,以及须要将状态保存到FaaS组件以外,BaaS使咱们无需编写完整的逻辑组件,但须要将应用程序与云厂商提供的特定接口和模型集成。
那么,Serverless的应用程序架构到底有什么不一样之处,它看起来到底长什么样子? 这是咱们接下来要讨论的内容。