草庐IT

聊聊与前端工程师天然互补的 Serverless

Serverless社区 2023-03-28 原文


作者:灵轮_(阿里云前端技术专家)_

作为前端工程师,我们的使命是为用户提供良好的前端用户体验。随着云原生时代的到来,显而易见的,我们能做的更多了。Serverless 产品的特点是免运维、按量付费和自适应弹性,所以我们可以利用云上的各种 Serverless 能力,用相对更低的成本开发出更酷的产品,为我们的客户创造更多价值。

如何构建云原生现代化的 Web 应用?

让我们先回顾一下,我们是如何把一个静态网站发布出去的。

在云原生时代之前,我们想到的可能是需要先找一台服务器,安装 Nginx,然后上传静态文件,再经过一系列的配置,最终完成网站的发布。完成这些以后,发现已经花掉了小半天的时间,实际上这些花在运维上面的时间其实并没有为我们的客户创造价值。但这其实还只是一个开始,随着业务的发展,稳定性、弹性、安全和成本等问题,我们都要逐一解决,我们花在运维上的时间和精力会越来越多。否则,这个网站可能只是一个玩具。
但是随着云原生时代的到来,发布静态网站简单了很多,我们可以通过云产品,轻松地托管我们的网站。例如,可以将网站通过阿里云对象存储 OSS 提供的工具,将静态资源上传到 OSS,然后开启一键托管。此外,为了让客户能够更快地打开页面,还可以通过阿里云 CDN,将 OSS 设置为 CDN 的源站,从而让静态资源离客户更近,让客户的使用体验更好。这两款产品都是按量付费的免运维 Serverless 产品,它们大大地减少了我们各种繁杂的运维成本。我们可以把更多的时间花在研发和体验上,为我们的客户创造更多价值。

但是随着业务的发展,我们的网站如果并不只是一个静态网站了呢?

  • 对外服务的 API(需要对接缓存,数据库,消息队列,文件存储等)
  • 定时执行任务,甚至是执行海量任务
  • 发送电子邮件/短信/即时消息(钉钉,微信,飞书),拨打智能语音电话
  • 对用户上传的图片,音视频等进行处理(转码,缩略图,鉴黄,加水印,GPU 推理)
  • 服务端渲染 SSR 页面
  • 大促,秒杀
  • 采集用户在网站上的行为,分析如何提高用户的转化率

面对这些需求,难道我们又要去找服务器?为了保证服务的稳定性,弹性,安全和成本,难道我们又要把大量的时间花在运维上?有没有云产品可以像 OSS/CDN 解决静态网站的运维问题一样,解决我们的这些后端需求呢?

面对这些挑战,阿里云的 Serverless 产品**函数计算 FC **是一个不错的选择。除了通过函数计算 FC 处理 API 请求和大规模任务之外,还可以在函数计算 FC 中访问阿里云的 RDS、SLS、Tablestore、NAS 等丰富的云服务或者是其他第三方服务,从而满足对存储,计算,网络,安全,大数据,人工智能等各种业务的需求。

各种 Serverless 云产品就像是前端工程师的“武器库”,我们可以使用这些云产品来为我们的客户提供高质量的服务。

函数计算 FC 的优势和相关原理介绍

极致弹性,轻松应对流量洪峰

函数计算 FC 会根据请求量自动进行毫秒级弹性扩容,快速调度计算资源。从而使我们可以轻松应对海量 API 请求和大规模的并发任务。

在使用函数计算时,可以为函数配置一个“实例并发度”,这个并发度代表一个函数实例最多可以同时处理多少个请求。函数实例本质上是一个 Linux 安全容器,它是函数对外提供服务的最小单元。

例如,在“实例并发度”设置为 20 时,如果函数计算平台同时收到了 100 个请求,则会拉起 5 个函数实例来处理这些请求。处理完这些请求后函数实例会被冻结,如果在接下来的 2~5 分钟内(实例冻结以后就不再计费了)如果没有新的请求,函数实例将被自动销毁。在某些场景下,如果业务对延迟非常敏感,或者业务代码启动很慢,可以通过配置弹性规则,设置最小函数实例数量,这样函数计算 FC 会预先启动好函数实例,从而保证用户的使用体验。也可以通过设置函数实例的最大数量,限制函数实例的最大数量,从而保护下游服务,并控制成本。

