无服务器:赋予前端开发人员超能力的后端技术
学习网页开发很难。大多数情况下,你会从 HTML 开始,花很多时间学习所有标签。然而,你的网页看起来就像 1990 年代初期的旧作。你必须学习 CSS 才能让它变得更美观。这看起来很简单,直到你尝试按你想要的方式对齐两个元素。
最后,你开始学习 JavaScript,为新网页添加交互功能。在你还没完全掌握 JavaScript 的动态框架世界之前,你尝试做一些简单的事情,比如计算 0.1 加 0.2 的和,结果却没有得到预期的结果。如果你花了几天时间学习 JavaScript,你很可能已经发现了它的怪异之处。
然而,只要你足够坚持,你就能成功构建你的第一个 Web 应用程序。当你做到这一点时,你会感觉自己拥有了超能力。而你确实拥有超能力!
如果你像我一样,你的第一个应用可能不会是一个屡获殊荣的 Web 应用,但当你完成它的那一刻,它看起来会是有史以来最好、最复杂的应用。你应该为它感到自豪,并把它展示给你的朋友们。
你终于把你的应用展示给朋友们了,他们也为你感到高兴。然后你想把它展示给远方的好朋友。等等,你怎么把你的杰作发给你在澳大利亚的朋友 Ben 呢?
如何让你的 Web 应用可用
经过快速在线搜索后,很明显您需要一台服务器!
这很简单。你很快就能找到并租到。现在,你只需将你的应用上传到云端,就可以让你的朋友 Ben 和全世界的人都能使用。
嗯,别急。服务器不是那种放着应用就能让全球用户访问的盒子。服务器就像宠物一样,需要你投入更多的精力和知识。你的云服务器可能自带操作系统,但你还需要安装和配置一些其他库来托管你的应用。Apache、Nginx、域名、SSL,以及其他一些你几乎听不懂的奇怪术语。你需要学习所有这些知识才能向朋友本展示你的应用吗?你学了这么多,现在看来,完成一个简单的实际应用似乎还不够。
嗯,还有更好的办法吗?如果只需点击某个神奇的按钮,就能让你的应用公开发布,那岂不是很棒?
托管静态 Web 应用程序应如何工作
理想情况下,一旦你创建了一个 Web 应用,你应该能够点击某个按钮或在终端运行某个命令,让你的应用可供所有人使用。它还应该价格低廉。更好的是,如果几乎没有人使用你的应用,它应该是免费的。你为什么要每月支付 10 美元来向朋友 Ben 展示你的应用呢?这笔钱虽然不多,但足以购买一个能教你新技能的优秀视频课程。
另外,如果你的应用突然流行起来怎么办?这种情况也时有发生。服务器并不擅长应对其托管的 Web 应用的迅速流行。它们可以支持大量访问者,但到了一定程度,速度就会变得迟钝、缓慢,直至崩溃。这时,你就不得不处理一系列新的问题。
在理想情况下,您的应用应该能够通过自动扩展和缓存来处理即时流行度,而无需您的帮助。
在网上搜索几分钟后,您可以找到几种具有类似功能的服务,例如Netlify、Github Pages或Amazon Simple Storage Service (S3)。
然而,还有另一种东西具有类似的功能和一个奇怪的名称:无服务器。
无论如何,无服务器是什么?
那么,无服务器到底是什么?它是不是某种神奇的东西,让你的应用无需服务器就能运行,类似于点对点网络?还是说你需要更少的服务器?你可能看到一个帖子,有人声称无服务器会占用更多服务器,你可能会感到困惑。
为了理解无服务器,让我们回顾一下,看看我们需要做什么才能使我们的应用程序正常运行。
要拥有一个功能齐全的 Web 应用程序,您需要购买或租用服务器,并确保其具备操作系统。然后,您需要设置服务器并安装必要的工具和库,例如 Nginx 或 Apache。之后,您通常还需要一些框架等等。此时,您终于可以考虑应用程序的业务逻辑和代码了。代码准备就绪后,您需要将其部署到服务器上,使其可用。然而,这还不是全部;您需要通过监控应用程序来确保它始终正常运行。此外,您还需要不时地管理服务器(软件更新和安全补丁)和应用程序(新功能和错误修复)。
一份长长的待办事项清单,只为确保你的应用能够按预期交付。作为练习,如果你正在为非技术客户开发应用,不妨将这份清单展示给你的客户,并询问他们哪些事项对他们来说最重要。我相信,关键事项清单要短得多,其中可能包括业务逻辑、确保应用正常运行(监控)以及确保应用得到良好维护(定期添加新功能和修复错误)。
作为开发人员,您应该专注于对客户端和应用程序最终用户重要的事情。云可以帮助您处理列表中一些不太重要的元素:租用服务器和管理操作系统比以往任何时候都更容易,您不再需要关心这些。
无服务器是云计算演进的自然而然的下一步。它的理念是处理待办事项列表中其他非必要事项。有了无服务器,您无需再设置服务器,只需编写业务逻辑,平台将管理操作系统以及所有必要的库和框架。该平台还会负责操作系统、库和框架的更新和安全补丁,并为您提供一种轻松部署应用程序的方法。
无服务器架构增加了另一层抽象,帮助你专注于对客户端和最终用户至关重要的事情:业务逻辑。你仍然需要掌握监控和部署流程,但有很多工具可以为你提供支持。
如果你仍然无法接受云计算演进的下一步的名称,我理解。它并非最佳名称。你还记得,计算机科学中有两件难事,命名就是其中之一。
我发现最好的解释是 Gojko Adzic 在他的一篇优秀的无服务器文章中给出的解释:
它是无服务器的,就像WiFi是无线的一样。当然,我通过WiFi发送的电子邮件有时会通过线路,但我不需要用手机拉线。
无服务器的优势
除了托管基础设施之外,无服务器还有很多好处。它具有自动扩展、自动故障转移和每个函数隔离的功能。它易于上手,而且大多数情况下成本低廉。你会看到一些论点认为无服务器在大规模部署中成本高昂,但这些论点大多直接比较了基础设施的成本,而忽略了所有你不再需要做的事情。
在我们讨论无服务器的成本时,务必注意无服务器的核心优势在于其定价模式。为什么?因为您按使用量付费,如果没有人使用您的应用,您将无需支付任何费用。此外,大多数供应商的价格都很低,并且提供慷慨的免费套餐。例如,AWS Lambda 函数每执行一百万次收费 0.2 美元,前一百万次免费。其他服务和供应商的定价也类似。
要解释无服务器定价模型的重要性,需要的远不止几段文字。然而,该定价模型并没有赋予前端开发人员超能力,至少没有直接赋予。如果您想了解更多关于无服务器经济学的知识,可以阅读许多文章,包括以下内容:
- Aleksandar Simović 的《金融发展与无服务器微观经济学》
- 微优化:基于活动的数字服务成本核算?作者:Mark Schwartz
- 无服务器架构:颠覆性变革还是昙花一现?作者:Gojko Adzic
超级大国
这种定价模式并没有赋予前端开发人员超能力。那么,什么才是呢?
除了能够在 CSS 中浮动元素以及理解 JavaScript 中的“this”之外,对于前端开发人员来说,最完美的超能力是什么?
有很多潜在的候选人,但首选之一是一位神奇的全栈开发人员。
什么是全栈开发人员?理论上,全栈开发人员能够从零开始构建和交付应用程序。然而,正如卡尔·萨根所说:
如果你想从头开始制作苹果派,你必须首先发明宇宙。
实际上,全栈 Web 开发者通常是指了解 jQuery 或流行前端框架基础知识的后端开发者,或者能够使用 Express.js 或其他流行 Web 框架创建 Web API 的前端开发者。这令人印象深刻,但很多情况下,这些技能远非交付生产级 Web 应用所需的技能。学习前端和后端都需要时间。然而,同时具备前端和后端开发者的身份并不意味着你就是全栈开发者。如果你想创建并提供生产级 Web 应用,你还需要 DevOps 技能。
幸运的是,无服务器技术恰好能帮上忙,帮助前端开发者获得超能力。怎么做到的?故事时间到!
CodePen
如果你是一名前端开发者,你很可能听说过CodePen。如果你还没听说过,CodePen 是一个在线社区,用于展示用户创建的 HTML、CSS 和 JavaScript 代码片段。它既是一个在线代码编辑器,也是一个开源学习环境,开发者可以在其中创建代码片段,并创造性地将其命名为“pen”。
在 CodePen 中,您可以使用 TypeScript、SASS、LESS 以及许多其他流行的库和工具编写代码片段。由于您的浏览器无法直接识别大多数库,因此平台会在后台执行一些神奇的操作,将您的代码片段转换为浏览器可以理解的纯 HTML、CSS 和 JavaScript。
CodePen 很棒。然而,他们的预算有限,团队规模也有限。我们为写书采访他们的团队时,他们团队里只有一名 DevOps 人员,每月向预处理器 API 发出的请求超过 2.5 亿次。
预处理器是一种将浏览器无法理解的工具和库转换为纯 HTML、CSS 和 JavaScript 的服务。例如,将 TypeScript 转换为 JavaScript,或将 SCSS 转换为 CSS。
他们最初的架构基于两个单体式 Ruby on Rails 应用程序——一个主网站和一个专用于预处理器的应用程序——以及一个相对较小的数据库服务。在实施了最初的想法之后,他们意识到该计划存在一些重大缺陷。首先,有些项目会迅速走红,他们需要快速扩展规模,但同时要尽可能降低基础设施成本。另一个更为关键的缺陷是预处理器的隔离性,或者更确切地说,是缺乏隔离性。一些用户很有创意,设法运行了可以访问文件系统并干扰其他预处理器的 SASS 和 LESS 函数。
他们开始研究如何出于安全考虑隔离用户的代码执行。那是他们第一次听说 AWS Lambda:他们的 DevOps 工程师建议将其作为一种可能的解决方案。起初,他们的开发人员拒绝了这个想法,因为他们认为设置和配置新环境会很麻烦,觉得没什么意义。
后来有一天,他们想添加一个新的预处理器,于是决定尝试一下这个“Lambda 概念”。他们的一位前端工程师使用Claudia.js创建并部署了一个新的预处理器。从此,他们就爱上了无服务器架构。
不久之后,他们将所有预处理器迁移到了 AWS Lambda 和 Amazon API Gateway。现在,每个预处理器都位于一个 AWS Lambda 函数中,并且完全隔离。如果两个用户同时运行同一个 API,则每个请求都会调用一个 Lambda 函数,并且两个服务并行运行,但在设计上完全隔离。
CodePen 预处理器每月处理超过 2.5 亿个 API 请求,在采访时,其峰值每小时处理超过 200,000 个请求。
您需要多少名 DevOps 团队成员才能处理每月 2.5 亿个预处理器 API 请求?
如果你是 CodePen 的用户,答案是零。是的,你没听错——零。
预处理器由前端团队开发、部署和维护。他们仍然有一名 DevOps 人员负责维护应用服务器和数据库。他们每月的 AWS 费用略高于 1000 美元,这似乎有点高,但与 DevOps 工程师和包含虚拟服务器或容器的基础设施的成本相比,这仍然只是一小部分。此外,如果他们进行一些优化,费用还可以减少一半。
无服务器赋予了他们的前端团队真正的超能力。
假期追踪器
另一个很好的例子是我正在开展的一家初创公司Vacation Tracker。
Vacation Tracker 是一款休假管理系统,员工可以在 Slack 中轻松申请休假和管理休息日。使用我们的工具,您可以查看剩余休假天数,并在 Slack 中申请新的休假。您无需离开 Slack 即可收到确认信息。无需记住其他密码、学习新工具或使用其他工具管理团队。
这个想法源于一次公司黑客马拉松。之后我们创建了一个简单的无服务器原型,发布了一个落地页,然后就忘了它了。然而,很多团队注册了内测版,于是我们决定构建一个工具。
最初的团队算不上一个完整的团队,因为只有一位全职前端开发人员,之前从未接触过无服务器技术。我们的开发人员很快就学会了如何使用 Claudia API Builder、Amazon API Gateway 和 AWS Lambda 创建 API。
在最初克服学习曲线的挑战后,我们获得了不错的速度和快速的开发周期。我们的应用程序开箱即用,完全可扩展,尽管有近 500 个付费团队和许多其他组织在等待 MS Teams 测试版(该测试版将在未来几周内发布),但我们的 AWS 账单每月不到 100 美元。
我们的团队规模不断壮大,但应用程序的核心仍然由拥有超强能力的前端开发人员维护和开发。由于我们的团队学习速度很快,我们可以快速将所学知识应用到现有服务中,因为所有服务都是使用 AWS Lambda 和其他 AWS 服务独立开发的。
我们还为我们的下一个产品准备了一些可重复使用的部件。
我应该从哪里开始?
如果你喜欢这些故事,你可能想知道从哪里开始。但为了保持文章的简洁,我会把这个问题留到本系列的下一篇文章中。
文章来源:https://dev.to/aws-heroes/serverless-a-backend-thing-that-gives-superpowers-to-frontend-developers-163c