很长一段时间没有更新,因为前阵子一直在研究云原生相关的项目,包括比较热门的Serverless,我们主要在关注Knative。后面我们会更新不少Knative的文章,还会上线Knative中文社区,并把它作为我们的云原生社区,把大家聚集起来,共同研究云原生技术。
一、有关对Serverless的批评
绝大多数对Serverless的批评针对的是速度问题。更具体地说,无服务器应用程序的主要缺点,也就是众所周知的冷启动 问题——增加的延迟,你的代码需要在底层云服务完成分配计算资源,拉取代码或容器映像,安装额外的软件包并配置环境等一系列步骤完成后,才能启动执行。
优先考虑执行速度的工程师给人的印象是,关于整个应用程序生命周期管理的最终成功指标是我们的代码执行任务完成的速度。
作为IT工程师,批评者们看到了有关可维护性以及通过利用技术快速可靠地提供业务价值的能力方面的实际问题,但我不确定这种指标是否正确地衡量了最重要的事情——实现价值的时间,开发周期的速度,易于维护,为最终用户保持较低的成本,通过促进无缝的IT运营来降低运营中断的风险,并最终分配我们的大部分工程时间来妥善解决实际的业务问题,而不是花在配置和管理服务器上。
二、Serverless的真正好处
如果你对应用程序执行速度的延迟严苛到不能接受偶尔200毫秒的延迟,那么无服务器对于你来说确实不是好的选择。但是我们不能因此否定无服务器的重要价值,每个人都需要自己决定用例中可接受的延迟时间。
无服务器是管理IT基础架构的一种极具成本效益和高效的方式,对于可能没有数万元用于闲置资源的IT部门以及一支专门的支持工程师24/7维护团队的IT团队特别有利。
Serverless的低成本可能胜过任何弊端
在我所看到的大多数用例中,当仅考虑实际的计算成本时,无服务器的成本要比自托管资源便宜几个数量级。但是无服务器真正最大化的节省成本,在于无服务器显著地减少了操作、扩展和维护基础架构所需的时间(总拥有成本,简称TCO)。事实是,维护基础架构的全职工程师团队比任何无服务器资源的成本都要高得多。
我并不是在暗示每种情况下无服务器选项总是便宜。如果你的应用会持续收到数亿个请求,如果你的工作负载非常稳定,并且如果你有足够的工程师可以监视和扩展所有这些资源,那么使用自我管理的基础架构确实可能会更好。
冷启动是配置和预算的问题
回到成本问题,冷启动问题在很大程度上取决于您愿意花费多少以及如何配置无服务器资源。
如果您愿意支付额外的费用,则有许多缓解冷启动问题的方法,例如利用预热的实例(预配置的并发性)或故意发出更多的请求虚假请求以确保您的环境保持温暖。通过使用诸如Dashbird的监视平台,您甚至可以收到有关功能中发生的任何冷启动的通知,从而帮助您优化无服务器资源。在下图中,您可以看到在29个调用中,我们可以观察到一个冷启动,这使总执行时间增加了大约180毫秒的延迟。
Dashbird的可观察性功能有助于识别和防止冷启动
您可以为任何冷启动配置Slack或电子邮件警报,以了解它们发生的频率。
在Dashbird中设置冷启动警报
改善Lambda函数延迟的技术
您可以通过适当地利用上下文重用来减少无服务器功能的延迟。腾讯云冻结并存储Lambda的执行上下文,即handler
功能外部发生的所有事情。如果在相同的15分钟内执行了另一个功能,则可以重用冻结的环境。这意味着,如果您指定耗时的操作(例如连接到Lambda处理程序外部的关系数据库),则将获得显着更好的性能。
您的工作负载可接受什么延迟?
最终,最好是问自己,用例可接受的延迟时间是多少。当谈到冷启动引起的延迟时,我们通常争论的是毫秒。在我作为数据工程师的工作中遇到的所有用例(也在构建后端API)中,日常业务中的延迟都不明显。
最后,诸如阿里云的无服务器Kubernetes服务之类的平台使您可以在单个Kubernetes集群中混合无服务器和非无服务器数据平面。这种混合使您能够在非无服务器数据平面上运行关键任务的低延迟工作负载,而其他工作负载(例如批处理)可以由无服务器数据平面处理,从而获得最佳性能。
Serverless是关于“ NoOps”和可扩展性
无服务器服务使您可以更快地为企业提供价值,因为云提供商可以处理IT运营,即配置和扩展计算集群,安装安全补丁和升级,以及解决硬件崩溃和内存问题。这使您有很多时间可以回头,可以利用它们更好地为最终客户提供服务。到底最重要的不是吗?
无服务器背后的自动化节省了高技能工程师的时间,因此他们可以专注于解决业务问题,而不是管理集群。它允许将IT运营的工作分担给云厂商的DevOps专家,他们可能比该星球上的其他任何公司都拥有更多的管理计算专业知识。
从Serverless中受益匪浅的用例
想象一下,您刚刚成立了一家初创公司。最初,您可能不需要大量的资源,并且可能只有一个开发人员。无服务器模式允许您从小规模开始,并随着按需付费模式的发展壮大,自动扩展资源。
同样,可以从无服务器中受益匪浅的另一个群体是可能没有大型IT部门的小型企业。只需一名专业的DevOps工程师(而不是他们的整个团队)就能管理整个应用程序生命周期,这是无服务器的巨大优势。
如果您的工作量本质上是季节性的,那么无服务器也是一个不错的选择。例如,如果您经营一家电子商务公司,则可能会在双11和节日期间遇到季节性高峰。无服务器基础架构使您可以在这种情况下适应计算。
而且某些事件根本无法预测。想象一下,您一直在网上商店出售洗手液,消毒剂,口罩和类似物品,然后发生了全球性大流行的瘟疫,现在每个人都需要您的产品。无服务器基础架构可在任何情况下为您提供任何规模的扩展。
代码速度与开发周期的速度
除了代码执行速度外,我们还应该考虑开发速度。在许多情况下,无服务器微服务范例可加快开发周期,因为从设计上讲,它鼓励使用更小的单个组件,并使您彼此独立地部署每个服务。
如果无服务器使您能够快速向利益相关者交付应用程序的第一个版本,并在开发周期中加快迭代速度(同时降低成本),那么由于偶尔的冷启动而导致增加的几毫秒的延迟,似乎并不是那么重要的。
三、对Serverless的结论
总体而言,没有一个万能的解决方案,因为我们不能期望任何技术能在所有用例中使用,执行速度最快,成本极低,而又不存在任何缺点(例如偶尔的冷启动)。
我认为,对于一项技术,我们不应该只看到它的缺陷,而应该关注技术设计中至关重要的方面。从这个意义上说,Serverless确实是有用并且重要的,如果你知道何时以及如何使用它。
文丨Soundhearer
图丨来源于网络