对比传统服务器模式下需要自己进行服务器的扩容缩容的操作,函数计算 FC 这种自动弹性的方式不仅可以减少此类繁锁的扩缩容运维操作,也可以避免传统服务器模式下由于扩容不及时导致的业务不可用,从而提高系统的稳定性。

降低成本,提高资源利用率

函数计算 FC 中可以自由配置 CPU,内存,GPU 等实例的规格。最小可以创建 0.05 核,128 MB 的函数,并提供了极小梯度的规格选择,基本可以做到应用需要什么规格就配置什么规格。

函数计算 FC 的计费是毫秒级别的,比如我们的代码业务逻辑执行的时间为 5 毫秒,那么我们只需为这 5 毫秒进行付费。并且在无流量时,函数计算 FC 会将函数实例缩容到 0。这对业务量还没有起来的新业务,或者是一些调用本身就很少的中长尾业务非常友好,我们无需为它们付出固定的服务器费用。

自由配置规格,毫秒级别计费,缩容到 0 等特点可以帮助我们大幅提升资源利用率,极大的降低成本。

免运维,更安全

在传统的服务器架构中,我们时刻需要关心运行应用的物理机的资源使用情况。在函数计算 FC 中,我们无需关心底层物理机的资源使用情况,函数计算 FC 平台会自动调度并运维资源。但是如果是我们的业务代码消耗了过度的资源,例如发生OOM 等,函数实例会自动重启,请求会失败,这时我们需要根据监控指标和日志找出代码中的问题,或者修改函数的规格,给函数实例更多的资源。

函数计算 FC 也提供了函数默认的 HTTP/HTTPS 域名,从而方便我们访问函数。同时也支持绑定自己的域名到函数。所以相对于传统的服务器架构,在使用函数计算时,我们就免去了对应用服务器和负载均衡服务器的运维和购买成本。

从安全的角度出发,由于传统服务器需要一直运行着,在安全配置不合理时,或是没有及时修复代码漏洞时,黑客可以通过扫描 IP 和端口,发现并攻入服务器。函数计算FC因为不会一直起着实例,也不会直接将 IP 暴露在公网上,因此可以避免此类被扫描攻破的问题发生。

除此之外,操作系统的安全漏洞我们也无需关心,在出现安全漏洞时函数计算 FC 会第一时间完成修复。

在需要访问其他服务时,函数计算 FC 也会根据配置,自动生成临时密钥,这个临时密钥的有效期是 36 小时,所以无需将重要的访问密钥写在代码里或配置文件中,从而降低由于密钥泄漏产生的风险。

随着业务的不断发展,也可以额外购买阿里云的 Web 应用防火墙 WAF 产品来保护函数安全。

零改造,研发效率高

函数计算支持创建 3 种类型的函数,“内置运行时”,“自定义运行时”和“容器镜像”。并且提供了 API,SDK,控制台和 Serverless Devs 工具,帮助我们完成应用的开发、构建、部署和观测。

在使用“内置运行时”时,我们需要按照函数计算 FC 定义的接口规则编写代码处理请求。例如,下面为一个 Node.js 的 API 示例,使用这几行代码创建完函数之后,我们就可以立刻在我们的网站中使用这个 API 了。

使用“自定义运行时”时,我们无需改造代码就可以将 SpringBoot、Flask、Express、NextJS、NestJS、Gin 等 Web 框架开发的应用跑在函数计算上。只需在函数计算中配置应用监听的“端口号”和“启动命令”即可。它和使用传统服务器的部署方式非常类似。下图中的代码,对熟悉 Express 框架的同学来说,应该是再熟悉不过了。

使用“容器镜像”时,我们可以完全定制应用的执行环境,不用学习如何更新函数计算运行环境中的 Linux 版本,GCC 版本,安装各种依赖,字体等问题。此外,因为容器镜像的可移植性极好,我们不用担心被云厂商绑定,同一个容器可以运行在云上或本地数据中心的服务器上,或者是云上或本地数据中心的 Kubernetes 集群里。甚至您可以同时将一个镜像部署在服务器、Kubernetes 集群和函数计算里,通过几款不同的产品完成灾备。

