无服务器【Serverless】架构的深度剖析:组件介绍、优缺点与适用场景

🐇明明跟你说过:个人主页

🏅个人专栏:《未来已来:云原生之旅》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、云计算的发展趋势

2、无服务器计算简介 

二、无服务器架构概述

1、什么是无服务器计算

2、关键组件:函数即服务(FaaS)、事件驱动模型 

3、与传统服务器架构的对比 

三、无服务器架构的优势

1、成本效率

2、灵活性与可扩展性

四、无服务器架构的挑战与局限

1、冷启动问题

2、资源限制与监控难题


一、引言

1、云计算的发展趋势

  1. 云原生技术的普及与深化:云原生技术(包括容器、微服务、持续集成/持续部署CI/CD等)将更加广泛地被采用,以提高应用的灵活性、可移植性和可维护性。容器化和Kubernetes等编排工具将成为标准配置。
  2. 多云与混合云策略的增长:随着企业对云服务的依赖加深,多云(使用多个公有云服务商)和混合云(结合公有云与私有云)策略将更为普遍,以减少供应商锁定,提高业务连续性和灵活性。
  3. 成本优化与服务降价:随着技术成熟和市场竞争,IaaS(基础设施即服务)价格预计将持续下降,同时服务商将提供更多优化成本的方案,如预留实例、节约计划等。
  4. 人工智能与机器学习的整合:AI和ML将成为云服务的重要组成部分,云服务商将提供更多开箱即用的AI服务,助力企业智能化转型,提高数据分析、决策制定的效率和准确性。

2、无服务器计算简介 

无服务器计算(Serverless Computing)是一种云计算服务模型,它允许开发者构建和运行应用程序,而无需直接管理底层服务器或基础设施。尽管名称中有“无服务器”一词,实际上仍然需要物理服务器来支撑服务运行,但这些服务器的管理和维护工作对开发者透明,由云服务提供商全权负责。

在无服务器模型中,应用被分解成一系列功能或微服务,这些功能在需要时被触发执行,通常是响应特定的事件(如文件上传、数据库更改或HTTP请求)。开发者只需要编写并上传代码,云平台会自动管理和分配资源,按实际使用的计算量计费,无需预先支付或保留服务器容量。

二、无服务器架构概述

1、什么是无服务器计算

无服务器计算,听起来好像没有服务器参与一样,但实际上并不是真的没有服务器,而是把管理和维护服务器的复杂工作从开发者那里移开了。想象一下,你开了一家餐厅,但不用自己买地盖厨房、雇厨师、洗碗工,只要告诉别人你想做什么菜(编写代码),就有专业的餐饮团队(云服务提供商)帮你准备好一切,按客人点菜(触发事件)的时候迅速做好并端上桌(执行代码),而且只在有客人点菜时才收费。

具体来说,无服务器计算就是你把应用程序拆分成很多小的功能块(比如计算一个人的年龄、发送邮件等简单任务),每个功能块都是一个独立的“函数”。当你需要使用这些功能时,比如用户点击了一个按钮,云平台就会自动运行对应的函数来完成任务,完成后就停止,不占用资源也不计费。这样,你就不用操心服务器怎么配置、软件怎么更新这些繁琐的事,只需要专注于写出解决问题的代码就行了。这样一来,不仅省事,还能根据实际使用情况灵活付费,成本更低,效率更高。

2、关键组件:函数即服务(FaaS)、事件驱动模型 

在无服务器计算模型中,两个核心概念是“函数即服务(Function as a Service,简称FaaS)”和“事件驱动模型

函数即服务(FaaS)
想象一下,你拥有一支神奇的魔法队伍,每当你说出咒语(也就是一个需求或事件发生),他们立刻出现,完成一项特定的任务后便消失无踪,不留下任何需要你打理的痕迹。FaaS就是这样的一个概念。

在技术领域,FaaS是一种云服务,让你能够上传一小段代码(这个代码块就是一个“函数”),然后设定好什么时候或者在什么条件下(比如文件上传、API调用、定时任务等)去运行这段代码,而不需要你去关心运行这段代码所需的服务器配置、资源分配等问题。代码执行完毕后,资源会被自动回收,你只需为执行这段时间内的计算资源付费。

事件驱动模型
事件驱动模型就像是一个自动化生产线,每一步操作都是由前一步的操作结果(即“事件”)触发的。在无服务器架构中,这种模式尤为重要。

想象你家的智能门铃,当有人按门铃(这是一个事件),就会触发一系列动作:摄像头开始录像、发送通知到你的手机、甚至自动开灯。在这个过程中,每一个动作都是由前一个事件触发的,而不是一直在运行等待任务。

在FaaS中,事件可以是任何事情:用户上传图片、数据库记录更新、网页访问等。一旦这些事件发生,云平台就会自动调用相应的函数去处理这些事件,执行完后函数会自动结束,整个过程高效且按需进行。

