Serverless可以看做是运行于无状态的容器中,由事件驱动,执行周期很短的服务,这部分描述和FaaS很像,所以在一部分人眼里Serverless = FaaS。

马丁大叔将Serverless与FaaS、BaaS做了一个结构整理:

马丁大叔意思是:

Serverless = FaaS + BaaS

Serverless特性包括:弹性伸缩、按需付费特点。

以谷歌开源的Serverless架构方案-Knative为例,聊聊FaaS的几个特点。

Knative是构建于K8S之上的提供基于事件驱动的Serverless架构的标准模式。

先看下Serverless如何实现弹性的。

系统根据当前监控到的流量,实现自动扩缩容,简单的公式如下:

目标实例数 =  当前并发数 / 单一实例支持的并发数

如果每个实例支持10并发,那当100个并发来了,就需要10个实例。如果当前只有1个实例,其余9个实例需要扩容完成。

外部请求先缓存在Activator,直到扩容完其他9个实例,才会将请求转交给FaaS进行请求处理。实例扩容到准备好这个阶段,就叫做“冷启动”。

如何提高冷启动速度呢?

云厂商为减少冷启动时间,一般会做一些分配算法,比如:

实际扩容实例数 = 1.2 * 期望的实例数

这样其实可以支撑120个并发,减少了一次扩容启动时间。

上面的实例扩容算法算是一种冷启动优化方式,我们看看是否还有其他冷启动优化的方式,实例启动过程大概是这样的:

下载代码 -> 启动实例 -> 代码初始化(依赖加载)-> 函数执行

不需要扩容实例时,过程就只剩下了最后一步了,直接函数执行,相对应,我们叫做“热启动”。

一般“冷启动”时间需要上百毫秒,“热启动”只需要几毫秒。

所以优化冷启动,可以从优化冷启动时间和优化冷启动概率上解决。

减少冷启动概率方式有:实例复用、实例预热。

实例复用说的是,函数代码执行结束之后,不会立马回收实例,而是从活跃状态变成了等待状态,处于等待状态的实例可以存活30s,如果期间没有请求需要处理,实例才会被回收,这样达到了30s内实例复用的目的。

实例预热方式简单来说,就是提供预留实例不释放功能,在目标扩容实例基础上增加一定的预留buffer。

以上两种方式对应着实例成本,需要结合具体情况具体实现。

优化启动时间可以从两方面入手:优化代码体积、减少不必要的依赖。

代码体积越大,下载时间越长,所以可以考虑代码打包压缩,或者在代码模板中删除不需要的代码。

如何定义一个函数的粒度是另一个使用Serverless需要考虑的地方。

有的平台推荐将整个web服务部署在一个函数里面,有的是按代码体积做判断,有的还需要考虑函数执行时对于IO、CPU、内存消耗考虑函数粒度的拆分。

但以上几种方式都会增加研发成本上升,这也是我怀疑Serverless是否可以带来其所承诺的研发价值的地方。其有相当确定的使用场景,不能简单粗暴使用。

驱动函数类型的方式有很多,但大部分提倡的还是事件驱动。

触发FaaS运行方式都可以抽象成事件类型,比如API网关事件触发。

那如何使用一个FaaS服务呢?

可以分成如下几步:

  1. 基于FaaS平台选择一个熟悉语言对应的Runtime平台,基于其完成:开发、测试过程。

  2. 代码完成之后,上传到FaaS平台。

  3. 代码上传之后,通过API/SDK或一些其他事件源触发函数。

  4. FaaS平台接收到事件触发,基于配置并发度情况,弹性扩容并执行函数。

  5. 函数使用后,按资源使用情况进行计费。

为拉齐函数编写与函数执行环境的差异,FaaS平台一般会提供一些研发工具。有组件式命令行Devs工具,也有注重运维部署方面的Ops工具,提供平台观察函数生命周期。

通过工具,可以快速完成资源管理(代码编写、运行、下载、创建、上传)、快速部署、调试、工程模板、逻辑单元等工作。

有了一个个上传到云端的函数了,就可以基于函数做工作流编排,实现想要的逻辑控制了。包括任务跟踪,状态转换,日志查看,监控调试等。

当然还有函数执行之后是可观测性(Logging、Metric、Tracing)实现函数的运维。

包含用于定位、排查、分析问题的工具,评估风险、配置并发度等工作。

以及执行的详细日志:

