深度使用了下 Serverless,太丝滑了

在 Serverless 架构下,开发者只需编写代码并上传,云平台就会自动准备好相应的计算资源,完成运算并输出结果,从而大幅简化开发运维过程。

云函数和 FaaS

最近在开发自己的小项目的时候,因为各种原因使用上了云函数这个东西,不夸张的说开发时间直接减少一半,当然也没啥复杂业务逻辑,但是乱七八糟各种配置基本都可以摒弃掉了。

云函数就是一种 Serveless,准确来说,云函数属于 Serveless 中的 FaaS(Function as a Service,函数即服务),典型的产品有阿里云函数、腾讯云函数、AWS Lambda、Google Cloud Functions、Azure Functions 等等。

FaaS 本质上是一种事件驱动的由消息触发的服务,FaaS 供应商(比如阿里云、腾讯云)一般会集成各种同步和异步的事件源,通过订阅这些事件源,可以突发或者定期的触发函数运行。于传统服务需要将应用程序(Application)部署到拥有操作系统的虚拟机或者容器中并且需要长时间驻留的机制不同,FaaS 是直接将程序部署上到平台上即可,当有事件到来时触发执行,执行完了就可以卸载掉。

IaaS、PaaS、SaaS、Faas

看完上面这些介绍一定还有很多同学一头雾水,别急,下面我来详细介绍下 FaaS 的发展背景:

云计算这个词大伙肯定都听说过,这个概念听起来很牛逼,但其实核心目的就是云服务商能够为用户提供更强大、更便宜的算力。

当然,不要觉得云计算就是一个超大号的机房,只不过服务器更多些。

云计算的本质,不是算力资源的简单堆砌,而是池化。它将大量的零散算力资源(廉价的算力资源)进行打包、汇聚,实现更高可靠性、更高性能、更低成本的算力。

具体来说,在云计算中,CPU、GPU、内存、硬盘等计算资源被集合起来,通过软件的方式,组成一个虚拟的可无限扩展的“算力资源池”。如果用户有算力需求,“算力资源池”就会动态地进行算力资源的分配,构建一个虚拟的“计算机”。用户按需使用、付费,即可。相比于用户自购设备、自建机房、自己运维,云计算有明显的成本优势,可以节约大量资金和人力。

根据提供算力资源的层级不同,云计算通常也分为 IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)。如下图所示:

图片

图片

那么,云计算这种 “租” 的方式,是不是最终极的算力资源使用方式呢?我们作为用户,使用算力,还能更简单一点吗?

答案是肯定的。

不管是自建机房,还是云计算,用户都需要和服务器打交道,和软硬件环境打交道。这些都是工具和过程,而我们的最终目的是什么?是得到运算结果。

那么,为了得到结果,我们可不可以不要关心环境的搭建过程呢?能不能直接忽略掉数据库、缓存、消息队列等等各种乱七八糟的配置呢?或者说,既然环境可以租,那能不能直接 “租” 服务呢?

如此,Serverless 应运而生了!

Serverless 是架构、也是思想,它的目的就是在云计算的基础上,再向前迈进一步,彻底“包揽”所有的环境工作,直接提供计算服务。

那 Serverless 具体怎么做到直接租服务的呢,核心就是这个服务足够“细小”,变成了“函数级”的颗粒度。从层级上来看,Serverless 在传统云计算 SaaS 的 Application(应用)层级之上,又加了一层 Function(函数),它的颗粒度更细,可以更灵活地满足用户的算力需求。

图片

图片

在 Serverless 架构下,开发者只需编写代码并上传,云平台就会自动准备好相应的计算资源,完成运算并输出结果,从而大幅简化开发运维过程。

我深度体验了一把,这个开发体验真的太太太太丝滑了,开发到部署无缝衔接,再回到之前的开发方式我只能说有、笨重。

Serverless = FaaS + BaaS

说了半天 FaaS,还没有正式介绍 Serveless,简单记忆:Serveless = FaaS + BaaS

又出现了一个新概念 BaaS(Backend as a Service,后端即服务),BaaS 可让开发人员访问各种各样的第三方服务和应用。例如,云提供商可以提供认证服务、额外加密、云访问数据库以及高置信度使用数据。

而在 FaaS 下,开发人员仍然要编写自定义服务器端逻辑,但它可以在完全由云服务提供商管理的容器中运行。

