您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

Serverless无服务器架构详解

时间:2020-08-04 11:52:21  来源:  作者:

本文对serverless架构的基础概念,工作原理,应用场景以及具体产品进行详细解析。

基础概念

serverless:无服务器架构,即在无需管理服务器等底层资源的情况下完成应用的开发和运行,是云原生架构的核心组成部分。

通俗来说,如果将购买一台物理服务器比作 买车 ,购买云服务器就类似于 租车 (租赁期间需要驾驶和维护,且即使闲置也需付费),那么serverless则类似于 出租车 (只需乘坐,按里程计费)。

从技术层面来说,我们可以简单理解为: serverless = FaaS + BaaS 。一个完整的serverless应用一般由FaaS层负责无状态的计算,由BaaS层负责状态的存储:

  • FaaS(函数即服务,Function as a Service):将函数代码托管给云产商,以服务形式运行,支持事件触发。代表产品有腾讯云SCF、AWS Lambda等。
  • BaaS(后端即服务,Backend as a Service):指云平台提供的后端组件整合,开发者无需开发和维护后端服务,通过API/SDK的调用便可获得例如数据存储(对象存储、云数据库、云中间件等)、消息推送、账号管理、地图定位、AI、IoT等能力。
Serverless无服务器架构详解

 

特点及优势:

  1. 免运维 :无需管理基础设施 —> 可以专注业务开发
  2. 按量计费 :闲时不计费 —> 降低成本
  3. 弹性伸缩 :峰时自动扩容 —> 无需考虑可用性问题

劣势及适用场景:

  1. 冷启动延迟: 一定时间内的首次调用可能需要冷启动(如进行加载代码、拉起容器等任务)—> 适合对响应速度要求不是太高的接口,更适合异步任务,不适合启动耗时久的JAVA项目
  2. 开发和管理设施: serverless应用的调试、测试、排障、发布等设施暂不成熟 —> 目前更适合后端逻辑不太复杂的轻量级应用
  3. 云产商绑定: 不同云产商提供的组件(如存储)接口不同,可能增加未来迁移成本 —> 使用标准化框架,并在设计时尽量隔离通用逻辑层和BaaS依赖层

工作原理

各个平台对云函数的实现在原理上基本相似,核心都是动态的启动实例去执行函数代码,且完成后实例会保留一定时间窗口。大致的底层架构如下图,其中步骤(1) (2) (3) (4) 为冷启动调用流程,(5) 为非冷启动调用。

Serverless无服务器架构详解

 

1.函数注册

用户在控制台(或命令行)提交函数代码到云平台,并进行函数配置。代码一般会被作为静态资源保存(如对象存储),而函数的元信息会被存入数据库中(如MySQL)。

2.函数触发

云函数的触发可以分为同步和异步两种情况:

  • 如果是同步请求则等待函数执行结果后返回
  • 如果是异步请求则可以投递到队列后直接返回

3.函数执行

云函数的执行可以分为窗口内首次执行(冷启动)和非首次执行两种情况:

  • 如果是首次执行,则需要进行宿主机调度,在宿主机拉起容器实例,下载函数代码,然后执行代码。
  • 首次执行完毕后Docker容器不会立即关闭,会等待一定时间周期,如果此时有新的请求进来,会被分配到该容器,直接运行代码。

从执行的原理也可看出,云函数理论上是支持无限自动扩容的。

冷启动问题

由于serverless按量计费的特点,其实现机制就必须要在函数调用时才去启动运行环境,也就是冷启动问题。虽然保留一定时间可以让后续的请求无需加载,但如果在极短时间内并发大量请求,还是会同时启动多个容器,影响首个请求的响应时间。前面也说到,云函数的特性和机制决定了它的应用场景,对于同时要求高并发、低时延的场景并不是特别适合。

对于冷启动问题,下面以腾讯云的 云函数SCF 为例进行验证。使用Postman的批量测试功能(Collection Runner)对云上部署的一个hello world函数进行串行测试。

Serverless无服务器架构详解

 

从图中可以看出,一段时间内的首次请求耗时会比其他请求的耗时高出一个数量级。

冷启动优化

冷启动的优化主要针对同步的请求,首先分析下冷启动耗时的组成,主要是容器的拉起和代码的下载(当然也有资源调度和网络配置等,这里暂不讨论)。

1. 代码缓存 :可以设计多级缓存,比如在宿主机上进行代码包缓存,以及在可用区(AZ)内部进行缓存,这样后续的首次启动就可以快速就近获取,而无需再次从对象存储下载。

2. 容器创建 :一个优化思路就是预加载,也就是预测将会到来的请求,提前拉起容器实例,从而减少耗时。有以下几种可能的方案:

  • 进行请求量的 实时计算 ,如果请求呈上升趋势,就开始预创建容器实例,同理下降则进行回收。
  • 云函数调用链: 这是一种可确定的预测,当云函数之间出现互相调用,在前面的函数被触发时就可以同时预创建调用链后面的实例;
  • 版本更新: 如果函数版本进行更新,则之后的所有请求都会重新冷启动,为了避免这种情况,需要预创建一些实例并下载新版本代码,之后才能将流量平滑迁移到新版本函数。

应用场景

下面介绍比较适合使用serverless技术的几种场景。

1.rest API

