作为工程师,你真的了解无服务器?

译者 | 王欢

来源 | 分布式实验室

头图 | 下载于ICphoto

最近,我在YouTube上看了一个非常出色的开发人员的视频。它的标题是“无服务器毫无意义”。虽然我非常喜欢该视频,但也不敢确定作者关于无服务器的观点是否完全正确,因此我想在本文中进行讨论。

在引言中,作者开了个玩笑:“这个世界上有两件事我不明白——女生和无服务器。”

我不知道他与女生的关系,但是对于无服务器的观点,他是对的吗?让我们看看他的批评,并讨论潜在的对立论点。剧透:我认为无服务器确实有意义,前提是你知道何时以及如何使用它。

无服务器的批判

YouTube视频上提到的最主要争论是速度问题。更具体地说,从作者的角度来看,无服务器应用程序的主要缺点是(众所周知的)冷启动问题——增加的延迟,你的代码只有在底层云服务完成分配计算资源,拉取代码或容器镜像,安装额外的程序包并配置环境之后才能开始执行。

优先考虑执行速度的工程师给人的印象是,整个应用程序生命周期管理的最终成功指标是我们的代码完成所需执行任务的速度。

作为一个在IT行业工作多年的人,我看到的实际问题却是更多关注维护性以及利用技术来快速可靠的提供商业价值的能力,我不确定这种指标是否正确地衡量了最重要的因素——评估时间, 开发周期的速度,易于维护,为最终用户降低成本,通过促进无缝的IT运营来降低运营中的风险,最后,分配我们的大部分工程时间来正确解决实际业务问题而不是在配置和管理服务器上。

一些工程师错过了什么?无服务器的真正好处

如果你对执行速度这点特别关心并且偶尔的200毫秒(在AWS[2]上能达到一秒)的延迟在你的工作负载中是不可接受的,那么无服务器确实不是你的选择,这点完全可以接受。但是,我们不能因为无服务器的延迟就说它毫无用处。每个人都需要自己决定用例中可接受的延迟时间。

无服务器是管理IT基础架构的一种极具成本效益和高效的方式,对于可能没有很多钱用于闲置资源的IT部门以及一支专门7×24小时的支持工程师的维护团队特别有利。

无服务器的低成本可能胜过任何弊端

在我看到的大多数用例中,仅在考虑实际计算成本的情况下,无服务器就比自托管资源便宜几个数量级。如果再考虑无服务器显着减少了操作,扩展和维护基础架构所需的时间(总拥有成本,简称TCO[3]),那么这时你才真正认识到成本的节省。事实上维护基础架构的全职工程师团队比任何无服务器资源的成本都要高得多。

我并不是说对于所有用例无服务器选项总是更便宜。如果你持续收到数亿个请求,如果你的工作负载非常稳定,并且如果你有足够的工程师可以监控和扩展所有这些资源,那么使用自托管的基础架构确实可能会更好。

冷启动是配置和预算的问题

回到成本问题上来,冷启动问题在很大程度上取决于你愿意花费多少以及如何配置无服务器资源。

如果你愿意支付额外的费用,那么有许多缓解冷启动的方法,例如利用预热的实例(提供并发性)或故意发出更多的请求(虚假请求[4])以确保你的环境保持在线。通过使用诸如Dashbird的监控平台,你甚至可以收到发生在函数中的任何冷启动的通知,从而帮助你优化无服务器资源。在下图中,你可以看到在29个调用中,我们可以观察到一个冷启动,这使总执行时间增加了大约180毫秒的延迟。

Dashbird的可观察性功能有助于识别和防止冷启动(作者提供的图片)

你可以为任何冷启动配置Slack或电子邮件警报,以了解它们发生的频率。

在Dashbird中设置冷启动警报(作者提供)

改善Lambda函数延迟的技术

你可以通过适当利用上下文重用功能来减少无服务器函数的延迟。AWS冻结并存储Lambda的执行上下文,即在函数处理程序(handler)之外发生的所有事情。如果在相同的15分钟内执行了另一个函数,则可以重用冻结的环境。这意味着,如果你做了耗时的操作(例如连接到Lambda处理程序外的关系数据库),那么能够获得明显更好的性能。 这篇文章[5]非常详细地解释了该主题。

有许多精彩的文章讨论如何缓解甚至完全消除冷启动问题,例如这篇[6]还有这篇[7]。Dashbird已开源名为xlambda[8]的Python库,该库可以让基于Python的Lambda函数保持在线状态(warm)。同样,杰里米·戴尔(Jeremy Dale)为JavaScript开源了一个类似的Lambda加热器程序包[9]。最后,这个无服务器框架[10]也包括了提供相同功能的插件[11]。

你的工作负载可接受多少延迟?