总结起来,FaaS提供了运行代码片段的能力,而事件驱动模型确保了这些代码片段只有在需要时才被触发执行,两者结合构成了无服务器计算的核心机制,让开发者能够更高效、低成本地构建和运行应用程序。

  

3、与传统服务器架构的对比 

1. 资源管理与运维

  • 传统服务器架构:通常需要运维人员手动配置和管理服务器硬件、操作系统、中间件以及应用程序的部署。这包括资源的预分配、软件安装、安全补丁更新、性能监控和故障排查等。
  • 无服务器架构:开发者几乎不直接管理底层基础设施,云服务提供商自动处理服务器的配置、扩展、维护和安全更新。用户只需关注业务逻辑的代码编写和部署,极大地减轻了运维负担。


2. 计费模式

  • 传统服务器架构:通常基于固定成本或者预付费模型,即使资源未充分利用,也需要承担一定的费用。包括服务器租赁、带宽、存储空间等固定成本。
  • 无服务器架构:采用按需付费的模式,仅对实际消耗的计算资源(如执行时间、请求次数、存储使用量等)进行计费,这有助于降低成本,特别是在应用负载波动较大的情况下。


3. 扩展性

  • 传统服务器架构:扩展性相对较低,需要提前规划资源以应对高峰负载,手动添加或升级服务器资源。
  • 无服务器架构:具有高度的弹性和自动扩展能力。云服务会根据应用的实际需求自动分配资源,无需人工干预,能够迅速响应突发流量。


4. 开发与部署速度

  • 传统服务器架构:部署新应用或更新现有应用通常需要较长的时间,涉及到环境配置、测试、部署等多个环节。
  • 无服务器架构:函数部署快速,代码上传后即可运行,迭代速度快,有利于快速开发和持续交付。

   

三、无服务器架构的优势

1、成本效率

  1. 按需付费模式:在无服务器计算模型下,用户仅需为实际使用的计算资源和执行时间付费,而不是预先支付固定的服务器租用费用。这意味着在应用需求低谷期,用户不会为闲置的服务器资源买单,大大降低了空闲成本。
  2. 资源自动优化:无服务器架构通过自动伸缩功能,根据应用的实际负载动态分配资源。在流量高峰期,系统自动增加资源以保证性能;而在低峰期,则自动释放资源,减少开支。这种精细化的成本控制策略能够确保资源得到最高效的利用。
  3. 减少运维成本:由于云服务提供商负责底层基础设施的维护和管理,企业无需雇佣大量运维人员进行服务器监控、安全更新、备份等工作,从而节省了大量的人力成本。
  4. 消除前期投资:相较于传统服务器架构,无服务器模式免去了购买和设置服务器的初期投入,降低了进入门槛,特别是对于初创企业和进行新项目试验的团队而言,可以更快地启动项目而无需担心高昂的初始投资。
  5. 成本透明化:无服务器架构的计费模式较为直接和透明,用户可以清晰地看到每一项服务或函数的消耗成本,便于预算管理和成本优化。
  6. 避免资源浪费:由于资源的即时分配和释放,无服务器架构减少了因资源预估不准确导致的过度配置或资源闲置问题,从而避免了不必要的资金浪费。

   

2、灵活性与可扩展性

  1. 快速迭代与部署:无服务器架构允许开发者将应用拆分为微小的功能模块(函数),每个函数都可以独立开发、测试和部署。这种细粒度的管理极大提升了开发效率,使得新功能的添加或现有功能的修改变得迅速且简便,支持快速迭代和持续集成/持续部署(CI/CD)流程。
  2. 无缝扩展:基于事件驱动的机制,无服务器应用能够根据实际需求自动扩展。当请求量增加时,云服务提供商自动分配更多资源来处理额外的工作负载,而不需要开发者手动调整服务器数量或配置。这一特性确保了应用在面对突发流量或长期增长时都能保持高性能和稳定性,同时也避免了过量预置资源带来的浪费。
  3. 地理分布式部署:云服务提供商通常在全球拥有多个数据中心,无服务器架构能够轻松利用这一优势,根据用户地理位置智能路由请求,或在不同地区复制服务,减少延迟,提升用户体验。这对于跨国运营或需快速响应的业务至关重要。
  4. 跨平台兼容性:无服务器函数通常遵循开放标准,这意味着开发者编写的代码可以在不同的云服务商之间迁移,增加了灵活性,减少了供应商锁定的风险。

   

四、无服务器架构的挑战与局限

1、冷启动问题

冷启动问题定义

冷启动指的是在无服务器环境中,当一个函数在一段时间内没有被调用,云服务提供商可能会将其从内存中移除以节省资源。当下一次请求到达时,这个函数需要重新加载到内存中,初始化执行环境,这一过程会产生额外的延迟,即所谓的“冷启动延迟”。

