云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


什么是函数计算?

大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器。下图是一个应用从开发到上线的对比图:

在传统 Serverful 架构下,部署一个应用需要购买服务器,部署操作系统,搭建开发环境,编写代码,构建应用,部署应用,配置负载均衡机制,搭建日志分析与监控系统,应用上线后,继续监控应用的运行情况。而在 Serverless 架构下,开发者只需要关注应用的开发构建和部署,无需关心服务器相关操作与运维,在函数计算架构下,开发者只需要编写业务代码并监控业务运行情况。这将开发者从繁重的运维工作中解放出来,把精力投入到更有意义的业务开发上。

上图展示了函数计算的使用方式。从用户角度,他需要做的只是编码,然后把代码上传到函数计算中。上传代码就意味着应用部署。当有高并发请求涌入时,开发者也无需手动扩容,函数计算会根据请求量毫秒级自动扩容,弹性可靠地运行任务,并内置日志查询、性能监控、报警等功能帮助开发者发现问题并定位问题。

函数计算核心优势

1. 敏捷开发

  • 使用函数计算时,用户只需聚焦于业务逻辑的开发,编写最重要的 “核心代码”;
  • 不再需要关心服务器购买、负载均衡、自动伸缩等运维操作;
  • 极大地降低了服务搭建的复杂性,有效提升开发和迭代的速度。

2. 弹性扩容

  • 函数计算根据请求量自动进行弹性扩容,无需任何手动配置;
  • 毫秒级调度计算资源,轻松应对业务洪峰。

3. 稳定高可用

  • 函数计算分布式集群化部署,支持多可用区;
  • 如果某个可用区因自然灾害或电力故障导致瘫痪,函数计算会迅速切换到同区域其他可用区的基础设施运行函数,确保服务高可用。

4. 有竞争力的成本

  • 函数计算提供了丰富的计量模式,帮助您在不同场景获得显著成本优势;
  • 后付费模型按实际使用计算资源计费,不占用计算资源则不计费,资源利用率高达 100% ;
  • 预付费模型根据业务负载估算提前预购计算力,单价更低,组合使用后付费和预付费方式将有效降低成本。

函数计算使用场景

从使用场景来说,主要有三类:

  • Web 应用:可以是各种语言写的,这种可以是使用 Serverless 框架新编写的程序,也可以是已有的应用。比如可能是小程序后端,也可能是 Web API;
  • 对计算能力有很强的弹性诉求的应用:比如 AI 推理、音视频处理、图文转换等;
  • 事件驱动型的应用:比如通过其他阿里云产品驱动的场景,Web Hook、定时任务等。

函数计算已经与很多产品进行了打通,比如对象存储、表格存储、定时器、CDN、日志服务、云监控等十几个产品,可以非常快速地组装出一些业务逻辑。

函数计算工作原理

1. 函数计算调用链路

上图展示了函数计算完整的请求和调用链路。函数计算是事件驱动的无服务器应用,事件驱动是说可以通过事件源自动触发函数执行,比如当有对象上传至 OSS 中时,自动触发函数,对新上传的图片进行处理。函数计算支持丰富的事件源类型,包括日志服务、对象存储、表格存储、消息服务、API 网关、CDN 等。

除了事件触发外,也可以直接通过 API/SDK 直接调用函数。调用可以分为同步调用与异步调用,当请求到达函数计算后,函数计算会为请求分配执行环境,如果是异步调用,函数计算会将请求事件存入队列中,等待消费。

2. 函数计算调用方式

同步调用的特性是,客户端期待服务端立即返回计算结果。请求到达函数计算时,会立即分配执行环境执行函数。

以 API 网关为例,API 网关同步触发函数计算,客户端会一直等待服务端的执行结果,如果执行过程中遇到错误, 函数计算会将错误直接返回,而不会对错误进行重试。这种情况下,需要客户端添加重试机制来做错误处理。

异步调用的特性是,客户端不急于立即知道函数结果,函数计算将请求丢入队列中即可返回成功,而不会等待到函数调用结束。

函数计算会逐渐消费队列中的请求,分配执行环境,执行函数。如果执行过程中遇到错误,函数计算会对错误的请求进行重试,对函数错误重试三次,系统错误会以指数退避方式无限重试,直至成功。

异步调用适用于数据的处理,比如 OSS 触发器触发函数处理音视频,日志触发器触发函数清洗日志,都是对延时不敏感,又需要尽可能保证任务执行成功的场景。如果用户需要了解失败的请求并对请求做自定义处理,可以使用 Destination 功能。

3. 函数计算执行过程

函数计算是 Serverless 的,这不是说无服务器,而是开发者无需关心服务器,函数计算会为开发者分配实例执行函数。

如上图所示,当函数第一次被调用的时候,函数计算需要动态调度实例、下载代码、解压代码、启动实例,得到一个可执行函数的代码环境。然后才开始在系统分配的实例中真正地执行用户的初始化函数,执行函数业务逻辑。这个调度实例启动实例的过程,就是系统的冷启动过程。

函数逻辑执行结束后,不会立即释放掉实例,会等一段时间,如果在这段时间内有新的调用,会复用这个实例,比如上图中的 Request 2,由于执行环境已经分配好了,Request 2 可以直接使用,所以 Request 2 就不会遇到冷启动。

Request 2 执行结束后,等待一段时间,如果这段时间没有新的请求分配到这个实例上,那系统会回收实例,释放执行环境。此实例释放后,新的请求 Request 3 来到函数计算,需要重新调度实例、下载代码、解压代码,启动实例,又会遇到冷启动。