综上,Serverless 的优点是勿容置疑的:

  1. 无需管理基础设施:在 Serverless 中,云提供商负责管理底层的服务器和基础设施,包括硬件和操作系统。这意味着开发者无需担心服务器的配置、维护和扩展,可以将更多精力放在应用程序的开发和功能上。
  2. 自动伸缩:Serverless 可以自动伸缩资源以满足流量需求,无需手动干预。这可以确保应用程序在高峰时期具有良好的性能,并在低流量时期降低成本。
  3. 按需计费:Serverless 模型按照实际使用的资源和执行时间来计费,因此开发者只需支付他们真正使用的部分,而无需预先购买或租赁资源。
  4. 快速启动:Serverless函数通常在几秒内启动,因此可以迅速响应请求。这对于需要快速扩展或处理瞬时负载的应用程序非常有用。
  5. 事件驱动:Serverless 函数通常是事件驱动的,可以响应各种事件,如 HTTP 请求、数据库更改、队列消息等。这使得它们非常适合构建微服务和处理异步任务。

至于缺点,首先说定论,对于业务逻辑复杂的大型项目来说,Serverless 可能还不是一个非常好的选择:

  1. 依赖云服务商:Serverless 的主动权掌握在云服务商的手上,就比如现在云函数主流还是用 Node.js 写,各厂商对 Java 云函数的支持普遍还不是那么好
  2. 调试复杂性:在 Serverless 中,本地调试和跟踪函数会更加复杂,因为函数的执行是在云提供商的环境中进行的。
  3. 状态管理:要想实现自由的缩放,无状态是必须的,而对于有状态的服务,使用 Serverless 这就丧失了灵活性,有状态服务需要与存储交互就不可避免的增加了延迟和复杂性。
  4. 延迟:应用程序中不同组件的访问延迟是一个大问题,我们可以通过使用专有的网络协议、RPC 调用、数据格式来优化,或者是将实例放在同一个机架内或同一个主机实例上来优化以减少延迟。而 Serverless 应用程序是高度分布式、低耦合的,这就意味着延迟将始终是一个问题。
  5. 成本不可控:虽然 Serverless 按需计费有助于降低成本,但对于某些高负载或长时间运行的工作负载,可能会导致不可控的费用增加。

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

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

相关文章

力扣每日一题(+日常水几道题)

每日一题1333. 餐厅过滤器 - 力扣&#xff08;LeetCode&#xff09; 简单的按规则排序,去除几个不满足的条件然后排序返回即可 #include<algorithm> class Solution { public:vector<int> filterRestaurants(vector<vector<int>>& restaurants, …

