译者 | 王欢

来源 | 分布式实验室

头图 | 下载于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 被挖矿,该怎么找进程?
点分享点收藏点点赞点在看

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

  1. 天天都在说,无服务器计算到底是什么?

    过去一年,无服务器计算(serverless)已成为构建和运行现代应用程序和服务的普遍架构替代方案.无服务器应用程序允许开发人员专注于代码,而不是基础架构配置和管理.这加快了研发和发布周期,并允许更好 ...

  2. 无服务器计算将会取代容器?

    2019独角兽企业重金招聘Python工程师标准>>> 无服务器计算是当前的一项热门话题,甚至热过了Docker容器. 这么讲是说无服务器计算要成为容器的替代品吗?或者它是可以和容器 ...

  3. 服务器返回它们的和_无服务器有其陷阱。 这是避免它们的方法。

    服务器返回它们的和 by Nicolas Dao 由Nicolas Dao 无服务器有其陷阱. 这是避免它们的方法. (Serverless has its pitfalls. Here's how ...

  4. 金蝶云系统服务器,谁说ERP不能上公有云?金蝶云无服务器版ERP登陆AWS

    [51CTO.com原创稿件]公有云因其弹性可伸缩等特点,赢得了众多中小企业以及互联网用户的青睐.而企业也会选择非核心业务系统先迁移到云端,在满足创新业务快速发展的同时,还保证了核心业务的稳定性.安全 ...

  5. Serverless无服务器架构

    Serverless体系结构是一种应用程序设计,它包含第三方"后端即服务"(BaaS)服务,和/或包含在"功能即服务"(FaaS)平台上的托管临时容器中运行的自 ...

  6. 构建静态服务器_为静态网站构建无服务器联系表

    构建静态服务器 介绍 (Introduction) A few years ago AWS launched static hosting service S3, which was a paradi ...

  7. 详细!看看顶级互联网公司都在研究的无服务器架构!

    无服务器计算(Severless computing,简称 Serverless)现在是软件架构圈中的热门话题,国外三大云计算供应商(Amazon.Google 和 Microsoft)都在大力投入这 ...

  8. 关于无服务器(Serverless)架构你要搞懂的8件事

    2019独角兽企业重金招聘Python工程师标准>>> 无服务器计算,虽然神秘,但一定会成为IT行业最有力的工具之一.这种可能改变游戏规则的技术虽然不是全新的,但就像之前的容器技术一 ...

  9. 一文看懂当红Serverless:为何AWS、阿里云和腾讯云都在发力「无服务器架构」

    冠望 发自 凹非寺 量子位 报道 | 公众号 QbitAI 要说目前软件架构中热度十二分的话题,当属Serverless. 通常我们会将其翻译为"无服务器架构". 尽管成天被称为& ...

最新文章

  1. iframe怎么用_怎么样减少无效URL的爬行和索引
  2. iOS常用第三方库之Masonry
  3. 记录今天登录oracle时遇到的一个小问题--不能登录
  4. using IDisposable
  5. Kubernetes 凭什么成了云原生应用底座?
  6. 详解一个自己原创的正则匹配IP的表达式
  7. 分享朋友圈QQ空间需要哪些参数
  8. Linux-系统性能指标
  9. ubuntu 时区 修改时间 保存 重启 变化等
  10. 照片审核处理工具_2020中级会计考试报名今天开始,照片上传要求相关说明
  11. 禁忌搜索算法(Tabu Search)的基本原理与算法流程总结
  12. 【STM32 + HAL库】倒立摆
  13. 通过USB设置手机连接电脑上网
  14. c语言等差数列试题及其答案,等差数列练习题
  15. 【数据】社区发现数据集
  16. pygame 躲避僵尸
  17. matlab电机算法仿真,MATLAB电机仿真精华50例源代码
  18. Arduino录音时间延长_如何用arduino设计出可以语音播报的数字时钟
  19. python数据分析及可视化
  20. 可视化人工智能区块链操作系统奥泰AOT在硅谷立项

热门文章

  1. python随机产生100个整数二进制_PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。...
  2. 网站本地调试工具_一款Web调试代理工具:Fiddler
  3. wringPi 初始化GPIO 为上拉_玩转GPIO之PWM点亮呼吸灯(非树莓派)
  4. 改革以来计算机应用发展总结,计算机应用基础总结论文
  5. 运行java是提示 选择未包含 main 类型 如何解决_RuoYi 若依 代码生成器使用教程...
  6. java约瑟夫环迭代器_Josephus约瑟夫环问题的不同实现方法与总结
  7. php强制cookies,php Cookies操作类(附源码)
  8. 百万个小油馕跨越3000公里来支援!西安加油!
  9. 谱聚类(spectral clustering)原理总结
  10. 施一公的另一位女弟子:4年8篇CNS论文,入选“未来女科学家”,未来有望比肩颜宁...