冷启动的影响

  • 延迟增加:用户首次请求或长时间未请求后再次请求时,可能体验到较明显的延迟,影响应用响应速度和用户体验。
  • 资源消耗:冷启动过程中需要加载函数及其依赖,可能会暂时消耗更多的计算和内存资源。
  • 一致性问题:对于要求严格响应时间的应用,冷启动可能导致服务性能不稳定。


应对策略

  1. 预热机制:定期触发函数,保持其活跃状态,减少冷启动发生的概率。
  2. 代码与依赖优化:减小函数包的大小,优化代码结构,减少加载时间。
  3. 使用缓存:缓存函数实例或其依赖,加快重启时的加载速度

   

2、资源限制与监控难题

资源限制

  • 内存和执行时间限制:云服务提供商通常会为无服务器函数设置最大内存使用量和最长执行时间限制。超过这些限制会导致函数执行失败,这对处理复杂或长时间运行的任务构成挑战。
  • 并发执行限制:为了防止资源滥用和保障服务稳定性,云平台还会限制函数的并发执行数量。对于高并发场景,可能需要额外的配置或策略来优化处理能力。
  • 资源争抢:在共享基础设施上,多个函数同时运行可能导致资源竞争,影响性能和响应时间。


监控与调试难题

  • 分布式追踪困难:无服务器应用由多个独立运行的函数组成,这些函数可能跨多个服务和区域运行,追踪请求的完整路径和诊断问题变得复杂。
  • 日志和指标收集:虽然云服务提供商通常提供日志和监控服务,但由于函数的瞬态性质,收集、聚合和分析这些数据以获取有意义的信息可能比较困难。
  • 调试复杂性:由于函数的短暂运行特性,开发者难以复现问题环境进行调试,尤其是冷启动相关的问题。


应对策略

  1. 资源优化:合理分配函数的内存和执行时间,优化代码以减少资源消耗,必要时利用云平台的高级配置来调整限制。
  2. 采用专业监控工具:利用云服务商提供的或第三方监控工具,实现详细的日志记录、性能跟踪和异常检测。
  3. 分布式追踪:实施分布式追踪系统(如OpenTelemetry)来跨函数和服务跟踪请求,以便于问题诊断

   

  💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于云原生的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红海云签约海新域集团,产业服务运营领军企业加速人力资源数字化转型

北京海新域城市更新集团有限公司(以下简称“海新域集团”)是北京市海淀国有资产投资集团有限公司一级监管企业,致力于成为国内领先的产业服务运营商。集团积极探索城市和产业升级新模式,通过对老旧、低效等空间载体重新定位规划、…

FPGA基本资源介绍

文章目录 FPGA资源介绍1.可编程输入输出单元(IOB)2.可配置逻辑块(CLB)3.数字时钟管理模块(DCM)4.嵌入式块RAM(BLOCK RAM / BRAM)4.1其他ram 5.丰富的布线资源6.底层内嵌功能单元7.内嵌专用硬核软核、硬核、以及固核的概念 FPGA资源介绍 1.可编程输入输出单元(IOB) 可编程输入…

C++视觉开发 五.答题卡识别

答题卡识别主要步骤 (1)反二值化,选项处理为前景(白色),其它处理为背景(黑色)。 (2)每个选项提取出来,计算各选项白色像素点个数。 (3)筛选出白色像素点最多的选项作为考生答案。 (4)与标准答案…

【机器学习】连续字段的特征变换

介绍 除了离散变量的重编码外,有的时候我们也需要对连续变量进行转化,以提升模型表现或模型训练效率。在之前的内容中我们曾介绍了关于连续变量标准化和归一化的相关内容,对连续变量而言,标准化可以消除量纲影响并且加快梯度下降…

年化达21%(K=1),最大回撤35%,K=3时,卡玛比最优,最大回撤20%(年化15.2%)| Quantlab5.0代码发布

原创文章第578篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 Quantlab5.0代码发布: 值得说明,Quantlab5与4没有继承关系,5开始的思路是: 1、尽量少封装,保留回测框架最原始的功能。…

【LabView学习篇 - 1】:初始LabView

