JS `Cloudflare Workers` / `Deno Deploy`:边缘计算与无服务器应用

嘿!大家好!我是你们今天的边缘计算和无服务器应用导游。今天咱们聊聊 Cloudflare Workers 和 Deno Deploy 这俩神器,看看它们怎么帮我们把代码部署到离用户最近的地方,让速度飞起来!

第一站:边缘计算是个啥?

想象一下,你打开一个网站,如果服务器远在天边,数据要绕地球好几圈才能回来,这速度能快吗?肯定慢啊!边缘计算就是把计算搬到离用户更近的地方,比如离你家小区最近的服务器上。这样数据传输距离大大缩短,响应速度自然嗖嗖的。

打个比方,你点外卖,如果商家在隔壁小区,那肯定比从几条街外送来快多了,对吧?边缘计算就是这个“隔壁小区”的概念。

第二站:Cloudflare Workers – 边缘的瑞士军刀

Cloudflare Workers 是 Cloudflare 提供的边缘计算平台,它可以让你在 Cloudflare 的全球网络上运行 JavaScript、TypeScript 和 WebAssembly 代码。这意味着你的代码可以在全球几百个数据中心同时运行,离用户超级近!

Cloudflare Workers 的优势:

  • 超快速度: 代码部署在边缘,延迟低到你想不到。
  • 全球覆盖: Cloudflare 的网络遍布全球,你的应用也能全球加速。
  • 无服务器: 不需要管理服务器,专注写代码就行。
  • 按需付费: 用多少付多少,省钱!
  • 安全可靠: Cloudflare 的安全防护能力杠杠的。

来点代码!

咱们先来写一个最简单的 Cloudflare Worker,返回 "Hello, Cloudflare Workers!"。

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  return new Response('Hello, Cloudflare Workers!', {
    headers: { 'content-type': 'text/plain' },
  });
}

这段代码做了啥?

  1. addEventListener('fetch', ...):监听 fetch 事件,也就是浏览器发起请求的时候。
  2. event.respondWith(handleRequest(event.request)):告诉浏览器,用 handleRequest 函数来处理请求,并返回响应。
  3. handleRequest(request):这个函数负责生成响应,这里简单地返回了一段文字 "Hello, Cloudflare Workers!"。

部署你的第一个 Worker:

  1. 注册 Cloudflare 账号(如果还没有)。
  2. 安装 wrangler CLI 工具:npm install -g @cloudflare/wrangler
  3. 登录 Cloudflare:wrangler login
  4. 创建一个新的 Worker 项目:wrangler init my-worker (选择 "Hello World" 模板)
  5. 修改 src/index.js 文件,把上面的代码复制进去。
  6. 部署:wrangler publish

几秒钟后,你的 Worker 就部署到 Cloudflare 的边缘网络了!访问你的 Worker 的 URL,就能看到 "Hello, Cloudflare Workers!" 了。

更高级的用法:

Cloudflare Workers 还可以做更多事情,比如:

  • 路由: 根据不同的 URL 路径,执行不同的代码。
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);
  const pathname = url.pathname;

  if (pathname === '/hello') {
    return new Response('Hello from /hello!', {
      headers: { 'content-type': 'text/plain' },
    });
  } else if (pathname === '/goodbye') {
    return new Response('Goodbye from /goodbye!', {
      headers: { 'content-type': 'text/plain' },
    });
  } else {
    return new Response('Not Found', { status: 404 });
  }
}
  • 缓存: 缓存静态资源,减少服务器压力,加快访问速度。
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const cache = caches.default;
  let response = await cache.match(request);

  if (!response) {
    response = await fetch(request);
    event.waitUntil(cache.put(request, response.clone()));
  }

  return response;
}
  • 访问 Cloudflare KV 存储: Cloudflare KV 是一个全球分布的键值存储,可以用来存储配置信息、用户数据等等。
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const value = await MY_KV_NAMESPACE.get('my-key');

  if (value) {
    return new Response(`Value from KV: ${value}`, {
      headers: { 'content-type': 'text/plain' },
    });
  } else {
    return new Response('Key not found in KV', { status: 404 });
  }
}

(别忘了在 wrangler.toml 文件里配置你的 KV 命名空间!)

第三站:Deno Deploy – 现代化的边缘部署平台

Deno Deploy 是 Deno 团队推出的边缘部署平台,它基于 Deno 运行时,支持 JavaScript、TypeScript 和 WebAssembly。Deno Deploy 的目标是提供一个简单、安全、快速的部署体验。

Deno Deploy 的优势:

  • 简单易用: 部署过程非常简单,只需要一个 URL。
  • 安全可靠: Deno 本身就注重安全性,Deno Deploy 也继承了这一特性。
  • 全球分布: Deno Deploy 的服务器遍布全球,你的应用也能全球加速。
  • 免费额度: 提供慷慨的免费额度,让你轻松上手。
  • 与 Deno 生态系统无缝集成: 使用 Deno 编写的代码可以直接部署到 Deno Deploy。