Serverless特点及应用相关推荐

  1. 一键部署dns服务_OpenShift : 通往云原生、DevOps、微服务和Serverless的大门

    新书速递 查尔斯·狄更斯的<双城记>中有句耳熟能详的名言:"这是一个最好的时代,也是一个最坏的时代."作为技术从业者,在这个数字化浪潮和技术变革接连发生的时代,我对这句 ...

  2. 二:serverless网站数据库操作

    操作数据库API文档 第一篇,搭建一套免费的serverless网站 一,创建集合,进入控制台 登录腾讯云后台 打开云开发控制台 可以新建集合,新建集合后点击集合名称即可批量导入导出数据库集合的数据, ...

  3. 一:搭建一套免费的serverless网站

    因为公司需求,需要快速搭建一个公司内部能够访问的资源查看管理的 PC网站,因为没有服务器,没有后端开发,又要快速上线使用,那么 serverless 就成了我的首选方案,下面从零开始搭建. 步骤一. ...

  4. 现在,Serverless 真的已经成熟了吗?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者 | Justin Etheredge 策划 | Ti ...

  5. 图解 Serverless!秒懂!

    作者 | 江昱(阿里云 Serverless 产品经理) 抛砖引玉:从云计算到 Serverless 2009 年,UC Berkeley发表了:Above the Clouds: A Berkele ...

  6. Serverless 下的微服务实践

    作者 | 弈川 微服务架构介绍 微服务架构诞生背景 在互联网早期即 Web 1.0 的时代,当时流行的是单体应用,研发团队比较小,主要是外部网页,然后新闻门户等:到了新世纪的互联网时期 Web 2.0 ...

  7. Serverless 在大厂都怎么用?

    点击可观看精彩演讲视频 主持嘉宾: 中国信息通信研究院 云计算部副主任.腾讯云TVP,陈屹力 圆桌嘉宾: - Amazon Web Services 首席开发者布道师,费良宏 - 阿里集团 Serve ...

  8. Serverless:微服务架构的终极模式(文末赠书)

    微服务的生态和实践已经比较成熟,其设计方法.开发框架.CI/CD工具.基础设施管理工具等,都可以帮助企业顺利实施微服务.然而,微服务远没有达到完美,它在架构.开发.基础设施方面仍然面临新的挑战. 微服 ...

  9. 微服务和 Serverless 如何强强联合?

    导语 |  微服务与 Serverless 被不少开发者称为"天作之合",在当前的微服务体系中,Serverless 的定位是什么?Serverless 在微服务分布式应用中又是如 ...

  10. Serverless 时代下大规模微服务应用运维的最佳实践

    微服务架构的优点和痛点 Aliware 1 微服务架构的诞生背景 回到互联网早期时代,也就是web1.0时代,当时主要是一些门户网站,单体应用是当时的主流应用,研发团队相对较小,这时候的挑战在于技术的 ...

最新文章

  1. 记录一次提交开源JAR包到中央仓库的过程
  2. 获取错误:当试图让pgsql使用rails时,用户“postgres”的对等身份验证失败
  3. linux 查看显卡信息
  4. chrome session丢失_一文带你彻底读懂Cookie、Session、Token到底是什么
  5. 剑指offer(C++)——链表中环的入口结点
  6. jQuery.tablesorter html表格排序插件
  7. /hgfs下无共享文件夹?/mnt下没有hgfs文件夹?vmhgfs-fuse:找不到命令?
  8. 【P1063】 能量项链
  9. 以太网,局域网,万维网
  10. 调用百度人脸识别API进行人脸对比 C语言
  11. 树形数据深度排序处理示例(模拟单编号法).sql
  12. html gbk正确 utf-8乱码,GBK与UTF-8互转乱码详解
  13. 怎么把PDF转换成jpg图片?这两种方法快来get
  14. bugku misc-旋转跳跃
  15. 超五类屏蔽双绞线和计算机电缆区别,什么是超五类网线?双绞线(网线)常用种类的区别详解...
  16. 台式计算机品牌怎么查,教你怎么看电脑主板型号和品牌
  17. Python 骚操作:微信远程控制电脑(转载)
  18. webrtc源码学习 - 点对点(P2P)链接过程(peer connection)
  19. mysql成绩表_mysql--学生课程成绩表
  20. 且行且走(8月22日,23日)

热门文章

  1. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
  2. 算法_贪心 刷题总结
  3. R - 0 or 1 HDU - 4370
  4. poj3680(最小费用流 + 拆点)
  5. 体外反搏做_体外反搏治疗的原理
  6. Selenium 2.0的由来及设计架构(三)
  7. oracle split去逗号,行列转换 转载
  8. es6箭头函数中this
  9. 子窗体更新父窗体控件内容
  10. 业务系统性能问题分析和诊断