文章目录 初始LabView前面板和程序框图前面板(Front Panel)程序框图(Block Diagram)交互和工作流程 练手小案例:LabView中实现加法操作 初始LabView LabVIEW(Laboratory Virtual Instrument Engineering W…

【CT】LeetCode手撕—93. 复原 IP 地址

目录 题目1- 思路2- 实现⭐93. 复原 IP 地址——题解思路 3- ACM 实现 题目 原题连接:93. 复原 IP 地址 1- 思路 模式识别:给一个 String 字符串 ——> 复原 IP 地址 ——> 回溯三部曲 ,回溯的切割问题 ——> 实现一个左闭右闭区间…

利用redis数据库管理代理库爬取cosplay网站-cnblog

爬取cos猎人 数据库管理主要分为4个模块,代理获取模块,代理储存模块,代理测试模块,爬取模块 cos猎人已经倒闭,所以放出爬虫源码 api.py 为爬虫评分提供接口支持 import requests import concurrent.futures import …

Artificial Intelligence Self-study

Artificial Intelligence Self-study Traditional AI (Symbolic AI) 基于:符号表示 数理逻辑 搜索 - 有明确规则,依靠算力。Appliance : 数学难题(Heuristic Algorithm),棋牌对抗(围棋),专家系统(输入病症&#xf…

linux安装jdk1.8(无废话版)

文章目录 1、下载安装包2、创建文件目录,并将安装包上传到该目录下3、解压安装包4、配置环境变量5、加载配置文件6、验证 前言:linux系统以ubuntu20.04.6版本为例,jdk版本jdk-8u411-linux-x64.tar.gz版本为例 1、下载安装包 jdk下载地址&am…

2. 创建kvm虚拟机

创建kvm虚拟机 一、创建kvm虚拟机1、virt-manager 图形化工具2、virt-install 命令行工具3、查看虚拟机 一、创建kvm虚拟机 1、virt-manager 图形化工具 2、virt-install 命令行工具 [rootlocalhost ~]# virt-install --namevm02_centos79 \ > --graphics vnc,listen0.0.0…

Java的数据类型(复习版)

思维导图 一.字面常量 什么是常量?在我的理解看来常量就是在一个程序运行期间,保持不变的量就是常量。 例如: System.out.println(100);System.out.println(a);System.out.println(3.114);这些都可以称为常量。 字面常量的分类:…

护眼落地灯哪个牌子好?盘点五款必入不踩雷的护眼大路灯

护眼落地灯哪个牌子好?在这个快节奏的时代,护眼落地灯已经从一种高端选择转变为日常用眼生活中的必须品。不论是提升普通照明,还是针对孩子学习是改善光线质量环境,一款优秀的护眼落地灯都能成为我们生活中的照明神器。怎么选择一…

Java实现电子围栏的小例子

主要需求是实现一个电子围栏判断的小例子其中包括前端和后端的demo代码 引入对应的依赖库 <!--jts库通常用于几何计算和表示地理空间数据--> <dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><…

在 VS Code 中自动化 Xcode 项目编译和调试

在 VS Code 中自动化 Xcode 项目编译和调试 在日常的开发工作中&#xff0c;Xcode 是 macOS、iOS、watchOS 和 tvOS 应用程序开发的主要工具。为了提高工作效率&#xff0c;许多开发者选择在 Visual Studio Code (VS Code) 中编辑代码&#xff0c;并希望能够直接从 VS Code 启…

无线传感器网络(物联网通信技术)期末考试2024年真题

目录 WSN期末复习资料 第一章&#xff1a;概述 第二章MAC协议 第三章路由协议 第四章时间同步技术 第五章定位技术 第六章安全技术 第七章拓扑控制 补充TPSN、HRTS公式推导 2024年期末考试考点 一、简述 二、考试真题回忆 WSN期末复习资料 第一章&#xff1a;概述 …

蓝桥杯开发板STM32G431RBT6高阶HAL库学习FreeRtos——新建工程

一、介绍 ​ 蓝桥杯嵌入式使用的单片机是STM32G431RBT6&#xff0c;内核ARM Cortex - M4&#xff0c;MCUFPU&#xff0c;170MHz/213DMIPS&#xff0c;高达128KB Flash&#xff0c;32KB SRAM&#xff0c;其余的外设就不多介绍了&#xff0c;参照数据芯片数据手册 ​ CT117E-M4…

JavaScript——while类型

目录 任务描述 相关知识 while类型 编程要求 任务描述 质数的定义如下&#xff1a;大于1的自然数&#xff0c;且除了1和本身外没有别的因数。如2、3、5、7。 本关任务&#xff1a;利用循环结构求质数的和。 相关知识 在选择结构中&#xff0c;条件会被测试一次&#xff…

74HC165芯片验证

目录 0x01 74HC165芯片介绍0x02 编程实现 0x01 74HC165芯片介绍 74HC165的引脚定义如下&#xff0c;长这个样子 ABCDEFGH是它的八个输入引脚&#xff0c;例如你可以将它连接按键&#xff0c;让它来读取8个按键值。也可以将他级联其它的74165&#xff0c;无需增加单片机GPIO引…

代码动态编译

背景 开发环境下新加代码、改代码时要重启后生效&#xff08;耗时间&#xff09;&#xff1b;需求:不用重启且支持springboot 、spring、MyBatis。 实现 下地地址&#xff1a;https://github.com/JetBrains/JetBrainsRuntime/releases 1.根据系统类型下载压缩包 2.解压后配…