1、什么是serverless

Serverless 架构作为一种新型的云计算范式,是云原生时代一种革命性的架构,颠覆了传统意义上对软件应用部署和运营的认识。本节对 Serverless 架构的基本概念、技术实现和 Kubernetes 上的 Serverless 框架分别进行阐述。

Serverless 架构的核心理念是让用户不用关注服务运行所需要的计算资源,主要关注业务逻辑的构建。这样做可以降低业务开发的成本,提高业务构建和交付的效率。用户不在需要花费时间和资源来进行服务器配置、维护、更新、扩展和容量规划。所有的这些任务和功能都由 Serverless 平台处理,并完全从开发人员和 IT/运维团队中抽象出来。

2、Serverless应用架构

3、Serverless 架构与传统架构的区别

3.1、按需加载

与传统架构最大的区别在于,在 Serverless 架构中,由底层的容器平台管理应用的启动和关闭。应用程序是否正在运行取决于当前是否有事件触发或请求访问该服务。当有事件触发或者请求访问时,服务会被自动启动。当一段时间服务不被使用,平台将关闭该服务等待下次触发。

3.2、事件驱动

Serverless 架构的应用是通过事件驱动的方式实现按需加载,不需要传统函数中监听类型的应用一直在线。当事件源中包含的事件发生变化,会根据不同的事件源类型触发不同的事件,进而执行不同的响应函数完成对应的请求操作。事件源的类型可以有很多种,如 http 请求,数据库修改、消息发送和文件上传等。

3.3、状态非本地化持久

由于应用和服务器解耦,应用不再绑定到特定的服务器上,每次事件触发后的服务实例可能运行在集群中任意一个服务器节点。因此,服务器节点不会保存该节点上应用的状态,这个传统架构有很大的区别。

3.4、非会话保持

由于应用不再绑定到特定的服务器上,每次处理请求的服务实例可能在同一个服务器节点上,也可能在不同的服务器节点上。因此,同一个客户端的多次请求无法保证被同一个服务实例处理。传统架构中很容易实现的会话保持功能,不适用于 Serverless 架构应用。因此,无状态的应用比有状态的应用更加适合Serverless 架构。

3.5、自动扩缩容

Serverless 架构的底层平台原生支持自动扩缩容策略,会根据应用访问量的变化动态调整服务实例的数量来满足应用访问的需求。

3.6、应用函数化

Serverless 架构中一个应用被分解为多个细粒度的函数,通过多个函数之间的编排调度实现业务逻辑。这些函数本身都是无状态的函数服务,无法进行状态保存和会话保持。在 Serverless 架构的实现中,应用函数化是一种重要的实现方式。

3.7、依赖服务

为了提高开发效率,现在的服务在开发过程中利用了很多第三方工具,如消息队列、数据库、缓存等。如果只有当前应用服务化,其他依赖的第三方工具需要用户单独进行管理和部署,那么整个应用服务依旧被服务器资源等条件限制。因此,Serverless 架构应用所依赖的第三方工具也必须服务化。

4、Serverless缺点

  • 只管理无状态服务。Serverless要实现工作负载的自由缩放,就必须要求服务是无状态的。有状态的服务由于需要维护存储状态信息,并不适合Serverless平台进行管理。这应该是Serverless本身的特点所致。
  • 延迟问题。Serverless应用是高度分布式、低耦合的,服务之间的通信比较频繁,有可能会导致应用的整体延时加大。另外,由于Serverless应用是按需分配计算资源,有可能会产生冷启动延迟。
  • 厂商标准不统一问题。当前,各厂商的Serverless产品的标准不统一,导致软件不能跨厂商迁移,客观上造成了厂商锁定问题,这是制约Serverless发展的最主要因素。

5、Serverless的使用场景

尽管Serverless计算已被广泛应用,但它仍然是较新的技术。一般来说,当工作负载为以下情形时,Serverless应被视为首选。

  • 异步、并发、易于并行化为独立工作单元的工作负载。
  • 低频或有零星请求,但具有较大不可预测扩容变化需求的工作负载。
  • 无状态、短期运行、对冷启动延迟不敏感的工作负载。
  • 业务需求变化迅速,要求快速开发实现的场景。

6、Serverless 技术实现

Serverless 架构实现分为两个部分:函数即服务(Function as a Service, FaaS)和后台即服务(Backend as a Service, BaaS)。其中 FaaS 是一种构建和部署服务的新方式,BaaS 是以 API 形式提供第三方服务。Serverless 实现的构成如图 所示。

6.1、FaaS