所以,为了减小冷启动带来的影响,要尽可能避免冷启动,降低冷启动带来的延时。

使用预留实例可以完全避免冷启动,预留实例是在用户预留后就分配实例,准备执行环境;请求结束后系统也不会自动回收实例。

预留实例不由系统自动分配与回收,由用户控制实例的生命周期,可以长驻不销毁,这将彻底消除实例冷启动带来的延时毛刺,提供极致性能,也为在线应用迁移至函数计算扫清障碍。

如果业务场景不适合使用预留实例,那就要设法降低冷启动的延时,比如降低代码包大小,可以降低下载代码包、解压代码包的时间。Initializer 函数是实例的初始化函数,Initializer 在同一实例中执行且只执行一次,所以可以将一些耗时的公共逻辑放到 Initializer 中,比如在 NAS 中加载依赖、建立连接等等。另外要尽量保持请求连续稳定,避免突发的流量,由于系统已启动的实例不足以支撑大量的突发流量,就会带来不可避免的冷启动。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文链接
本文为云栖社区原创内容,未经允许不得转载。

从零入门Serverless|一文搞懂函数计算及其工作原理相关推荐

  1. 从零入门 Serverless | 一文搞懂函数计算及其工作原理

    作者 | 孔德慧(夏莞)  阿里云函数计算开发工程师 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门" ...

  2. 从零入门 Serverless | 一文详解 Serverless 架构模式

    作者 | Hongqi  阿里云高级技术专家 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复 入门 ,即可获取 Serverl ...

  3. 带你从零入门 Serverless | 一文详解 Serverless 架构模式

    作者 | Hongqi  阿里云高级技术专家 责编 | Carol 来源 | Serverless 本文整理自<Serverless 技术公开课> 什么是 Serverless 架构?按照 ...

  4. 从零入门 Serverless | 一文详解 Serverless 技术选型

    作者 | 李国强  阿里云资深产品专家 本文整理自<Serverless 技术公开课>.关注"Serverless"公众号,回复"入门",即可获取 ...

  5. 从零入门Serverless|一文详解Serverless技术选型

    作者 | 李国强  阿里云资深产品专家 本文整理自<Serverless 技术公开课>.关注"Serverless"公众号,回复"入门",即可获取 ...

  6. 一文读懂线程池的工作原理(故事白话文)

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 前言 本 ...

  7. 彻底搞懂MOS管的工作原理及应用

    MOS管的应用 一. MOS管学名是场效应管,是金属-氧化物-半导体型场效应管,属于绝缘栅型.本文就结构构造.特点.实用电路等几个方面用工程师的话简单描述. 其结构示意图: 解释1:沟道 上面图中,下 ...

  8. 一文读懂线程池的工作原理

    前言 本文以程序员做需求的例子,比喻线程池的工作过程.以故事白话的方式展开,跟大家阐述线程池工作原理,以方便大家更好理解线程池,谢谢阅读哈~ 什么是线程池? 什么是核心线程? 什么是阻塞队列? 什么是 ...

  9. 【Web基础入门】一文搞懂HTML + CSS + JavaScript 简单了解

    html html是什么 超文本标记语言,运行在浏览器上 超文本:超级文本,如流媒体.声音.视频 标记语言:由大量的标签组成 标签:任何一个标签都有开始标签和结束标签 html不是编程语言,没有变量, ...

最新文章

  1. linux基础(8)-颜色显示
  2. WF工作流开发回顾:介绍
  3. python怎么画条形图-如何在Bokeh(Python)中绘制水平条形图
  4. 从技术走向管理的注意要点
  5. go uintptr unsafe Pointer offset() 的使用
  6. Java 时间戳转换成时间
  7. 多通路fpga 通信_基于USB通信的FPGA高速数据采集系统研究
  8. swift(不同设备适配详解)
  9. php界面框架luy_LazyPHP
  10. verilog语法检查
  11. grep -A -B -C -a -c -n -v -i等
  12. java随机不重复点名_怎样用java做一个点名器,除重复,并且用键盘输入
  13. linux so 加壳,[android] 从加壳的so文件中抽出symbols
  14. mind思维导图软件
  15. mac电脑卸载LVSecurityAgent监控软件
  16. 亲自官宣!阿里副总裁贾扬清离职,或投身AI架构创业
  17. 关于POE的知识都在这里了
  18. 太极安装的应用打开闪退_BUG:通过太极阴创建应用什么值得买的过程中太极闪退,应用创建失败...
  19. 图像自动裁剪和角度矫正
  20. Unity3d游戏开发之C#开发(一)

热门文章

  1. python pandas 日期_python+pandas+时间、日期以及时间序列处理方法
  2. 深度linux 转中文,Linux Deepin 中文Linux系统的新希望?
  3. 审计工作存在的难点和问题_电力工程造价审计的难点与对策有哪些?学习安装电力造价广联达计价看这里!!...
  4. 最热门的10个Java微服务框架
  5. 【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)
  6. 系统分析与控制_质量体系文件:测量系统分析控制程序
  7. github 私有化部署_2019,GitHub 宣布私有代码仓库从此免费!
  8. linux无filelength函数,Linux Shell 自定义函数(定义、返回值、变量作用域)介绍
  9. 爱因斯坦最熟悉的中国人,曾被学校开除的自学天才周培源
  10. java 获取td_[Java教程]jQuery获取table表中的td标签