总结

通过函数计算 FC 等 Serverless 云产品,我们无需管理服务器等基础设施,Serverless 云产品会为我们准备好资源,以弹性、安全、可靠的方式运行我们的应用,存储我们的数据,并为我们提供其他额外的附加价值。

Serverless 的免运维特性与前端工程师天然互补,前端工程师只需编写业务代码,即可快速搭建云原生的现代化的 Web 应用。让前端工程师可以将更多的时间专注在为用户创造价值上。

更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。

有关聊聊与前端工程师天然互补的 Serverless的更多相关文章

  1. ruby-on-rails - 在 Rails 应用程序的前端获取实时日志 - 2

    在Rails3.x应用程序中,我正在使用net::ssh并向远程pc运行一些命令。我想向用户的浏览器显示实时日志。比如,如果两个命令在net中运行::ssh执行即echo"Hello",echo"Bye"被传递然后"Hello"应该在执行后立即显示在浏览器中。这是代码我在ruby​​onrails应用程序中使用ssh连接和运行命令Net::SSH.start(@servers['local'],@machine_name,:password=>@machine_pwd,:timeout=>30)do|ssh|ssh.open_channeldo|channel|channel.requ

  2. ruby - 如何在转换器插件中访问页面属性(YAML 前端) - 2

    我正在为Jekyll编写一个转换器插件,需要访问一些页眉(YAML前端)属性。只有内容被传递给主要的转换器方法,似乎无法访问上下文。例子:moduleJekyllclassUpcaseConverter关于如何在转换器插件中访问页眉数据有什么想法吗? 最佳答案 基于Jekyll源代码,无法在转换器中检索YAML前端内容。根据您的情况,我看到了两种可行的解决方案。您的文件扩展名可以具有足够的描述性,以提供您本应包含在前言中的信息。看起来Converter插件的设计就是这么基本的。如果修改Jekyll是一个选项,您可以更改Convert

  3. 华为认证的网络工程师证好考吗,含金量高吗 ? - 2

    华为认证分等级的,相当于初中高三个等级,当然高级是比较难考的,也是含金量最高的。我就慢慢给你介绍一下。1.了解华为认证华为认证网络工程师是由华为公司认证与采购部推出的独立认证体系,与之前的华为认证不同,简称HCIA。同时华为认证是华为技术有限公司凭借多年信息通信技术人才培养经验,以及对行业发展的理解,以层次化的职业技术认证为指引,推出的覆盖IP、IT、CT以及ICT融合技术领域的认证体系,是ICT全技术领域认证体系。​2.怎么考取华为认证网络工程师?要考取华为认证网络工程师必须选择最近的Prometric授权考试中心APTC报名并参加GB0-190的考试,考试通过后,以获得由华为统一签发的“华

  4. 打通源码,高效定位代码问题|云效工程师指北 - 2

    大家好,我叫胡飞虎,花名虎仔,目前负责云效旗下产品Codeup代码托管的设计与开发。代码作为企业最核心的数据资产,除了被构建、部署之外还有更大的价值。为了帮助企业和团队挖掘更多源代码价值以赋能日常代码研发、运维等工作,云效代码团队在大数据和智能化方向进行了一系列的探索和实践(例如代码搜索与推荐),本文主要介绍我们如何通过直接打通源代码来提高研发与运维效率。随着微服务架构的流行,一个业务流程需要多个微服务共同完成。一旦出现问题,运维人员在面对数量多、调用链路复杂的情况下,很难快速锁定导致问题发生的罪魁祸首:代码。为了提高排查效率,目前常见的解决方案是:链路跟踪+日志分析工具相结合。即通过链路跟踪

  5. 前端实现文件上传(点击+拖拽) - 2

    一、简介之前在Vue项目中使用过element的上传组件,实现了点击上传+拖拽上传的两种上传功能。然后我就在想是否可以通过原生的html+js来实现文件的点击上传和拖拽上传,说干就干。首先是点击获取上传文件自然没的说,只需要借助input标签即可,但原生的点击上传按钮,实在是过于简陋,所以我的想法是通过一个div,模拟成上传按钮,然后监听其点击事件,通过input.click()去模拟点击真正的上传元素。然后是拖拽获取上传文件,这个稍有难度,我的想法是通过HTML5新增的drag拖放API+dataTransfer来实现文件的拖拽获取,但是由于是html5新增的,所以可能在某些低版本IE浏览器

  6. 【思考】聊聊低代码的实践之路 - 2

    文章目录背景一、最初的疑惑二、简单聊聊原理三、组织内实践案例四、实践带来的反思五、最后聊几句问题背景这个概念由来已久,但是在国内兴起,是最近几年;低代码即Low-Code;指提供可视化开发环境,可以用来创建和管理软件应用;简单的说就是可以通过各种组件的拖拽,实现页面的创建,交互流程和逻辑,以及数据层面的管理,更加高效的实现需求;早先在数据公司时;见识过低代码的应用,也参与过部分研发,比如元数据平台,BI分析等;不过,当时还是以数据管理的工具来定义项目,并非是低代码;从「2020年底」开始;实际上,那个时间节点,低代码平台的应用已经形成趋势了;现在的公司,将低代码平台的使用规划到业务体系中;后来

  7. 软件工程毕业设计课题(81)微信小程序毕业设计PHP校园跑腿小程序系统设计与实现 - 2

        项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统,前台用户使用小程序发布跑腿任何和接跑腿任务,后台管理使用基于PHP+MySql的B/S架构;通过后台管理跑腿的用户、查看跑腿信息和对应订单。意义:手机网络时代,大学生通过手机网购日常用品、外卖外卖、代取快递等已不再是稀奇的事情。此外,不少高校还流行着校园有偿工作,校园跑腿就成了大学生创业服务项目。        因为你在校园里,所以不会有进入的限制。并不是所有的外卖平台都可以随意进入校园,比如小黄和小蓝的双打外卖平台。许多大学禁止送餐进入学校,更不用说送餐进入宿舍了。这一措施使得校园服务市场的竞争相对不

  8. 教你如何使用vercel服务免费部署前端项目和serverless api - 2

    一、介绍一下vercelvercel是一个站点托管平台,提供CDN加速,同类的平台有Netlify和GithubPages,相比之下,vercel国内的访问速度更快,并且提供Production环境和development环境,对于项目开发非常的有用的,并且支持持续集成,一次push或者一次PR会自动化构建发布,发布在development环境,都会生成不一样的链接可供预览。但是vercel只是针对个人用户免费,teams是收费的首先vercel零配置部署,第二访问速度比github-page好很多,并且构建很快,还是免费使用的,对于部署个人前端项目路、接口服务非常方便vercel类似于git

  9. ruby-on-rails - rspec 和 shoulda - 互补还是替代? - 2

    我已经使用了一段时间的shoulda,并且阅读并使用了rspec。我没有做过深入的比较和对比。但在我看来,两者之间有一些重叠,但它们不是1-1的替代品。我正在考虑使用rspec在我的rails系统中编写一些单元测试,而不替换所有使用shoulda编写的现有测试。只是作为一种获得感觉的方式。这是个好主意吗?我可以逐渐从一个转移到另一个还是自找麻烦?我应该考虑其中一个比另一个明显的优势吗?谢谢! 最佳答案 我不得不反对Chris的回答,即它们是替代方案。我在我的Rails应用程序中同时使用Shoulda和Rspec,它们相互补充得很好。

  10. ruby - 从我的胰岛素泵 Controller 逆向工程统计数据文件 - 2

    这可能是也可能不是灰色地带主题,尽管我的意图肯定不是,所以我的意图不是激起关于逆向工程主题的道德辩论。我是1型糖尿病患者,目前正在接受泵治疗。我是OmniPod用户,这是一个一次性胶囊,可以粘在我的身上并分配胰岛素3天。它由个人糖尿病管理器[PDM](见下文)控制,该管理器控制进餐期间分配的胰岛素量、血糖读数,并且包含一个用于计算碳水化合物的食物指数。(来源:myomnipod.com)新的PDM有一个用于下载数据的USB端口。该软件对Windows用户免费(名为CoPilot的软件包),但不支持Mac。将PDM插入我的Mac后,它像任何其他USB设备一样安装,并为我提供了一个可读卷,

随机推荐