最终还是要问问自己,用例可接受的延迟时间是多少。当谈到冷启动引起的延迟时,我们通常争论的是毫秒。在我作为数据工程师的工作中遇到的所有用例(也构建后端API)中,日常业务中的延迟都不明显。

最后,诸如AWS的无服务器Kubernetes服务(在Fargate上也称为EKS)之类的平台使你可以在单个Kubernetes集群中混合无服务器和非无服务器数据层。这种混合使你能够在非无服务器EC2数据层上运行关键任务的低延迟工作负载,而其他工作负载(例如批处理)可以由无服务器数据层处理,从而获得这两个不同数据层的最佳性能。你可以在这篇文章[12]中找到有关此内容的更多信息。

无服务器是关于“无运维”和可扩展性

无服务器可以让你更专注业务,因为云提供商会帮你处理IT运维,例如配置和扩展计算集群,安装安全补丁和升级,以及解决硬件崩溃和内存问题。这会让你有更多的时间用来为终端客户提供服务。为客户提供更好的服务不就是我们的最终目的吗?

无服务器背后的自动化节省了高技能工程师的时间,因此他们可以专注于解决业务问题,而不是管理集群。它允许将IT运维的工作分担给AWS的DevOps专家,他们可能比该星球上的其他任何公司都拥有更多的管理计算相关的知识。

从无服务器中受益匪浅的案例

想象一下,你刚刚成立了一家初创公司。最初,你可能不需要大量的资源,并且可能只有一个开发人员。无服务器模式允许你从小规模开始,并且可以使用按需付费模式,自动扩展资源。

同样,可以从无服务器中受益的另一个群体是可能没有大型IT部门的小型企业。只需一名专业的DevOps工程师(而不是整个DevOps团队)就可以管理整个应用程序生命周期,这是无服务器的巨大优势。

如果你的工作量天然具有季节性,那么无服务器也是一个很好的选择。例如,如果你经营一家电子商务公司,则可能会在黑色星期五和圣诞节期间遇到季节性高峰。无服务器基础架构可以让你在这种情况下适应相应的工作量。

另外,某些事件是无法预测的。想象一下,你一直在网上商店出售洗手液,消毒剂,口罩以及类似物品。然后发生了全球性流行病,现在每个人都需要你的产品。无服务器基础架构可以在任何情况下为你提供任何规模的扩展。

代码速度vs开发周期速度

除了代码执行速度外,我们还应该考虑开发速度。在许多情况下,无服务器微服务模式可以加快开发周期,因为从设计上讲,它鼓励使用更小的单个组件,并让你能够彼此独立地部署每个服务。

如果无服务器能够让你快速的向利益相关者(stakeholders)交付应用程序的第一个版本,并在开发周期中加快迭代速度(同时降低成本),那么由于偶尔的冷启动而导致的几毫秒的延迟增加似乎是一个很小的问题。

与其他云服务的无缝集成

以AWS为例,每个无服务器服务都与CloudWatch集成在一起以进行日志记录,与IAM集成以管理访问权限,并与CloudTrail集成以收集度量指标和跟踪,等等。除此之外,无服务器平台通常为你提供基本的构建块,以构建更大的,解耦的微服务体系结构,例如与无服务器消息队列(SQS),无服务器发布-订阅消息总线(SNS),无服务器NoSQL数据存储(DynamoDB)以及对象存储(S3)集成。

YouTube视频中未考虑到的无服务器弊端

视频中还存在一些未提及的缺点,我想列出来,以便给你提供完整的认识,而无需添加任何糖衣。

即使在许多用例中,无服务器在成本,可伸缩性和维护方面似乎都像是一个天堂,但这并不是每个用例的银弹。

  1. 面临供应商锁定的风险:云提供商使他们的服务使用起来非常方便并且具有成本效益,以至于你天然的面临被锁定在其特定平台中的风险。

  2. 从某种程度上看,无服务器资源相比较自托管资源,你能够对计算资源的控制会比较弱一些。例如,你不能通过SSH到底层的计算实例上手动执行某些配置,并且在实例类型方面你的自由度也较小。例如,你无法在具有GPU的计算实例上运行无服务器函数或容器(目前)。

  3. 如果你有一些特定的合规性要求,让你无法在云上的共享租户上处理数据,那么无服务器可能不是你的选择。

  4. 尽管将你的IT基础架构拆分为独立的微服务有助于管理依赖并能够加快发布周期,但这也带来了对于独立服务管理方面的挑战。尽管监控解决方案(例如Dashbird)在很大程度上解决了此特定问题,但你也需要意识到这些。

无服务器批判的总结

