在本文中,我不会定义什么是无服务器。我什至不会扩展我们都听说过的无服务器的经济和架构优势——减少基础设施操作、事件驱动的即时规模和低成本。
相反,我想说明为什么无服务器是所有开发人员都应该关心的事情,不管他们的老板是否关心它,YET。
当然,从个人故事开始……
我从来没有做过任何“网络开发”。这里的双引号并不是为了取笑这个概念,而是表示我对它的含义一无所知。很长一段时间以来,我都不知道服务、层、Apache、IIS、ASP、JSP、JS、CSS 或其他首字母缩写词之间的区别。作为一名软件开发人员,我为 Windows 编写了构建桌面应用程序的 C++ 代码,或者为 Linux 编写了构建服务器管理应用程序的 C 代码。我一直认为这是酷孩子应该做的,所有的“网络东西”都是为小程序员准备的。
我越远离网络,它对我来说就越神秘。诸如 REST、JSON、WebAPI 等之类的东西,每一篇互联网文章都会出现。构建移动应用程序的人正在谈论为他们的应用程序构建“Web 服务后端”,这让我感到困惑。镇上的下一个最热门的东西——“云”——几乎从“网络东西”中借用了它的所有特征,这并没有帮助。如果您想在“云”中构建应用程序,您要么必须非常了解“网络内容”,要么必须深入了解虚拟机、容器和其他与虚拟化相关的技术。我已经避开他们两个足够长的时间,以至于他们在我的脑海中获得了某种光环,直到我找到了一份我被迫学习所有这些的工作。非常感谢!
但这与无服务器有什么关系?
很多。
我敢肯定,尽管“Web 开发”大受欢迎,但全世界仍有一大群开发人员为台式机、服务器、嵌入式设备、移动设备等开发软件,但从不处理“Web”方面的问题(很像我) )。毫无疑问,他们中的许多人都对“云”及其对他们意味着什么感到焦虑——无论是关于拥有未来的就业技能,还是弄清楚如何将他们现有的应用程序连接/转换到云(已经看过公司的备忘录)已经有这种效果了)。
这些开发人员可以从这样一个事实中振作起来:让应用程序在“云”中运行所需要做的只是编写他们的业务逻辑。在无服务器之前,他们的过渡可能意味着学习许多本质上都是逻辑性的技术,主要是做无差别的繁重工作。有了无服务器,他们的编程技能就是他们所需要的。哪个程序员不喜欢只专注于编程的前景?
在桌面世界中,构建小型控制台应用程序或命令行实用程序来测试理论或想法是日常工作。然而,在“云”中,有时围绕尝试对一个非常基本的想法进行原型制作的伴随过程充满了几个摩擦点——配置、设置、SDK、集成等等。无服务器通过在幕后处理大部分过程,显着减轻了开发人员的痛苦。简单的原型设计、快速的实验、从错误中学习和基于经验教训,是现代软件开发的关键原则。无服务器的一个被低估的质量是它提供的能力。
在我职业生涯的早期,我之前提到的酷孩子综合症(让我远离“网络东西”的那个)也让我远离 Visual Studio 太久了。我坚持在 Linux 上使用 vim 和 gdb,即使我处理的所有代码都是跨平台的 C/C++ 代码,这些代码可以在 Windows 上的 Visual Studio 中轻松处理。所有这一切,只是因为 diss 任何非命令行的东西很酷。我不想就这个话题展开辩论,但我只想说,至少我觉得这样做浪费了无数小时的生产力。
我在这里要强调的更重要的一点是,即使在云中,竞争技术也可以让你做类似的事情。在多种情况下,VM、容器或无服务器将提供类似的输出。然而,无服务器可能是唯一一种通过提供专注于开发人员货币的体验来优化开发人员生产力的技术——不是虚拟机、容器、编排器或实例,而是代码。高效处理代码(甚至是用于云的代码)的问题已由 Visual Studio 等世界级 IDE 解决。
无服务器是灵丹妙药吗?不,它有问题吗?当然。我们都听说过冷启动、缺乏状态、持续时间限制、内存等。这些是破坏交易的吗?在大多数情况下,不会。生产力的好处已经超过了这些问题。这些问题是不可克服的吗?一点也不。云供应商已经在这项技术中看到了足够的优点和承诺,从而有足够的动力尽快解决这些问题。
总之,无服务器提供了一个很棒的工具,所有开发人员都需要在他们的工具箱中拥有它。