serverless入门介绍
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入门介绍的更多相关文章
- C# BackgroundWorker组件学习入门介绍
C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)
最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
- JavaScript入门介绍(二)
JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...
- JavaScript入门介绍(一)
JavaScript入门介绍 [经常使用的调试工具][w3school.com.cn在线编辑] [Chrome浏览器 开发调试工具]按F121.代码后台输出调试:console.log("t ...
- .NET 4 并行(多核)编程系列之一入门介绍
.NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下: 1. 并行编程和多线程编程的区别. ...
- .NET读写Excel工具Spire.Xls使用(1)入门介绍
原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...
- Linux入门介绍
Linux入门介绍 一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以 ...
随机推荐
- ElasticSearch+Kibana安装部署
在安装ElasticSearch时遇到了很多坑,所以在这里做个笔记记录一下. 首先我考虑的是使用docker进行部署,结果发现虚拟机直接内存溢出,我也是无解了,也就是说使用docker部署还得注意容器 ...
- CSS基础-4 定位
CSS定位和浮动 css定位:改变页面的位置 定位机制有以下三种 普通流 浮动 绝对布局 定位的属性: position:把元素放在一个静态的.相对的.绝对的.或固定的位置中 top ...
- python 使用demical模块四舍五入
前言: 断言部分需要用到四舍五入,首先使用的是python自带的round(),做四舍五入进位处理,但使用过程中,发现round似乎是当保留小数位的最后一位是偶数,和保留小数位后一位为5时,就不进位. ...
- quasar框架在store中使用router跳转页面报错
网上一通百度,终于在这篇博客中找到原因. https://www.cnblogs.com/remly/p/12995936.html 原因是: 在router中导出了一个工厂函数, 既然是一个函数, ...
- vue3.0+vite+ts项目搭建--基础配置(二)
集成vue-router 使用yarn yarn add vue-router@next --save 安装完成之后在src目录下创建文件夹router/index.ts,创建完成之后需要在Vue-R ...
- day5 数组对角线及最大值
1.输出M行M列数组方针,求对角线元素和#define M 5void fun(int xx[][M], int n)//n行n列{ int i = 0; int sum = 0; for (i = ...
- unity3d inputfield标签控制台打印object
inputfield标签控制台打印object 这说明没有字符串给入 这是因为 inputfield下的text不能人为写入值,只能在game界面输入. 所以这个标签里的text做个默认值不好搞.
- Cesium源码剖析---Clipping Plane
之前就一直有写博客的想法,别人也建议写一写,但一直没有动手写,自己想了一下原因,就一个字:懒.懒.懒.为了改掉这个毛病,决定从今天开始写博客了,一方面对自己掌握的知识做一个梳理,另一方面和大家做一个交 ...
- MySQL的MyISAM与InnoDB的索引方式
在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. MyISAM索引实现 MyISAM引擎使用B+Tr ...
- ARTS Week 22
Algorithm 本周的 LeetCode 题目为 297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也 ...