总体而言,当我们想要像建立自托管的本地技术一样使用无服务器或云服务之类的新模式时,常常会遇到问题。这根本不是使用它的最佳方法。在将工作负载移至云上时,如果直接迁移,那么你将失去云服务的许多好处,甚至会误解其目的。没有一个万能的解决方案,因为我们不能期望任何技术都能在所有用例中使用,成为世界上最快的技术,并且在没有任何不利方面(例如偶尔的冷启动)的情况下几乎还没有额外的成本。

从我的角度来看,在谈论无服务器(坦率地说,是与IT相关的任何内容)时,我们不应只考虑一个方面而不检查其他关键方面,尤其是那些在各自技术的设计中至关重要的方面。从这个意义上说,无服务器确实有其存在的道理,前提是你知道何时以及如何使用它。

参考链接:

  1. https://www.youtube.com/watch?v=AuMeockiuLs&t=4s

  2. https://youtu.be/EML6FKBdsNU?t=229

  3. https://en.wikipedia.org/wiki/Total_cost_of_ownership#Computer_and_software_industries

  4. https://github.com/juanjoDiaz/serverless-plugin-warmup

  5. https://medium.com/capital-one-tech/best-practices-for-aws-lambda-container-reuse-6ec45c74b67e

  6. https://dashbird.io/blog/can-we-solve-serverless-cold-starts/

  7. https://dashbird.io/blog/cold-starts-impact/

  8. https://github.com/dashbird/xlambda/

  9. https://github.com/jeremydaly/lambda-warmer

  10. https://www.serverless.com/

  11. https://www.npmjs.com/package/serverless-plugin-warmup

  12. https://medium.com/better-programming/serverless-kubernetes-cluster-on-aws-with-eks-on-fargate-a7545cf179be

原文链接:

https://betterprogramming.pub/why-many-engineers-dont-understand-the-real-use-of-serverless-df2300766aa9

60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!

直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!

更多精彩推荐
☞5G、射频、奥特曼,这仨有联系吗?☞再见 Nacos,我要玩 Service Mesh 了!☞急!CPU 被挖矿,该怎么找进程?
点分享点收藏点点赞点在看

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

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

相关文章

recaf反编译 java jar包

文章目录1. 获取方式2. 软件运行3. 导入jar4. 模式切换5. 字符串混淆解析1. 获取方式 添加QQ群获取197453088 2. 软件运行 java -jar recaf-2.21.13.jar3. 导入jar 4. 模式切换 5. 字符串混淆解析 如何解密Allatori 混淆的字符串 Java ALLATORIxDEMO

分布式锁在存储系统中的技术实践

简介: 阿里云存储提供了完整的分布式锁解决方案,经过了阿里云众多云产品宝贵的业务场景中长期锤炼,稳定高可靠,且提供了多种语言的SDK选择,甚至是RESTful集成方案。 1 背景 针对共享资源的互斥访问历来是很多业务系统…

Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)

简介: 从上篇开始,我们进入到了高可用的章节,上篇提到的熔断能力,是历年保障大促当天晚上整个系统不被洪峰流量打垮的法宝,本篇介绍的措施与熔断有不一样的地方? 前言 从上篇开始,我们进入到了…

闲鱼对Flutter-Native混合工程解耦的探索

简介: 分手快乐,祝你快乐~ 作者:祈晴 1. 闲鱼Flutter现状 闲鱼是第一个使用Flutter混合开发的大型应用,但闲鱼客户端开发最深入体会的痛点就是编译时长影响开发体验。在FlutterNative这种开发模式下,Nat…

学 Python 最大的 1 个误区,看看你中招了吗?

提起 Python,大家总觉得很简单。但是,能把 Python 用好的人,好像并没多少。随着 Python 火了之后,像“ 3 天带你学会 Python ”、“快速入门到全栈”这样的教程层出不穷。很多讲了一点基础语法后,还没讲 http 协议和异…

