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. Android 悬浮窗 System Alert Window

    悬浮窗能显示在其他应用上方.桌面系统例如Windows,macOS,Ubuntu,打开的程序能以窗口形式显示在屏幕上. 受限于屏幕大小,安卓系统中主要使用多任务切换的方式和分屏的方式.视频播放,视频对 ...

  2. MongoDB性能诊断工具

    1. mongostat * dirty 超过20%时阻塞新请求 * used 超过95%时阻塞新请求 * qrw 排队的请求 * conn 连接数量 mongostat:用于了解MongoDB运行状 ...

  3. 深入 Laravel 内核之外观模式(门面模式)

    门面模式核心内容: 客户端与子系统的通信通过外观对象进行: 外观对象封装一系列子系统的具体对应方法,对客户端只需暴露一个单一的入口方法: 客户端通过访问外观对象即可调用子系统的基础方法,无需关心子系统 ...

  4. linux下备份mysql数据

    一.业务场景 自己现在做的项目基本上已经开发完成,正式开始上线运行,主要包含两个子项目一个是小程序的后台,一个是后台管理系统. 正式开始运行一段时间后,基本上也没什么BUG了,整个项目都已经能够正常的 ...

  5. python pathlib模块(面向对象的文件系统路径)

    该模块提供表示文件系统路径的类,其语义适用于不同的操作系统 导入Path类: 获取当前目录的绝对路径: 返回当前目录的路径对象 路径拼接 os与PurePath/Path函数映射表 来自为知笔记(Wi ...

  6. slf4j+logback日志框架 的具体使用操作【spring boot自带的默认日志框架】

    1.前言 是不是还在使用System.out.println()打印数据到控制台看? 东西少还好,如果多起来,那就看的很烦人了,特别还有加时间等信息. 怎么解决? 可以使用日志框架 ,常见的有 log ...

  7. antd-vue中给table表格整行加点击事件

    <a-table :columns="columns" :dataSource="data" :loading="loading" : ...

  8. spring security +MySQL + BCryptPasswordEncoder 单向加密验证 + 权限拦截 --- 心得

    1.前言 前面学习了 security的登录与登出 , 但是用户信息 是 application 配置 或内存直接注入进去的 ,不具有实用性,实际上的使用还需要权限管理,有些 访问接口需要某些权限才可 ...

  9. python 迭代器链式处理数据

    pytorch.utils.data可兼容迭代数据训练处理,在dataloader中使用提高训练效率:借助迭代器避免内存溢出不足的现象.借助链式处理使得数据读取利用更高效(可类比操作系统的资源调控) ...

  10. lvgl移植—Linux fbdev&evdev(基于LVGL v7)

    虽然lvgl官方提供了有关linux framebuffer操作的库函数,但是我决定自己试一下能否自己实现这部分操作 实际项目中应优先采用官方库函数,官方实现代码位于文件夹lv_drivers/dis ...