一、什么是Serverless

  定义:Serverless是一种无服务器的架构,区别于传统的Baas,SAAS,作为FAAS(函数即服务)而存在,函数由事件驱动触发并按需调用。

   按需调用:区别于传统的7x24小时运行的服务,Serverless只会在特定事件触发时运行,并按需收费。

   无需关注基础设施和底层资源:虽然称为无服务器的架构,但并不是完全的无服务器,只是人们不再操心运行所需的资源,只需关注自己的业务逻辑,即函数,并且为实际消耗的资源付费,而对于VM,容器和资源(如CPU,内存等资源)则完全交由第三方服务或平台去自动化管理。

二、Serverless特性

  (1)降低启动成本:区别传统的服务启动一堆初始化等动作,Serverless只需快速拉取容器部署准备一个函数的资源并启动。

  (2)新一代微服务:粒度细化至函数的服务

  (3)安全性高:对于虚拟机,容器,网络等资源的安全问题,完全由第三方采用高可靠的方式实现,用户无需关心。

  (4)提高开发效率:开发者只需关心自己的函数实现,免去了其他后顾之忧。

  (5)拓展性强:Serverless具备的弹性伸缩能力,为函数的自拓展和容灾提供了便利。

三、业界主流产品

  (1)AWS :提供一系列完全托管的服务,可以使用它们构建和运行无服务器应用程序。并提供了计算、API网关适配协议,数据库、存储、流处理、消息排队,公共服务等能力

  认识与设计Serverless(一)-LMLPHP

  (2)Microsoft Azure:AWS 支持 Serverless 架构一段时间之后,Azure 作为竞品正稳步发展中。除了支持Serverless的众多特性外,Azure 提供快速构建Web端,移动端应用程序,以及实时流数据处理,文件处理和计划任务的自动化,更多内容请参考https://azure.microsoft.com/en-us/services/functions/

  认识与设计Serverless(一)-LMLPHP

  (3)OpenWhisk :OpenWhisk 是一个开源项目,具有完整的可视性 FaaS 功能,可扩展也可定制。由于开源可拓展这一特性,自发布以来得到了广大开发者的欢迎,但是目前OpenWhisk的产品和社区还在不断完善中。

  认识与设计Serverless(一)-LMLPHP

四、Serverless弊端

  (1)不适合业务逻辑复杂的应用:Serverless比较适合简单,运行时间短的应用或小程序,目前也没有成功的复杂系统的案例。

  (2)冷启动时间:函数在执行之前,都需要经过拉取容器,制作镜像并部署的过程,此过程占用函数调用的时间较长。

  (3)代码调试困难:目前已有的Serverless云开发平台,都面临一个巨大的问题,即在线debug代码,这是很多云开发平台共同的瓶颈。

  (4)CI/CD困难:在应用自动构建,代码自动构建上都有不小的难度。

五、Serverless设计原则

  (1)单一责任:函数应尽量保持执行责任单一,尽量少的对众多其他服务或函数形成依赖。

   (2)执行时长控制:Serverless是按需执行,按调用次数和时长来收费,所以设计的函数应尽量在毫秒或秒以内,减少递归等,避免造成资金浪费

03-30 10:23