FaaS 提供了一种构建和部署服务的新方式,将应用分解为多个函数服务,通过多个函数之间的编排调度完成业务逻辑[27]。函数并不会一直处于运行状态,只有在需要时才会运行,其它时间都是空闲状态。FaaS 的核心是事件驱动,除了提供代码存放和代码执行的功能,FaaS 还会提供各种同步和异步的事件源集合。比如 HTTP API Gateway 就是一个同步事件源;而消息队列,对象存储等就是异步事件源。

FaaS 作为 Serverless 架构重要组成部分,为基于Serverless 架构的应用提供一套完整的开发、运行和管理的解决方案。将应用部署到 FaaS 平台上,应用运行所需的底层服务资源由平台统一管理。由于在应用开发中经常需要使用到第三方服务,如数据库,消息队列和分布式缓存等。如果应用依赖的第三方服务以传统方式部署运维,用户依旧需要对这些第三方服务需要的资源进行管理。对于 Serverless 架构而言,这种情况并没有完全实现应用程序 Serverless 化。

6.2、BaaS

BaaS 为实现应用的第三方依赖工具服务化提供了解决方案。通过 BaaS平台可以将数据库、文件存储和消息队列等第三方工具服务化,让用户以 API的形式进行访问,按照使用量进行付费。BaaS 平台使得用户不需要关注第三方服务底层计算资源的运维,极大的减少了应用运维的工作量和成本。

为了让应用程序完全 Serverless 化,用户不但需要利用 FaaS 平台将自身应用Serverless 化,而且需要通过 BaaS 平台将应用依赖的第三方服务进行Serverless化,这样才能最大程度发挥 Serverless 架构的优势。

参考

Serverless 架构调度策略研究

深入浅出Serverless:技术原理与应用实践-陈耿-微信读书

serverless入门介绍的更多相关文章

  1. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  2. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  3. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  4. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  5. JavaScript入门介绍(二)

    JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...

  6. JavaScript入门介绍(一)

    JavaScript入门介绍 [经常使用的调试工具][w3school.com.cn在线编辑] [Chrome浏览器 开发调试工具]按F121.代码后台输出调试:console.log("t ...

  7. .NET 4 并行(多核)编程系列之一入门介绍

    .NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下:  1. 并行编程和多线程编程的区别.  ...

  8. .NET读写Excel工具Spire.Xls使用(1)入门介绍

    原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...

  9. Linux入门介绍

    Linux入门介绍 一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以 ...

随机推荐

  1. RSA非对称加密算法实现:Java

    RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA ...

  2. Hadoop Jobhistory配置启用

    Hadoop Jobhistory记录下已运行完的MapReduce作业信息并存放在指定的HDFS目录下, 默认情况下是没有启动的,需要配置完后手工启动服务. 1.修改hadoop的配置文件mapre ...

  3. MATLAB/SIMULINK生成代码错误之change the default character encoding setting

    SIMULINK点击生成C代码报错 错误提示: Error encountered while executing PostCodeGenCommand for model 'RTW_sc3': Cl ...

  4. 基于node和npm的命令行工具——tive-cli

    前端开发过程中经常会用到各种各样的脚手架工具.npm全局工具包等命令行工具,如:Vue脚手架@vue/cli.React脚手架create-react-app.node进程守卫工具pm2.本地静态服务 ...

  5. 详解nginx的请求限制(连接限制和请求限制)

    https://www.jb51.net/article/143682.htm 一,背景 我们经常会遇到这种情况,服务器流量异常,负载过大等等.对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力, ...

  6. PowerShell【IF篇】

    1 [int]$num=0 2 do 3 { 4 $num+=1 5 if($num%2) 6 { 7 "$num"+" 是奇数" 8 }else{ 9 &qu ...

  7. vim - 显示不可见字符(:set list)

    默认情况下,vim是不会显示space,tabs,newlines,trailing space,wrapped lines等不可见字符的.我们可以使用以下命令打开list选项,来显示非可见字符: : ...

  8. test_3 简单密码破解

    题目描述:密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了.哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全. 假设渊子原来一个BBS上的密码为zvbo9441987 ...

  9. 力扣 - 剑指 Offer 49. 丑数

    题目 剑指 Offer 49. 丑数 思路1 丑数是只包含 2.3.5 这三个质因子的数字,同时 1 也是丑数.要计算出 n 之前全部的丑数,就必须将 n 之前的每个丑数都乘以 2.3.5,选取出最小 ...

  10. 【Java】java基础

    文章目录 Java基础 1 注释.标识符.关键字 1.1 注释 1.2 关键字 1.3 标识符 1.4 数据类型 1.4.1 基本类型 1.4.2 引用类型 1.4.3 整数类型拓展 1.4.4 浮点 ...