一、serverless

serverless的两种解读:

  • 一种软件系统架构方法,通常称为serverless架构,例如knative
  • 一种产品形态,称为serverless产品,典型有Faas,Baas

其中Baas是业务逻辑在客户端完成,云端只需要用到数据库或身份认证。

Faas服务器端逻辑仍由应用程序开发人员编写,运行在无状态计算容器中,这些容器是事件触发的、短暂的(可能只持续一次调用),并完全由第三方来调用。最有名的就是现在比较火的云上的Lambda服务。

二、云函数产品

云函数给用户提供了标准的 Runtime,同时在应用层也帮用户管理了请求的调度。开发者只需要聚焦在核心业务逻辑开发,按照函数的粒度去编写代码。而与底层硬件相关的资源维护,则交给更加专业的云厂商来搞定。云函数产品的技术特点:

  • 事件驱动:按需启动,事件可以是一次 http 请求,一个文件上传,一次数据库条目修改,一条消息发送
  • 单事件处理:一次只处理一个事件,无需在代码内考虑高并发,通过云函数实例的高并发实现业务高并发
  • 自动弹性伸缩:云函数自动弹性合适的处理实例来承载业务
  • 无状态开发:云函数环境中无法保存状态数据,依据外部产品

云函数产品组件架构如下:

用户虽然只需要关注绿色部分和业务相关的代码实现,但是平台也需要提供强大的开发者工具来保障开发和使用体验。如云函数推出的 Serverless 本地开发工具、VS Code 插件,与 CODING 联合推出的 Web IDE、DevOps 平台等,均能很大程度上提升开发、部署效率,实现本次开发、本地调试、联动云端调试、本地部署、版本发布等能力。

less 函数计算宽度 serverless 函数计算_异步调用

同时,云函数也完善了配套的监控和告警机制,提供如调用次数、内存使用、并发使用、超时、代码错误等多维度的监控和告警能力。这些基础设施、资源管理、安全、容灾等能力,是云函数平台必备的基础能力,也是开发者关心的核心能力。

三、阿里云函数计算架构

阿里云函数计算产品全景:

less 函数计算宽度 serverless 函数计算_开发者_02

下图为阿里云函数计算架构:

less 函数计算宽度 serverless 函数计算_异步调用_03

 

API服务层完成身份验证,元数据的读写等功能。同步函数调用直接获取资源信息进行计算,异步则通过消息分发处理。过程中需要考虑

  1. 安全隔离,访问控制问题
  2. 预期/非预期中断的高可用
  3. 实时弹性伸缩

 四、百度函数计算产品EasyFaaS

EasyFaaS是一个依赖轻、适配性强、资源占用少、无状态且高性能的函数计算服务引擎。核心功能如下

less 函数计算宽度 serverless 函数计算_异步调用_04

下图为EasyFaas架构图:(EasyFaaS 以单 Pod为最小服务单位,每个Pod中包含3个容器,分别为 controller、funclet 和 runner-runtime。)

less 函数计算宽度 serverless 函数计算_less 函数计算宽度_05

  • 提供基于事件机制,按需弹性伸缩的计算能力。
  • 支持多种语言运行时,开发者只需使用适合的语言编写自定义函数,无需管理底层基础设施。
  • 负责用户容器的全生命周期管理。
  • 支持用户配置函数的容器资源容量,提供动态的容器容量调度。
  • 支持同步和异步两种调用模式,支持多种可扩展的事件触发器。
  • 支持可自定义的函数管理服务。
  • 支持自定义语言运行时。
  • 支持多种运行平台,包括Docker、Kubernetes及裸机等。

 五、阿里云函数计算试用

1、创建服务,创建函数

less 函数计算宽度 serverless 函数计算_触发器_06

其中,触发方式有两种:

  • 事件触发:可以通过定时器,函数计算 SDK/API 和其他阿里云服务的触发器来触发函数执行。
  • HTTP请求触发:通过发送 HTTP 请求触发函数执行,主要适用于快速构建 Web 服务等场景

2、管理函数

 

less 函数计算宽度 serverless 函数计算_触发器_07

函数计算提供了按量模式和预留模式两种实例使用模式。您可以配置最大实例数来控制单个函数的资源使用上限,来防止单个函数过度调用导致的实例占用,保护后端资源,避免预期外的费用开销。同时可以通过配置最小实例数来激活预留模式实例,函数计算系统将根据配置的最小实例数为该函数常驻实例,来快速响应函数调用请求,降低冷启动的发生次数,为时延敏感的在线业务提供更好的服务响应。按量模式和预留模式计费方式不同。

函数计算支持同步调用和异步调用两种调用方式。通过 InvokeFunction 接口来调用函数时,您可以指定调用方式。同时不同类型的触发器,使用的调用方式也不同。例如,使用OSS 事件触发器调用函数属于异步调用。默认情况下,使用控制台的“测试”功能时属于同步调用。您可以在测试函数按钮的下拉框中切换到异步调用模式。在使用同步调用时,事件被函数处理后直接返回结果。在使用异步调用时,事件在写入到函数计算内部队列后便返回结果,函数计算系统会保证该消息被可靠地处理,并且可以在函数成功或者失败时调用其他目标

六、世纪联华serverless实现

less 函数计算宽度 serverless 函数计算_触发器_08