找不到名称 “$“。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`。

vitevue3环境 1、安装jQuery npm install --save jquery 2、在main.ts文件进行配置 declare const window: any; import jQuery from jquery; window.$ window.jQuery jQuery; 注意&#xff1a;需要声明window属性&#xff1b; 要不然会报错&#xff1a;类型“Window &am…

Kafka:介绍和内部工作原理

展示Kafka工作方式的简单架构。 什么是Kafka&#xff1f;为什么我们要使用它&#xff1f;它是消息队列吗&#xff1f; •它是一个 分布式流处理平台或分布式 提交日志*。*•Kafka通常用于实时流数据管道&#xff0c;即在系统之间传输数据&#xff0c;构建不断流动的数据转换系统…

【记录文】Android自定义Dialog实现圆角对话框

圆角的dialog还是蛮常用的&#xff0c;demo中正好用上了 自定义Dialog&#xff0c;代码中可以设置指定大小与位置 /*** author : jiangxue* date : 2023/9/25 13:21* description :圆角的矩形*/internal class RoundCornerView(context: Context,view: Int, StyleRes theme…

B树和B+树的介绍和对比,以及MySQL为何选择B+树

在计算机科学中&#xff0c;B树和B树是常用的数据结构&#xff0c;用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B树的结构特点、实际应用方面以及它们的优缺点&#xff0c;并最后…

零代码编程:用ChatGPT批量将多个文件夹中的视频转为音频

有多个文件夹中的 视频&#xff0c;都要批量转换成音频格式。 转换完成后要删除视频。虽然现在已经有很多格式转换软件可以实现这个功能&#xff0c;但是需要一个个文件夹的操作&#xff0c;还要手动去删除视频。用ChatGPT来写一个批量自动操作程序吧&#xff1a; 输入提示词如…

【通意千问】大模型GitHub开源工程学习笔记(2)

使用Transformers来使用模型 如希望使用Qwen-chat进行推理,所需要写的只是如下所示的数行代码。请确保你使用的是最新代码,并指定正确的模型名称和路径,如Qwen/Qwen-7B-Chat和Qwen/Qwen-14B-Chat 这里给出了一段代码 from transformers import AutoModelForCausalLM, Aut…

朴素贝叶斯深度解码:从原理到深度学习应用

目录 一、简介贝叶斯定理的历史和重要性定义例子 朴素贝叶斯分类器的应用场景定义例子常见应用场景 二、贝叶斯定理基础条件概率定义例子 贝叶斯公式定义例子 三、朴素贝叶斯算法原理基本构成定义例子 分类过程定义例子 不同变体定义例子 四、朴素贝叶斯的种类高斯朴素贝叶斯&a…

【AIGC核心技术剖析】研究报告分享与汇总

AIGC研究报告 AI画画工具项目参考 AIGC&#xff08;Artificial General Intelligence Control&#xff09;技术是一种人工智能&#xff08;AI&#xff09;技术&#xff0c;旨在管理和控制人工智能系统的行为&#xff0c;以确保它们在执行任务时遵守一定的规则、伦理和价值观。A…

【3】贪心算法-最优装载问题-加勒比海盗

算法背景 在北美洲东南部&#xff0c;有一片神秘的海域&#xff0c;那里碧海蓝天、阳光 明媚&#xff0c;这正是传说中海盗最活跃的加勒比海&#xff08;Caribbean Sea&#xff09;。 有一天&#xff0c;海盗们截获了一艘装满各种各样古董的货船&#xff0c;每一 件古董都价值连…

leetcode1610. 可见点的最大数目(java)

可见点的最大数目 题目描述滑动窗口 题目描述 难度 - 困难 leetcode1610. 可见点的最大数目 给你一个点数组 points 和一个表示角度的整数 angle &#xff0c;你的位置是 location &#xff0c;其中 location [posx, posy] 且 points[i] [xi, yi] 都表示 X-Y 平面上的整数坐标…

交换机之间配置手动|静态链路聚合

两台交换机&#xff0c;配置链路聚合&#xff1a; 1、禁止自动协商速率&#xff0c;配置固定速率 int G0/0/1 undo negotiation auto speed 100int G0/0/2 undo negotiation auto speed 100 2、配置eth-trunk int eth-trunk 1 mode manual | lacp-staticint G0/0/1 eth-trun…

基于改进非局部均值的红外图像混合噪声去除方法

传统的去噪算法无法有效去除红外图像中的条纹与随机混合噪声。针对这一问题,提出了一种改进的基于非局部均值(NL-means)的混合噪声去除方法。首先,分析了非局部均值算法处理混合噪声的问题,并用一组实验分析了红外图像块中混合噪声的特性。根据实验结果,用有色高斯模型对混合噪…

iOS 视频压缩 mov转mp4 码率

最近还是因为IM模块的功能&#xff0c;IOS录制MOV视频发送后&#xff0c;安卓端无法播放&#xff0c;迫不得已兼容将MOV视频转为MP4发送。 其中mov视频包括4K/24FPS、4K/30FPS、4K/60FPS、720p HD/30FPS、1080p HD/30FPS、1080p HD/60FPS&#xff01; 使用AVAssetExportSessi…

web前端tips:js继承——寄生式继承

上篇文章给大家分享了 js继承中的 原型式继承 web前端tips&#xff1a;js继承——原型式继承 今天给大家分享一下 js 继承中的 寄生式继承 寄生式继承 寄生式继承&#xff08;Parasitic Inheritance&#xff09;是一种基于原型式的继承方式&#xff0c;它通过创建一个仅用于…

云可观测性安全平台——掌动智能

云可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能云可…

读高性能MySQL(第4版)笔记17_复制(下)

1. 复制切换 1.1. 复制是高可用性的基础 1.1.1. 总是保留一份持续更新的副本数据&#xff0c;会让灾难恢复更简单 1.2. “切换副本”&#xff08;promoting a replica&#xff09;和“故障切换”&#xff08;failing over&#xff09;是同义词 1.2.1. 意味着源服务器不再接…

C语言的学习快速入门

可以按照以下步骤进行&#xff1a; 了解基本概念和语法&#xff1a;C语言是一种结构化的编程语言&#xff0c;了解基本的语法规则对于入门非常重要。可以学习关键字、变量、数据类型、运算符、控制结构等基本概念。学习编程环境&#xff1a;选择合适的编程环境&#xff0c;例如…

ubuntu16编译linux源码内核

一、环境准备 1.1、安装虚拟机ubuntu16 编译内核大概需要20G的磁盘空间&#xff0c;所以硬盘大小尽量大于40G网络适配使用桥接 1.1.1、查看当前内核版本 uname -r1.2、安装samba服务 Samba 是一款数据共享的软件&#xff0c;可用于 Ubuntu 与 Windows 之间共享源代码&#…

性能测试监控指标及分析调优指南

一、哪些因素会成为系统的瓶颈 CPU&#xff1a;如果存在大量的计算&#xff0c;他们会长时间不间断的占用CPU资源&#xff0c;导致其他资源无法争夺到CPU而响应缓慢&#xff0c;从而带来系统性能问题&#xff0c;例如频繁的FullGC&#xff0c;以及多线程造成的上下文频繁的切换…