Unable to make public jdk.internal.loader.Resource jdk.internal.loader.URLClassPath.getResource(jav

文章目录1. 现象2. 异常截图2. 解决方案3. 执行命令4. 启动日志5. 浏览器效果图1. 现象 执行命令 xjar.exe java -jar unified-access-center-passwd.jar运行 sprinbgboot 打包的jar包报错 具体信息如下: C:\Users\gblfy\Desktop\xJarDir>xjar.exe java -jar…

win10安装go开发环境

文章目录1. 下载软件2. 安装3. 验证1. 下载软件 golang官网:https://golang.google.cn/dl/ 2. 安装 双击go1.19.1.windows-amd64.msi一路下一步 3. 验证 go version

3 张图带你走近蚂蚁mPaaS音视频通话组件

简介: 远程问诊、线上开户、车载语音通话……蚂蚁 mPaaS 正在“拥抱新技术,探索新未来”。 音视频技术的进步,让线上办公不再是一时权宜之计,也使得线上业务的“无接触”开展成为可能。近日,蚂蚁集团推出的移动开发平台…

立即生效!帕特·基辛格卸任 VMware 所有职务

整理 | 苏宓出品 | CSDN(ID:CSDNnews)心无二用,在帕特基辛格(Pat Gelsinger)成为英特尔新任 CEO 两个月后,他宣布辞去此前的 VMware 首席执行官的职务,全身心地帮助英特尔重建往日的…

云原生应用实现规范 - 初识 Operator

简介: 本文我们将首先了解到 Operator 是什么,之后逐步了解到 Operator 的生态建设,Operator 的关键组件及其基本的工作原理,下面让我们来一探究竟吧。 作者 | 匡大虎、阚俊宝 基于 Kubernetes 平台,我们可以轻松的…

HTTPS POST发送FORM 表单参数 返回 Json

文章目录依赖工具类依赖 <!--httpClient Start--><!--httpClient 文件上传 Start--><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifact…

如何基于 K8s 构建下一代 DevOps 平台?

简介&#xff1a; 当前云原生 DevOps 体系现状如何&#xff1f;面临哪些挑战&#xff1f;如何通过 OAM 解决云原生 DevOps 场景下的诸多问题&#xff1f;云原生开发应用模型 OAM(Open Application Model) 社区核心成员孙健波将为大家一一解答&#xff0c;并分享如何基于 OAM 和…

中国电子云发布专属云CECSTACK 以全栈信创赋能千行百业

2021年4月26日&#xff0c;第四届数字中国建设峰会召开之际&#xff0c;中国电子云在福州举办“云可信 创未来——中国电子云全系产品发布暨战略伙伴签约仪式”&#xff0c;重磅发布中国电子云“信创”实践和全栈自主专属云CECSTACK。中国电子副总经理、党组成员陈锡明&#xf…

idea 双击打不开了咋办

文章目录1. 文件内容还原2. 删除以前旧文件3. 删除以前缓存文件1. 文件内容还原 首先检查一下idea64.exe.vmoptions是否有改动 有的话可以把-javaagent的这一行删除&#xff0c;删除后保存再尝试看看能不能打开。 2. 删除以前旧文件 如果还是不行的话我们可以找打开 C:\Us…

使用日志审计查看MaxCompute执行过哪些操作

简介&#xff1a; MaxCompute完整地记录用户的各项操作行为&#xff0c;会自动将操作日志实时投递到ActionTrail中&#xff0c;ActionTrail针对作业&#xff08;Instance&#xff09;、表&#xff08;Table&#xff09;、函数&#xff08;Function&#xff09;、资源&#xff0…

谈“云”色变?近80%企业曾遭受数据泄露

出品 | 《大咖来了》 一边是企业上云这一毋庸置疑的发展趋势&#xff0c;但另一边&#xff0c;云数据泄露事件的频繁&#xff0c;却让不少企业谈“云”色变。 2020年2月&#xff0c;万豪酒店520万客人信息被泄露&#xff0c;英国信息专员办公室(ICO)对其进行了1840万英镑(约1.…

云网络十年:探路者阿里云的理想和坚持

简介&#xff1a; 转载自CSDN&#xff1a;专访阿里云网络产品线负责人&#xff0c;阿里云智能研究员祝顺民&#xff08;花名江鹤&#xff09;和阿里云资深产品专家吴天议。 近日&#xff0c;阿里巴巴发布强劲财季业绩后&#xff0c;高盛、摩根大通等多家机构上调阿里云估值至千…

idea resources和webapp下面的文件不编译怎么办?

真实案例 guns项目使用maven 3.6.1版本搭建的&#xff0c;但是同事用maven 3.6.3编译不好使&#xff0c;解决方案直接用maven 3.6.1版本&#xff0c;问题解决

电商搜索“随便逛逛,想知道大家都在搜什么?现在什么最热门?”

简介&#xff1a; 有时候用户只是随便逛逛&#xff0c;没有明确的搜索意图&#xff0c;如何推荐更多优质查询词&#xff0c;引导其搜索、购买那&#xff1f;本文结合实际案例运用阿里云开放搜索的解决方案实现优化。 案例背景 某O2O电商平台&#xff0c;线下覆盖上百家连锁超…

汇量科技收购热云数据,加速SaaS工具生态布局

4月28日&#xff0c;全球性技术服务平台汇量科技Mobvista(HK.1860)发布公告&#xff0c;宣布将全资收购热云数据——国内领先的第三方移动监测和营销科技公司&#xff0c;总交易对价超过15亿人民币(含现金及股票)。收购完成后&#xff0c;热云数据将作为汇量科技旗下全资子公司…