利用云函数可以快速部署一个rest API应用,目前的云厂商基本都支持大部分node,Pythonphp的web框架,如koa、Express.js、Next.js、Flask、Django、Laravel等等。

这种web架构是前后端分离,即云函数中的后台接口只提供数据,页面的渲染在浏览器进行。可以将前端的代码部署到对象存储中,并使用相关云数据库作为数据存储,这就成为一个完整的云上Full Stack应用。

2.SSR

SSR(Server-Side Rendering):后端渲染,即页面直接在后台进行渲染,浏览器只负责显示。这种比较传统的web架构很适合应用于serverless,只需将整个后端代码部署到云函数即可,好处有:1.利于seo,2.降低系统复杂度,易于部署。

serverless很适合用于流量分布不均的轻量应用,比如一些活动页面,可能一个周期内只有很短的一段时间会有大量访问,且需要长期的维护,此时为这个应用去购买高配置的服务器显然是不划算的。使用serverless之后则可以完全解决这个问题,按量计费降低了成本,既免去了长期运维又不需要担心扩容问题。

3.任务执行

云函数本身是无状态的,所以天然适合无状态任务,如果需要状态存储则需要借助BaaS层的组件。云函数的优势是可以与云提供商下的其他服务(比如数据库、缓存、对象存储、CDN、AI、转码等)打通,在函数中使用SDK连接各个组件(但这同样意味着将在云产商绑定的道路上越走越远)。以下是一些适用场景:

  • 消息通知:比如触发后向某个用户发送邮件、短信等。
  • 定时任务:云函数一般提供定时器触发,方便进行定时任务的执行。
  • CDN自动刷新:一般来说会把图片、网页等静态资源存到对象存储,并且配置CDN加速,一旦资源发生修改还得手动进行CDN刷新预热。可以使用对象存储上传的事件触发器,在云函数中调用CDN接口自动化刷新预热。
  • 视频转码:如果云产商提供转码服务,可以借助云函数很方便的完成转码任务。如原视频上传到对象存储后,该事件可以触发云函数调用转码服务,并将转码后的视频发布到对象存储中,如果使用了CDN还可以进行缓存刷新。
  • AI服务:可以使用云函数调用该产生的AI服务,比如调用OCR接口识别图片文字内容后返回。
  • Devops:例如将Github的webhook设置为云函数的地址,当代码提交后触发云函数,执行CI/CD任务,构建后发布产物到云服务器上。


Tags:Serverless   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
对于云原生解决方案中涉及到的微服务,DevOps,容器云和ServiceMesh等内容,在前面很多文章都已经谈到过,今天准备谈下对Serverless架构的一些理解。实际上要完全理解Serverless无...【详细内容】
2020-10-14  Tags: Serverless  点击:(113)  评论:(0)  加入收藏
作者| 阿里文娱技术专家 嘉若责编 | 屠敏封图 | CSDN 下载自东方 IC背景作为开发者,在面对需求变更期间,我们通常的状态是开发-自测-联调,需要频繁改动代码,即使修改少量代码,也...【详细内容】
2020-10-09  Tags: Serverless  点击:(77)  评论:(0)  加入收藏
本文对serverless架构的基础概念,工作原理,应用场景以及具体产品进行详细解析。基础概念serverless:无服务器架构,即在无需管理服务器等底层资源的情况下完成应用的开发和运行,是...【详细内容】
2020-08-04  Tags: Serverless  点击:(36)  评论:(0)  加入收藏
本篇专门针对 Next.js 的 SSR 方案进行了探索和优化,一步一步带大家了解,如何基于 Serverless 架构部署一个实际的线上业务。 本文主要内容: 如何快速部署 Serverless Next.js ...【详细内容】
2020-07-24  Tags: Serverless  点击:(73)  评论:(0)  加入收藏
在日常生活中,我们经常会遇到搜索照片的情况,如果是要寻找已经过去很久的照片,并且记忆中仅剩下零散记忆,常用的检索照片的方法是定位到大致的时间,然后一张一张的去查看。但这种...【详细内容】
2020-07-24  Tags: Serverless  点击:(68)  评论:(0)  加入收藏
要说目前软件架构中热度十二分的话题,当属Serverless。通常我们会将其翻译为“无服务器架构”。尽管成天被称为“无服务器”,但该架构与传统架构不同,显然并不是真的不需要服务...【详细内容】
2020-06-27  Tags: Serverless  点击:(49)  评论:(0)  加入收藏
4月,阿里云Serverless工作流正式商业化,这是一款用于协调多个分布式任务执行的全托管 Serverless 云服务。产品致力于简化开发和运行业务流程所需要的任务协调、状态管理以及...【详细内容】
2020-04-27  Tags: Serverless  点击:(81)  评论:(0)  加入收藏
无服务器计算(Serverless)技术,在当下云计算舞台具有重要地位,而且已经成为未来的一大发展趋势,在整个IT世界中备受关注。几十年来,服务器在IT系统中一直是不可或缺的。如果仅从字...【详细内容】
2020-03-13  Tags: Serverless  点击:(119)  评论:(0)  加入收藏
首先介绍下在本文出现的几个比较重要的概念:函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计...【详细内容】
2020-03-09  Tags: Serverless  点击:(61)  评论:(0)  加入收藏
如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展...【详细内容】
2019-12-13  Tags: Serverless  点击:(99)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条