1 分钟在 Serverless 上部署现代化 Deno Web 应用

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 利用 Serverless 的水平扩展与按量付费优势, 结合自定义运行时, 实现 Web 应用的快速迁移。而 Deno 运行时是新一代的 JS 运行时, 使用阿里云 Serverless + Deno 的组合, 我们可以快速开发现代化 Web 应用。

作者:连喆人


本文选自 “Serverless 函数计算征集令" 征文


利用 Serverless 的水平扩展与按量付费优势, 结合自定义运行时, 实现 Web 应用的快速迁移。而 Deno 运行时是新一代的 JS 运行时, 使用阿里云 Serverless + Deno 的组合, 我们可以快速开发现代化 Web 应用。


Deno 配合 Serverless Devs 工具, 可以快速实现代码部署工作。至此, 阿里云函数计算 + Serverless Devs + Deno + TypeScript 的组合实现了软件的快速开发, 快速迭代, 快速部署, 快速伸缩,利用云端优势, 快速解决业务问题。


为什么是 Serverless


在 Web 开发领域, Serverless 相比传统方式, 最大的优势在于:可以在低运维前提下实现水平扩展。这样开发者能够将主要精力放在业务上, 而不是为了支持可能的高并发而过多关注繁杂的技术细节, 因为专注于业务,大大提升了开发效率, 降低了开发成本。


同时弹性的水平扩展可以支持任何访问频次的业务需求, 无需担心成本收益不符问题。从日 1 PV 到日 1,000,000 PV 的应用都可以支持, 无需进行额外配置, 不需要自己做集群管理, 也无需承担固定的费用, 按使用量付费即可。


我们可以把 Serverless 理解为无需自己管理的按需扩缩的容器集群,在 Web 应用的开发上, 无论从技术角度, 还是成本角度, Serverless 都更有优势。


那么,如何实现传统 Web 应用到 Serverless 的迁移呢?


理论上, 任何编程语言语言都可以在 Serverless 上进行使用。不过在具体实现上, Serverless 提供了如下几种方法:


1. 直接运行脚本语言(Serverless 容器已经携带目标语言运行时, 仅上传代码即可)


2. 运行时 + 语言脚本(全部上传到 Serverless)


3. 可执行文件(在本地编译为可执行文件, 然后上传到 Serverless)


4. 自定义容器(目前阿里云 Serverless 支持 Docker 镜像以生成容器)


以上几种方法, 在阿里云 Serverless 上均支持。对比以上几种方法的优缺点:


  • 直接运行脚本语言是冷启动时间 (即代码执行前 Serverless 容器准备的时间) 最短的;


  • 自定义容器是兼容性最好的,而我们此处用到的是一个平衡做法: 自定义运行时。 


之所以选择自定义运行时, 是因为我们采用的运行时是 Deno, 一款现代化 JS/TS 运行时。一方面, 虽然 JS 是脚本语言, 但阿里云目前还不支持 Deno 运行时, 所以无法通过直接运行脚本语言的方式在 Serverless 上运行应用。


另一方面, Deno 提供类似 Go 语言的打包为可执行文件功能,无需使用容器即可实现代码的跨平台运行。


为什么是 Deno


Deno, 是一款 JS/TS 运行时, 与 Node.js 一样使用 V8 作为 JS 解释器, 保证了速度,与 Node.js 不同的是使用 Rust 而非 C++ 作为开发语言, 与操作系统进行沟通。(二者相同的另一点是发起人和最初的主要开发者均为 Ry, Ryan Dahl)


Node.js 作为后端 JS 运行时, 无疑是影响巨大且成功的。但 Node.js 诞生在多年前,随着 ECMAScript 的发展, JavaScript(JS) 已经今非昔比, 而为了保证生态兼容性, Node.js 又难以进行大刀阔斧的改革, 这就是 Deno 诞生的大背景。


对于开发者而言, Deno 除了更好的 ECMAScript 兼容性, 还提供开箱即用的 TypeScript (TS) 支持, 提供更健壮类型约束的同时,大大降低了开发环境配置等不必要的消耗。


目前, 随着 Deno 版本的不断迭代, 在 Web 开发场景下, Deno 已经可以实现大部分 Node.js 可以实现的功能。使用 Deno 作为运行时对 JS 开发者来说可以快速上手, 不会有过大负担。相比 Node.js, Deno 的最大优势有两个:


1. 支持 Web API(比如 fetch, crypto 等)。


2. 支持文件引用, 而不需要使用 npm 这样的包管理器。


支持 Web API 可以打通前后端技术栈, 而 npm 苦开发者久矣。


简单的 Deno Web 应用案例


使用 Deno 开发 Web 应用非常简单, 下面我们来快速创建一个简单的 Web 应用实现 UA 显示。


import { serve } from "https://deno.land/std@0.148.0/http/server.ts";
function handler(req: Request): Response {
  return new Response(
    ["Hello, World!", req.method, req.url, req.headers.get("user-agent")].join(
      "\n"
    )
  );
}
serve(handler, { port: 9000 });

现在我们将以上代码保存在 /User/zsqk/web/main.ts 地址中。

创建 Serverless 函数


