说起当前最火的技术,除了最新的区块链,AI,还有一个不得不提的概念是Serverless,可以简单理解为一种新型互联网架构。顾名思义,Serverless是不是真正意义上做到了没有服务器?为什么会出现 Serverless这种听起来有点怪的技术? Serverless的价值是什么?带着这些问题,让我们开始Serverless之旅~
1. 什么是Serverless前文讲到serverless是一种新型的互联网架构,目前尚没有官方权威的定义,相对简单准确的定义如下:
无服务器架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如AWS Lambda服务),客户端逻辑和服务托管远程过程调用的组合。
从上文定义我们可以简单拆解几个核心点:
Serverless是一种互联网架构技术
该架构模型下开发者使用第三方服务托管方式代替传统服务进程
AWS Lamdba服务是Serverless架构体系的一种实现
上文提到了AWS Lambda服务,该服务由亚马逊在2014年推出,可以认为该服务是Serverless架构模型的一个早期典型产品,但最早Serverless概念的并不是由亚马逊提出,下面我们简单来聊聊Serverless的历史。
Serverless 历史
发轫之始
2012年云基础设施服务提供商Iron.io的副总裁Ken 提出软件的未来 , 以下是原文的一段摘录:
Even with the rise of cloud computing, the world still revolves around servers. That won’t last, though. Cloud apps are moving into a serverless world, and that will bring big implications for the creation and distribution of software and applications.
12年正是云计算高速发展时期,可以说大部分开发者正在享受着从传统IDC到云上弹性资源转变带来的技术红利,云计算这一普惠科技明显带来两个好处,一是资源成本降低,二是维护成本降低,但这只是云计算的起点,正如Ken所说 "the world still revolves around servers, That won’t last" 。
那么是不是有一种技术可以架构在云计算之上,可以让计算机资源的使用者可以不再关注server(包括物理Server与服务端技术),甚至说可以不知道server的存在,Serverless顺势而生。
初出茅庐
从2012年Ken提出Serverless的概念到2014年AWS发布Lambda,这一期间可以理解为Serverless的概念期, 这一期间Serverless的概念逐步开始被人们了解,业界尚无代表产品问世。
直到14年Lambda发布,让“Serverless”这一范式提高到一个全新的层面,为云中运行的应用程序提供了一种全新的系统体系架构,Serverless开始正式走向云计算的舞台。
崭露头角
在AWS发布Lambda之后,得益于该架构高度灵活的使用模式及事件驱动模型,众多开发者趋之若鹜,与此同时众多IaaS及Pass厂商争相入市,截止到2018年初,国内外大部分巨头IaaS或者PaaS均推出了Serverless架构的框架产品,比如Google Cloud Functions , Azure Funcions, IBM OpenWhisk,阿里云函数计算等,短短数年时间Serverless商业化产品已遍地开花。
未来已来
随着容器技术,IoT,5G,区块链等技术的快速发展, 技术上对去中心化,轻量虚拟化,细粒度计算等技术需求愈发强烈,而Serverless必将借势迅速发展,发展到一定阶段必然会反哺,(可以预见Serverless技术必将促进轻量虚拟化技术如容器计算的发展)进而整个云计算生态将会协调良性发展,未来Serverless将在云计算的舞台上大放异彩!
Serverless模型
下图为Serverless, FaaS以及Event-driven模型的关系模型:
P2P,表示peer-to-peer,指代早期无服务器架构下的一种纯客户端架构
Serverless与FaaS本质上不一样,Serverless应用可以只依赖BaaS,Serverless的范围更广,可以理解FaaS是Serverless Compute,即Serverless架构模式下的服务化计算能力。
Serverless是基于事件驱动的编程范型,该模型下要求计算任务Function必须是无状态的,FaaS可以理解为给 Function 提供运行环境和调度的服务。Function 可以理解为一个代码功能块(理论上可以包含N多功能,甚至可以将一个app打包为一个Function)。
FaaS 的本质上是以程序的快速启动来实现真正的按需运行,按需伸缩,以及高可用,所以FaaS要求Function的冷启动时间是毫秒数量级。
FaaS要求运行环境具备良好隔离性。
基于以上特性Serverless/FaaS底层计算平台通常是轻量的虚拟化技术,比如容器技术docker。
阿里云函数计算FC
以下以阿里云的函数计算为例加以说明,更多内容可以参考易立大神的 基于Docker的Serverless之旅。
流程大致如下:
UI/Event/Message Driven触发事件
用户Function会package为一个docker镜像
事件调度系统配合Docker集群运行Docker容器来执行Function
AWS Lambda
不得不提的还有AWS Lambda,早期最典型和风靡的Serverless框架。
大致流程如下:
UI驱动,通过模拟鼠标点击触发事件
当触发事件增多时lambda实例自动扩容
当触发事件减少时lambda实例自动缩容
Serverless价值
低成本
运营成本,Serverless将用户的服务器,数据库,中间件委托于BaaS/FaaS,用户将不再参与基础设施及软件的维护,尤其在大规模的集群运营上成本大幅度降低。
开发成本,对比IaaS或者PaaS平台的服务器或者操作系统,Serverless的架构中,用户操作的是服务化的组件比如存储服务,授权服务等,可以缩短开发周期,降低开发难度。
真正的按需计费
Serverless/FaaS区别于IaaS/PaaS预先分配计算资源的计费方式,其计费方式通常是按请求次数及运行时间,一方面可以最大程度利用资源,另一方面真正的按需计费可以降低用户的资源成本。
高扩展
Serverless架构一个显而易见的优点即“横向扩展是完全自动的、有弹性的、且由服务提供者所管理”。
“绿色”计算
据统计,商业和企业数据中心的典型服务器仅提供5%~15%的平均最大处理能力的输出,本质上这是对社会资源的一种浪费。而在Serverless架构下,提供商将提供更细力度的计算能力最大限度满足实时需求,资源利用率将大幅度提升,可以认为相对IaaS与PaaS Serverless/FaaS是一种 “绿色” 计算。
Serverless应用场景
事件驱动以及响应式架构
IoT物联网场景中低频请求
请求对及时响应需求不够
固定时间触发计算资源利用低的业务
流量突发场景
比如短时间大流量视频转码
短周期内的流量峰值
跨云与混合云场
边缘计算
其它 ...
2. Serverless vs 云计算云计算发展看Serverless
首先,抛一个总结性观点:云计算的发展从IaaS,PaaS,SaaS,到最新的BaaS,FasS,在这个趋势中serverless(去服务器化)越来越明显,而Serveless的完善带给云计算将会是一次完美进化!
(上图可以很好的表达云计算的发展历程,Serverless的出现好比人类进化完成,隐喻云计算完成了一次华丽的蜕变!)
总所周知,云计算经历了从IDC -> IaaS -> PaaS -> BaaS/FaaS 的发展历程(这个表述可能稍有问题,IaaS,PaaS,SaaS,BasS,FaaS并不是顺时而生的,估且按照其形态做如上划分),下面对这些概念做一些基本介绍:
IaaS
IaaS(Infrastructure as a Service) 基础设施即服务,服务商提供底层/物理层基础设施资源(服务器,数据中心,环境控制,电源,服务器机房),用户需要通过IaaS提供的服务平台购买虚拟资源,选择操作系统,安装软件,部署程序,监控应用。
目前知名的IaaS平台有AWS,Azure,Google Cloud Plantform,阿里云以及开源的OpenStack等。
PaaS
PaaS(Platform as a Service) 平台即服务,服务商提供基础设施底层服务,提供操作系统(Windows,Linux)、数据库服务器、Web服务器、负载均衡器和其他中间件,相对于IaaS客户仅仅需要自己控制上层的应用程序部署与应用托管的环境。
目前知名的PaaS平台有 Amazon Elastic Beanstalk,Azure,Google App Engine,VMware Cloud Foundry等。
SaaS
SaaS(Software as a Service) 软件即服务, 服务商提供基于软件的解决方案,如OA、CRM、MIS、ERP、HRM、CM、Office 365、iCloud等,客户不需考虑任何形式的专业技术知识,只需要通过服务商平台获取软件使用即可。
BaaS
BaaS(Backend as a Service) 后端即服务,服务商为客户(开发者)提供整合云后端的服务,如提供文件存储、数据存储、推送服务、身份验证服务等功能,以帮助开发者快速开发应用。
FaaS
FaaS(Function as a Service) 函数即服务,服务商提供一个平台,允许客户开发、运行和管理应用程序功能,而无需构建和维护基础架构。 按照此模型构建应用程序是实现“无服务器”体系结构的一种方式,通常在构建微服务应用程序时使用。
IaaS,PaaS,FaaS 对比
举个例子,比如小明想开一个水果店
IDC:如果盖房子,装修,然后上架水果这些工作都是小明自己来做。
IaaS:如果小明房子是租的,装修,上架水果是自己做。
PaaS: 如果小明房子是租的,可是房子已经装修好了,但是上架水果要自己来做。
FaaS:如果有一个商家提供装修好的水果店,小明只负责把水果送过来,其余上架工作都由商家来做。
总结
从IDC → IaaS,用户不用关注真实的物理资源。
从IaaS → PaaS,用户不再关注操作系统,数据库,中间件等基础软件。
从PaaS → BaaS/FaaS, 用户可以很少甚至不用关注backend,app可以简化为一个单页面程序。
可以说,Serverless是云计算发展到一定阶段的必然产物,云计算作为普惠科技,发展到最后一定是绿色科技(最大程度利用资源,减少空闲资源浪费),大众科技(成本低,包括学习成本及使用成本)的产品,而Serverless将很好的诠释这些!
Serverless与云计算的关系
从Serverless的历史发展及现状来看,Serverless与云计算的关系可谓密切,首先,Serverless的发展起源于云计算,比如Serverless的概念的提出到普及都得力于Pass or IaaS厂商比如iron.ios及AWS,Google等。
其次,Serverless的应用依赖于第三方提供的BasS服务和逻辑运行容器即FaaS Container,而这个第三方通常是云厂商。
可以认为Serverless是一种依托并构建于云计算技术之上的技术架构!
3. Serverless vs Ops说到Serverless普遍的看法是既然没有server,那么就应该是没有运维,其实不然,实则是云计算供应商承担了后端基础结构的维护工作,本质上是Ops工作由开发者转向云计算供应商,从开发者角度看,Serverless = NoOps。
Serverless极大程度的简化了开发者的运维工作,可以理解为NoOps!
纵观运维发展历史,通俗来讲可以分为三个阶段人肉运维,自动化运维,以及未来的没有运维,下面简单阐述仅供参考。
人肉运维
运维发展的初级阶段,运维的生命周期是长于软件的生命的,如果是传统的自建服务器,从服务器,存储,网络设备采购,到系统安装软件安装,软件部署上线,系统/软件升级,系统监控,软件下线,机器维修下线等一系列工作都是通过人工干预完成的。
人肉运维成本高,收益小,在如今超大集群的规模下人肉运维已无法胜任。
自动化运维
当人力无法满足现状需求时,工具将会被创造!工具创造史就是一部简单的人类进化史,工具是这个世界的解决方案。
当人肉运维面临成本增高,效率低下,出错率高等种种问题时候,运维工具便会被创造并且广泛使用,在如今计算能力爆发的时代,自动化运维已然成为当今时代运维的解决方案。
在自动化运维发展趋势下催生许多新的概念,比如DevOps,可视化运维,AiOps,此处不做详细介绍。
自动化运维在云计算占据主导市场的背景下发挥了重大作用,极大程度的提高了开发及运维效率,降低了运维成本!
NoOPs
如果说Serverless是云计算发展的必然趋势,那么NoOps将会是运维的发展趋势,Serverless带来一种新的交付模式,这种模式下用户需要管理的只有Code,这种模式将彻底改变软件开发及运维流程,开发者需要做都唯一事情就是使用BaaS或者FaaS托管其Code,所有的运维操作都将消失或者由服务提供商承担,比如Server down后快速自动恢复,自动扩缩容等。
无疑,Serverless的发展将会促进NoOps时代的到来!
4. Serverless vs DevServerless的出现从开发角度来看可以理解为“代码即基础设施“ 时代的降临,在开发者的世界里不再有CPU,RAM,对于开发者来说构建一个cloud app他们唯一需要关注的就是Code!
Serverless的出现将降低开发者的入门门槛,同时提升开发者的研发效率!
5. Serverless的未来技术视角
细粒度的计算资源
目前主流的Serverless/FaaS技术底层的计算环境通常是容器比如Docker,容器技术是一种比硬件虚拟化更轻量的实现,用户可以在虚拟机上运行大量的容器,可以更大程度的利用计算资源。
而Serverless的需求可能是更细粒度的计算资源,比如最近华为发布的CCI产品容器的规格已经支持千分之一核,相信千分之一核只是开始,未来Serverless在细粒度资源使用上将发挥无限可能。
统一的容器调度模型
从当前Serverless/FaaS及容器生态的发展来看,容器基本都是运行在云主机之上比如aws的ec2,阿里云的ecs。
由于云厂商实现方式及不同产品的差异性,容器的调度框架选择不尽相同,比如有的厂商其Serverless产品是基于kubernetes管理云主机集群进行容器编排及调度比如华为的CCI,而有的产品比如阿里云的函数计算产品是基于自研的Agent进行容器调度。那么为什么没有一种产品可以为不同的Serverless服务提供通用的容器调度能力呢?
我们相信未来一定会有一个产品横空出世,它将作为Serverless的基础设施驾着七彩祥云降临~
产品视角
Serverless生态圈多样化
Serverless的发展必然会带动其周边生态的完善,比如BaaS及FaaS产品的形态将多样化输出,举个例子:
Serverless架构下用户的Code是没有服务端的,而这些服务将由云厂商以BaaS的服务形态提供,随着Serverless的发展,必然会催生多样化的BaaS服务。
Serverless产品简单化
Serverless是云计算普惠科技的重磅技术!Serverless出现将开发者从复杂的硬件及软件环境中解脱出来,而未来可以想象Serverless的产品将会以更加简单的方式呈现给用户,举个例子:
大家熟知的乐高积木,不同的小零件按照不同的方式组装可以得到作品最终是多样化的。
而Serverless天生具备这种优势,可以想象如果Function以服务化的方式抽象,开发者开发一个Cloud App需要做的事情就是在无数的Function里面挑选自己需要的“积木“,然后通过一种可视化的工具进行"积木"组合!
本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。