利用CF或Vercel部署应用

之前用过CloudFlare(以下简称CF)的一些服务,但是对于它具体一些应用还不太清楚.简单来说,它是一些云巨头的强力竞争者.专注于云与边缘计算.

之前我想部署一些API服务时,要么用VPS、服务器,在服务器上部署应用.

要么使用Vercel,Vercel也提供一些应用的运行时,但是serverless,有一定限制.

还可以使用render,heroku(Heroku已停止免费提供服务)或者Netlify.此外也推荐Deploy app servers close to your users · Fly,这些服务都类似,可以提供数据库等比较集成的功能,看你喜欢哪个.

CF的workers更类似Vercel的serverless函数但更强大也更快(理论上).这里我先使用Hono.js与其搭配更方便地部署一些简单的应用.

Hono.js

1
2
3
4
5
6
import { Hono } from 'hono'
const app = new Hono()

app.get('/', (c) => c.text('Hono!'))

export default app

Hono—是为了边缘计算的一个小巧、简单、超快的网络框架。它适用于任何 JavaScript 运行时:Cloudflare Workers、Fastly Compute、Deno、Bun、VercelAWS Lambda、Lambda@Edge 和 Node.js

可以看到它比较现代,还适合Deno和Bun.也能与Vercel与CF搭配。

本身语法跟express类似,没有太大的学习压力.

Cloudflare Workers

Cloudflare Workers 提供serverless开放式外部链接执行环境,使您能够创建新应用程序或增强现有应用程序,而无需配置或维护基础设施。

使用Wrangler作为命令行创建部署项目

1
npm install wrangler --save-dev

Cloudflare Workers 在 Cloudflare 的全球网络上运行,外部链接遍布全球数百个城市,提供免费和付费计划。

有一篇文章将CF workers与Vercel的serverless function做了比较Vercel Serverless Functions vs Cloudflare Workers | Moiva.io Blog

Vercel 本质上是一种将静态网站自动部署到全球数据中心网络的解决方案。Vercel 不仅如此,它还为Serverless Functions提供了一个解决方案,该解决方案运行得非常出色和流畅。

Cloudflare Workers 基本上是一个将无服务器功能部署到全球数据中心网络的平台。他们的文档说,Workers 也可用于部署静态应用程序,但我还没有研究或评估过。我知道 Cloudflare 还在开发另一种部署/托管静态应用程序的解决方案—Cloudflare Pages。

作者认为CF workers在serverless功能上比Vercel更强大,并且也有CF pages作为部署静态网站的服务.

免费plan中允许每天100k请求,我测试了一下国内也能访问.

image-20240426171159806

创建worker或者pages都可以,我拿例子创建了一个worker-ancient-voice-b446.13227671027806.workers.dev,适合拿来写点简单API.数据库这种需要搭配一些第三方云服务比如supabase,目前还是Beta阶段,此外也可以使用KV存储.

image-20240426171829887

相比来说Vercel有自带的Pgsql,另外还有一堆付费的AI功能,比如文生图等.

CloudFlare相比Vercel部署优点貌似就是边缘节点多,访问可能要好一点. 但在使用上其实生态两者差别不大,甚至Vercel要好一些.这种serverless的部署方式(因为部署时的文件路径有要求). 不过我看到

image-20240426173140993

目前看我我最不爽的一点就是本地开发完之后又要改一些配置或者改一些数据库啥的然后上线继续测试.不过以后可以考虑使用CF而不是Vercel部署试试了.

Vercel Function

Vercel的文档看起来要舒服一些.支持serverless和Edge

Vercel 功能的基础结构和能力由您选择的运行时决定:

Node.js 运行时(serverless):让您可以访问所有 Node.js 应用程序接口,这是您在网络上编写程序所期望的,同时还能配置机器资源和依赖关系。
边缘运行时(Edge):当您需要在用户附近执行轻量级 JavaScript 函数时,可选择这种经济高效的方法

官网展示了使用Next的例子,运行时可以选择Edge或者Node.js.

1
2
3
4
5
export const dynamic = "force-dynamic";
export const runtime = 'nodejs';
export function GET(request: Request) {
return new Response(`Hello from ${process.env.VERCEL_REGION}`);
}

此外还支持Go,Python,Ruby的运行时,不过都在Beta,

Functions using the Edge Runtime, are ideal for a cost-effective option that use a limited set of Web Standard APIs that make sense on the server. The Edge runtime is built on top of the V8 engine, allowing it to run in isolated execution environments that don’t require a container or virtual machine.

Functions using the Edge runtime execute in the data center is closest to the user, or in a region near your databases. This can result in a much lower latency and allows you to provide personalization at speed.

使用Hono如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { Hono } from 'hono'
import { handle } from '@hono/node-server/vercel'
import type { PageConfig } from 'next'

export const config: PageConfig = {
api: {
bodyParser: false,
},
}

const app = new Hono().basePath('/api')

app.get('/hello', (c) => {
return c.json({
message: 'Hello from Hono!',
})
})

export default handle(app)

当然Hono也可以用于其他很多地方,这里只是列举其优点.

资料

  1. (4) Learn Cloudflare Workers - Full Course for Beginners - YouTube
  2. honojs/hono: Web Framework built on Web Standards (github.com)
  3. Cloudflare Workers®
-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道