有了代码,我们还需要部署地址。这里我们以阿里云函数计算 FC 为例,首先是创建自定义运行时函数:

1. 进入阿里云函数计算 Web 控制台


2. 点击左侧导航栏 "服务与函数"


3. 点击 "创建服务" 进行服务的创建


4. 点击 "服务名称" 进入服务界面


5. 点击 "创建函数"


6. 在创建函数时, 选择 "使用自定义运行时平滑迁移 Web Server", 然后进行函数创建


然后需要绑定域名:


1. 回到函数计算首页后, 点击左侧导航栏 "域名管理"


2. 点击 "添加自定义域名"


3. 在添加自定义域名时, 选择刚才我们创建的服务及函数


此时我们就完成所有基础配置, 拿到了需要的参数:


1. 服务名


2. 函数名


3. 访问域名


在 Serverless 上一键部署 Deno Web 应用


在 Serverless 上部署 Deno Web 应用是很方便的,我们可以实现一键部署,利用阿里云 Serverless 的自定义运行时,在本地构建出一个可执行文件,然后通过 Serverless Devs 工具将代码部署到函数计算,在 Serverless 上执行即可。


这里我们假定已经在本地环境安装好了 Deno 与 s 工具,现在创建如下配置文件并放到 /User/zsqk/web/s.yaml 中。


edition: 1.0.0
name: zsqk-fc
access: default
services:
  fc-z1-deno:
    component: devsapp/fc
    props:
      region: ${地区}
      service:
        name: ${服务名}
      function:
        name: ${函数名}
        instanceConcurrency: 5
        instanceType: e1
        memorySize: 128
        runtime: custom
        timeout: 3
        codeUri: "./dist"


代码和部署配置文件都已经准备好, 下面只需要构建并上传代码即可。首先进入 /User/zsqk/web/ 目录中, 使用以下为使用 Deno 运行构建及上传命令的例子:


// 构建 deno 文件
const r = Deno.run({
  cmd: [
    `deno`,
    "compile",
    "--output",
    "dist/bin/zsqk",
    "--target",
    "x86_64-unknown-linux-gnu",
    "--allow-all",
    "/User/zsqk/web/main.ts",
  ],
});
await r.status();
r.close();
Deno.writeTextFileSync(
  `/User/zsqk/web/dist/bootstrap`,
  "#!/bin/bash\n./bin/zsqk --allow-all"
);


// 准备上传
const r = Deno.run({
  cmd: ["s", "deploy", "function", "--use-local"],
});
await r.status();
r.close();


当以上命令执行成功,我们就完成了一键部署 Deno Web 应用到 Aliyun Serverless 的全部流程。接写来我们可以使用上文配置的访问域名来查看我们的 UA Web 是否正常工作。


至此, 我们就完成了整个工作,之后如果每次需要应用代码变动,只需要重新执行构建及部署命令即可。


阅读原文: https://developer.aliyun.com/article/986503
相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
8天前
|
人工智能 Serverless API
尽享红利,Serverless构建企业AI应用方案与实践
本次课程由阿里云云原生架构师计缘分享,主题为“尽享红利,Serverless构建企业AI应用方案与实践”。课程分为四个部分:1) Serverless技术价值,介绍其发展趋势及优势;2) Serverless函数计算与AI的结合,探讨两者融合的应用场景;3) Serverless函数计算AIGC应用方案,展示具体的技术实现和客户案例;4) 业务初期如何降低使用门槛,提供新用户权益和免费资源。通过这些内容,帮助企业和开发者快速构建高效、低成本的AI应用。
50 12
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
2月前
|
存储 消息中间件 人工智能
ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用
本文整理自2024年云栖大会阿里云智能集团高级技术专家金吉祥的演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》。
154 12
|
1月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
99 1
|
1月前
|
运维 监控 Serverless
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
39 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
64 3
|
2月前
|
运维 Serverless 数据处理
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
Serverless架构在图像处理等计算密集型应用中展现出显著优势,包括加速研发交付、降低成本、零运维成本、高效资源利用、自动扩展、实时数据处理及快速原型开发,为高并发、动态需求场景提供高效解决方案。
67 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构在图像处理等计算密集型应用中展现出显著优势
【10月更文挑战第6天】Serverless架构在图像处理等计算密集型应用中展现出显著优势,包括加速研发交付、成本效益、零运维成本、高效资源利用、自动扩展能力、实时数据处理及快速原型开发,为高并发、动态需求场景提供高效、灵活的解决方案。
52 4
|
2月前
|
机器学习/深度学习 机器人 Serverless
【10月更文挑战第1天】FaaS 的应用场景
【10月更文挑战第1天】FaaS 的应用场景
|
3月前
|
人工智能 运维 Serverless
Serverless + AI 让应用开发更简单,加速应用智能化
2024 云栖大会开幕,在大会第一天,阿里云正式发布全新产品——云应用开发平台 CAP。CAP 拥有丰富的场景化应用模板,可以极速体验,并且具备更低的成本优势以及灵活组装等特点,成为广大开发者与企业必备的一站式应用开发平台,让应用开发更简单。
206 12

相关产品

  • 函数计算