这一次 把 ServerLess 优雅抬走


当云原生的字眼出现越来越多的出现在我们周围的时候,我们就能意识到,云的时代已经来了。如果你们公司还没有用上 k8s 可能你都不好意思和其他小伙伴说你们公司的技术架构。而今天要给大家介绍的是,比 K8s 更接近”云原生”的 Serverless。本篇文章将主要告诉什么是 Serverless 以及为什么要使用Serverless。

Serverless 是什么?


Serverless 用中文翻译应该叫做无服务器架构,顾名思义就是不用服务器,但是实际上你的代码还是跑在服务器上。不过只是你不需要操心服务器上面的配置和维护了。运维的工作移交给了服务商来统一管理。相比容器来说,你之前是托管的一个容器,而现在则是托管了你的函数在云上。

用一句话来描述运行过程的话就是,当条件符合的时候供应商运行一个仅包含你的函数代码和环境的容器来处理输入,在处理完成后销毁容器。

Serverless 的优势

减少运维成本

尽管你的代码依旧运行在服务器上但是,你无需担心运维。也无需担心服务器的运行状态。云服务商都将帮你解决这些问题。你需要做就是书写无状态的函数,至于扩容?由于是以函数作为单位,扩容更是十分简单,云服务商会帮你解决一切。

你只需要为你使用的资源付费

Serverless 只会根据你使用的资源来进行付费,计费方式更像是你的话费,只有你的函数被调用时候才会计算花费,如果没有任何调用,则不会有任何的花费。

更好的可扩展性

作为后端开发,我们听得最多的就是弹性扩容和集群,对于 Serverless 来说,由于本身是由各种各样的云函数组成,所以供应商会帮你完成扩容操作,只需要增加函数的运行数量就足够了。

更快的更新和部署

相对传统的模型,我们可能已经有了基于容器的滚动更新,但是滚动更新仍然需要重新上传全部的代码,然而在 Serverless 中,如果你需要更新你的功能或者新的函数,只需要对于需要的函数进行替换即可,因为你的应用程序是由多个函数组成的。

代码可以距离用户更近

因为应用没有部署在一台固定的服务器上,它可以在供应商的任何一台服务器上运行,供应商可以将你的函数部署在全球各地的节点,当用户访问的时候,可以从最近的节点中调用应用返回数据,而不用和以前一样经过网络层层传递到服务器中。这会大幅度减少用户的网络延迟,提升用户体验。

没有银弹

Serverless 并不能完美解决应用的所有问题,Serverless 也有它的劣势。

黑盒运行

由于你的 Serverless 运行在供应商的环境中,你无法和在本地一样调试你的代码,只能依赖日志来进行判断,无法查看内存,也无法通过逐行运行代码寻找 Bug,而且由于你的应用程序被成了多个函数来执行,在调试时将会在多个函数之间进行跳转。调试过程变得更加复杂。

冷启动

跟传统架构中程序监听端口随时准备着处理请求不同,你的代码是运行在供应商创建的容器中,而且仅当条件满足时才会触发容器的生成,运行完成后则会销毁,在你的函数生命周期中,容器的生成可能会占用很大一部分的时间,所以比在本地运行会慢很多。

供应商锁定


由于 Serverless 并没有一个统一的标准所以不同运营商之间对于 Serverless 的功能和工作流程都略有不同,如果你选择了一家供应商的服务,那么你就没有办法无痛迁移到其他供应商中。换句话说就是上了贼船就不好下来了。

CPU 密集任务

由于 Serverless 是按照运行时间来计算价格的,所以相比传统架构,如果你的应用需要长时间的运行来执行业务流程,那么使用 Serverless 的价格会比传统架构下的价格更高。

总结

如果你希望减少投入发布的时间,而且需要构建一个可快速扩展或更新的应用,那么 Serverless 或许是你的最佳选择。

Serverless 并没有什么神奇之处,只是提出了一种新颖的构建应用的方式,但是这种构建方式能让你更灵活的利用资源,正如同容器和虚拟机当初所做的事情一样,或许 Serverless 能够成为云计算的终点。