来点代码!

咱们也来写一个最简单的 Deno Deploy 应用,返回 "Hello, Deno Deploy!"。

addEventListener("fetch", (event) => {
  event.respondWith(
    new Response("Hello, Deno Deploy!", {
      headers: { "content-type": "text/plain" },
    }),
  );
});

这段代码和 Cloudflare Worker 的例子很像,只不过是用 TypeScript 写的。

部署你的第一个 Deno Deploy 应用:

  1. 注册 Deno Deploy 账号(如果还没有)。
  2. 把上面的代码保存到一个文件,比如 main.ts
  3. main.ts 文件上传到一个公开的 Git 仓库(比如 GitHub)。
  4. 在 Deno Deploy 网站上创建一个新的项目,选择 "Deploy from Git"。
  5. 填写 Git 仓库的 URL,点击 "Deploy"。

几秒钟后,你的 Deno Deploy 应用就部署到边缘网络了!访问你的应用的 URL,就能看到 "Hello, Deno Deploy!" 了。

更高级的用法:

Deno Deploy 也可以做更多事情,比如:

  • 数据库集成: Deno Deploy 可以直接连接到 PostgreSQL 数据库。
import { serve } from "https://deno.land/[email protected]/http/server.ts";
import { Client } from "https://deno.land/x/[email protected]/mod.ts";

const DATABASE_URL = Deno.env.get("DATABASE_URL")!;

const client = new Client(DATABASE_URL);

await client.connect();

console.log("Connected to database");

serve(async (req) => {
  const url = new URL(req.url);
  const pathname = url.pathname;

  if (pathname === "/users") {
    const result = await client.queryObject("SELECT * FROM users");
    return new Response(JSON.stringify(result.rows), {
      headers: { "content-type": "application/json" },
    });
  } else {
    return new Response("Not Found", { status: 404 });
  }
});

(别忘了设置 DATABASE_URL 环境变量!)

  • WebSockets: Deno Deploy 支持 WebSockets,可以用来构建实时应用。
import { serve } from "https://deno.land/[email protected]/http/server.ts";

const sockets = new Set<WebSocket>();

serve((req) => {
  if (req.headers.get("upgrade") === "websocket") {
    const { socket, response } = Deno.upgradeWebSocket(req);

    sockets.add(socket);

    socket.onopen = () => console.log("socket opened");
    socket.onmessage = (event) => {
      console.log("socket message:", event.data);
      for (const s of sockets) {
        s.send(event.data);
      }
    };
    socket.onerror = (event) => console.error("socket error:", event);
    socket.onclose = () => {
      console.log("socket closed");
      sockets.delete(socket);
    };

    return response;
  }

  return new Response("Not Found", { status: 404 });
});

第四站:Cloudflare Workers vs. Deno Deploy – 选哪个?

Cloudflare Workers 和 Deno Deploy 都是强大的边缘计算平台,选择哪个取决于你的具体需求。

特性 Cloudflare Workers Deno Deploy
编程语言 JavaScript, TypeScript, WebAssembly JavaScript, TypeScript, WebAssembly
部署方式 wrangler CLI 工具 Git 仓库
数据库集成 Cloudflare KV, Durable Objects PostgreSQL (需要手动连接)
安全性 Cloudflare 的安全防护 Deno 的安全模型
生态系统 庞大, Cloudflare 提供的服务和工具链完善 逐渐完善,与 Deno 生态系统紧密集成
适用场景 API 网关,请求转发,A/B 测试,安全防护,静态资源缓存等 全栈 Web 应用,API 服务,实时应用等
学习曲线 相对陡峭,需要学习 wrangler 和 Cloudflare 的相关概念 相对平缓,如果熟悉 Git 和 Deno,上手很快
价格 按需付费,有免费额度 按需付费,有慷慨的免费额度

总结:

  • 如果你需要强大的安全防护、广泛的全球覆盖、以及完善的工具链,Cloudflare Workers 是个不错的选择。
  • 如果你喜欢简单易用的部署方式、现代化的开发体验、以及与 Deno 生态系统的无缝集成,Deno Deploy 更适合你。

第五站:边缘计算的未来

边缘计算正在快速发展,未来会有更多的应用场景涌现出来。 比如:

  • 物联网 (IoT): 边缘计算可以用来处理来自 IoT 设备的大量数据,减少延迟,提高响应速度。
  • 人工智能 (AI): 边缘计算可以用来在边缘设备上运行 AI 模型,实现智能化的本地处理。
  • 游戏: 边缘计算可以用来降低游戏延迟,提供更好的游戏体验。
  • 视频流: 边缘计算可以用来优化视频流的传输,提高视频质量。

边缘计算的未来充满想象,期待我们一起创造更多的可能性!

好了,今天的讲座就到这里。 希望大家对 Cloudflare Workers 和 Deno Deploy 有了更深入的了解。 记住,边缘计算的核心是把计算搬到离用户更近的地方,让速度飞起来! 如果大家还有什么问题,欢迎随时提问! 拜拜!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注