Serverless
无服务器概念最早在2012年提出来,2014年AWS推出了Lambda服务,2016年开始各大厂商纷纷发力,到底什么是Serverless呢?
Serverless直译是无服务器的意思,无服务器架构并不是指不需要服务器,传统的软件开发流程中,软件开发人员需要实际的考虑真正的服务器,因为应用是跑在这个服务器上的,服务器之间相互通过网络通信,通过IP去互相发现,如果服务器down掉,也需要去考虑应用的恢复等等问题。而无服务器架构中应用和服务完全依赖于第三方服务,比如认证,存储,数据库等等,可以称为后端即服务(BaaS),整体采用云平台提供的生态系统。在AWS的Lambda退出后,无服务器架构也认为是应用运行在无状态计算的容器中,容器由事件触发的短时间的,只是一次调用,完全由第三方管理。
实际上不管是哪种角度去看可以了解到无服务器架构很大的依赖于云平台的基础特性,高可用,X即服务(XaaS)等,这样应用的开发者需要的各种后端服务只需要从云中获取接口使用即可,而所有的通信都是基于事件、消息的,各个服务和应用可以完成解耦,这样开发者完全不用考虑是否存在服务器,在不需要提供、管理服务器的状态下运行自己的代码。
FaaS
函数即服务(FaaS)我理解为是Serverless的一种具体或者是实现,云当中提供了各种各样的XaaS,但是FaaS的主要区别在哪?我认为是粒度,IaaS在于基础设施,PaaS在于平台,而开发者所需要的各种后端服务在云中都可以拿来即用的时候,开发者只需要关注自己的代码和逻辑就可以了,而代码和逻辑的更进一步的
粒度划分就是函数,各种语言都是各种各样的函数组成的。不考虑服务器的情况下,开发者只需要关注自己的逻辑就可以了,无服务器架构下,鼓励开发者将开发重点放在明确定义的业务逻辑单元上面,不必过早的考虑如何部署以及扩展的相关内容,这样的结果就是将开发重点放在了单个功能或者模块上,而不是一整个服务,这样区别于传统的软件模式,通过事件触发后执行的不是一整套服务,而只是最基本的业务单元,创建或者删除。同时降低了成本,不必要为没有运行自己代码的其他时间买单,基于函数级别的计量可以达到毫秒级。
特点
函数即服务并不是适用所有的软件开发的,函数即服务的执行时间短,所以长链接不适合;启动延迟,FaaS中的代码通过事件触发,如果执行结束一段时间没有再次触发,执行函数的容器会销毁,再次启动会有启动的开销,增加启动延迟,所以目前不适用低延迟的程序,比如金融交易等。除此之外,对于代码管理,目前我没有想象到合理的方式,应该也是一个难题。
目前各大厂商的无服务器实现
目前来看,最成熟的也是最早的AWS的Lambda了,除此之外微软有Azure Function,Google有Cloud Functions,IBM的Openwhisk目前是开源的,还有Iron.io,目前知道的就这些,国内的阿里在昨天(2017.4.26)也推出了自己的函数计算。
未来
函数即服务目前来看使得开发者更关注自己的业务,使非代码层面的其他各种服务都云化并隐藏起来了,对软件的开发和迭代有很大的帮助,由于粒度更小,所以高并发下的横向扩展的效率和性能比IaaS和PaaS下的有更大的优势,不过不同厂商的服务应该都更多的依赖于自己的平台,迁移就更加困难了,不知道IBM的Openwhisk开源的姿态是否会更加开放。