Subscribe to receive notifications of new posts:

具有 Cloudflare Snippets 的最高可编程性 Supercloud

11/17/2022

11 min read
The most programmable Supercloud with Cloudflare Snippets

您的流量,您感觉如何

Cloudflare 的客户群高度多元化。我们提供简单易用的产品,用于执行各种任务,从设置 HTTP 标头到重写 URI 路径和执行 URL 重定向。有时,客户需要的不仅仅是开箱即用的功能,不仅仅是添加一个 HTTP 标头,而是执行一些高级计算来创建输出。如今,他们可能需要创建一个功能请求,然后等待推出该功能;编写一个 Cloudflare Worker;或在他们自己的基础设施(即源站)上保留这些修改。

为了简化这一过程,我们兴奋地宣布推出 Cloudflare Snippets。Snippets 是一种执行流量修改的新方法,适用于用户无法通过我们的产品化服务执行流量修改,或希望以编程方式进行修改的情况。最重要的是什么?绝大多数客户在使用 Snippets 时无需支付任何额外费用

用户现在有了选择。通过一个规则执行行动。或者,如果需要更多的功能,写一个Snippet。两者都不意味着等待。两者都不会产生额外费用(尽管将适用高额的公平使用上限)。Snippets 为用户解除了障碍,让他们在想做的时候做他们想做的事。都在 Cloudflare 上。

Snippets 将支持导入用各种语言编写的代码,如 JavaScript(现代)、VCL(传统)和 Apache .htaccess。文件(遗留)。这使客户能够将传统的操作代码迁移到我们的平台上--同时也巩固了他们的JavaScript操作。

如果你对测试感兴趣,请使用报名表加入 Snippets 的等待名单。我们希望在 2023 年初开始接纳用户进入封闭测试。

为什么构建 Snippets?

在过去 18 个月中,我们发布了许多新的规则产品,例如转换规则缓存规则源站规则配置规则重定向规则。利用这些新产品,客户能够进一步控制我们如何处理他们流经我们全球网络的流量。到目前为止,对这些产品的反馈都非常正面。然而,除开箱即可用的功能外,我们的客户有时还需要更多功能。

总有一些用例,一个产品不能提供客户在其特定情况下需要的功能。例如,尽管我们成千上万的客户现在都在使用 Transform Rules 来解决他们的 HTTP 头修改用例,但仍有少数用例是不可能的,例如用 cookie 设置动态的过期时间或用密钥散列 token。

这就是 Cloudflare Snippets 的帮助所在。客户将不再需要使用完整的 Cloudflare Workers 平台来实现这些相对简单的用例。他们也不需要等待我们来建立他们的功能要求。取而代之的是,他们将能够运行 JavaScript 的 Snippet。

将传统代码迁移到 Snippets

Varnish 控制语言 (VCL) 只在 Varnish 的范围内使用。大约在 16 年前推出,它在历史上被用来配置流量和内容交付网络的路由,因为它可以扩展到广泛的使用情况。

现在仍有相当多的企业在使用 VCL 来执行路由和流量修改动作。虽然其他供应商正在废除对 VCL 的支持,但我们希望确保你们中那些使用它的人仍然得到支持。

Snippets 不会运行纯 VCL。相反,我们将把 VCL 转换成易于维护的规则或Snippets。为了实现这个目标,我们正在建立一个简单易用的自助式 VCL 转换器,分析上传的 VCL 代码并自动生成建议的 Snippets,如果我们能找到匹配的,还能生成建议的产品规则,如 Transform Rule s或 Cache Rules。

这个话题最初是通过 Project Turpentine 处理的,Cloudflare 员工使用这套工具将客户的 VCL 解析为建议的 JavaScript 配置。然后可将该 JavaScript 加载到一个或一系列 Worker 中。

Snippets 将松节油的理念和原则更进一步。更进一步。通过在仪表板中直接建立一个分析器,它将权力直接交到用户手中,并给他们一个选择。你可以告诉我们把所有能迁移的东西都迁移到 Rules 中,剩下的代码迁移到 Snippets 中,或者,你可以选择告诉我们把所有东西都迁移到离散的 Snippets 中。这是你的决定。

我们将为 Apache htaccess 和 NGINX 配置文件提供相同的处理方式。目标是用户只需从他们的网站 Apache 或 NGINX 配置上传文件,我们就会生成建议的 Snippets 和/或规则。

不得不使用遗留代码进行操作任务的日子即将结束。Snippets 允许用户将这些工作负载迁移到 Cloudflare,并让他们专注于业务的更大问题与维护传统系统。

Snippets 和 Workers 的区别

大多数读者已经熟悉 Cloudflare Workers,我们强大的开发者平台,允许企业在 Cloudflare 的全球网络上运行和构建整个产品和解决方案。Snippets 也建立在这个平台上,但有几个关键的区别。

第一个主要区别是,Snippet 将作为规则集引擎的一部分运行作为专用的新阶段 ,类似于转换规则和缓存规则。客户将能够根据任何规则集引擎过滤器,选择和执行一个 Snippet。这允许客户对每个请求运行一个 Snippet,或根据我们提供的字段过滤特定的 HTTP 流量,如具有某种机器人得分的流量,来自特定国家的流量,或具有特定 cookie 的流量。Snippet 将是加法的,这意味着用户可以使用一个 Snippet 来添加 HTTP 头,另一个 Snippet 来重写 URL,如果两者匹配,将执行。

另一个主要区别是 - Cloudflare Snippets 适用于所有计划级别,不需要额外费用。99% 的用户不会支付一分钱,永远不会,使用这个解决方案。这使客户能够将其简单的工作负载从传统的解决方案(如 VCL)迁移到 Cloudflare 平台,并积极减少其每月的支出。

Free 计划 Pro 计划 Business 计划 Enterprise 计划
可用的 Snippets 每个区 5 个 Snippets。 每个区 20 个 Snippets。 每个区 50 个 Snippets。 每个区 200 个 Snippets* (客户可以与其客户成功团队沟通,以增加 Snippets 数量)。

与 Worker 相比,Cloudflare Snippets 很轻巧,最大执行时间为 5ms,最大内存为2MB,总包大小为 32KB。这种相对较小的足迹使我们能够在不增加成本的情况下向 99% 的用户提供这种服务,同时也足以满足已确定的使用案例,如 HTTP 头修改、URL 重写和流量路由--所有这些都不需要 Cloudflare Workers 提供的巨大资源。

Cloudflare Snippets Cloudflare Workers Unbound
(用于比较)
运行时支持 JavaScript JavaScript 和 WASM
执行地点 全球 - 所有 Cloudflare 地点 全球 - 所有 Cloudflare 地点
支持的触发器 规则集引擎过滤器 HTTP 请求
HTTP 响应
Cron Triggers
最大执行时间 5ms 30 秒 HTTP
15 分钟(Cron Trigger)
最大内存 2MB 128MB
整个程序包大小 32KB 5MB
环境变量 8/Snippet 64/Worker
环境变量大小 1KB 5KB
子请求 1/请求 1000/请求
Terraform 支持
Wrangler 支持
Cron Triggers
键值存储
Durable Objects
R2 集成

您可以利用 Cloudflare Snippets 做些什么?

Snippets 将允许客户将其现有工作负载迁移到 Cloudflare。它们还将为客户开辟一些新的可能使用案例。我们在下面强调了三个常见的例子,然而还有更多的例子可以选择。

示例 1:将可疑的自动程序发送到蜜罐

在创建 Snippets 时,客户将能够访问 Workers 运行时中可用的 Cloudflare 功能,例如僵尸分数字段。这使客户能够将 HTTP 请求转发到一个蜜罐,或使用正则 Javascript 功能,在流量被分配到低于某个阈值时,改变被送回最终用户的 URL 结构,例如:29 和更低

…
if (request.cf.botManagement.score < 30) {
const honeypot = "https://example.com/";
return await fetch(honeypot, request);
…
}

我们预见 Snippets 解决的另一个常见用例是修改 cookie。使用范围包括通过使用 getTimesetTime JavaScript 函数简单地设置5分钟内的到期时间,以及为 A/B 测试目的根据用户请求属性设置一个动态 cookie。

…
{
let res = await fetch(request);
res = new Response(res.body, res);
// 24h * 60m * 60s * 1000ms = 86400000ms
const expiry = new Date(Date.now() + 7 * 86400000).toUTCString();
const group = request.headers.get("userGroup") == "premium" ? "A" : "B";
res.headers.append(
      "Set-Cookie",
`testGroup=${group}; Expires=${expiry}; path=/`
    );
…

示例 3:URI 查询管理

客户还可以部署 Cloudflare Snippets 来进行复杂的操作,如拼接 URI 查询值,以选择性地删除或注入额外的参数。查询字符串的操作通常是使用转换规则完成的。然而,使用转换规则,set/ 动作实际上是  replace 动作。这个动作在应用于 URI 查询字符串时,将删除整个值(如果有的话),并将其设置为用户指定的内容,从而覆盖它。这对那些希望有选择地注入特定查询参数以匹配流量的客户来说是个问题。例如,当在用户代理中检测到常见的社交媒体平台时,设置一个额外的查询,例如: ?utm_campaign=facebook。有了 Snippets,客户将能够使用一个简单的 JavaScript 来进行这种选择性的删除和插入,如

…
if (userAgent.includes("Facebook")) {
      const url = new URL(request.url);
      const params = new URLSearchParams(url.search);
      params.set("utm_campaign", "facebook");
      url.search = params.toString();
      const transformedRequest = new Request(url, request)
…
}

我们很期待看到 Cloudflare Snippets 为客户实施了哪些其他用例。

你们会停止向规则集添加操作吗?

简单的答案是否定的!我们将继续在规则集引擎内建立我们的无代码行动,开发新产品以解决客户需求。

这听起来可能很明显--但功能改进的一个核心组成部分是与客户交谈。 与 Snippet 用户交谈将帮助我们了解 Snippet 帮助解决了哪些现实生活中的用例,并突出我们产品套件中的功能差距。然后,我们可以审查是否有必要将该用例产品化,或将其留给Snippets使用。

我们也明白,不是每个人都是软件开发人员。因此,我们正在探索如何使 Snippets对所有人开放,方法是在一个库中创建可选择的模板,客户可以复制和修改,只需要最少的编码知识。 有了 Snippets,强大的功能并不意味着困难。

访问 Cloudflare Snippets

Snippets 目前正在开发中,如需访问体验,您可在此注册,加入等候名单。

我们希望在 2023 年初开始接纳用户参加封测,随后再进行公测。

We protect entire corporate networks, help customers build Internet-scale applications efficiently, accelerate any website or Internet application, ward off DDoS attacks, keep hackers at bay, and can help you on your journey to Zero Trust.

Visit 1.1.1.1 from any device to get started with our free app that makes your Internet faster and safer.

To learn more about our mission to help build a better Internet, start here. If you're looking for a new career direction, check out our open positions.
Developer Week (CN)Snippets (CN)JavaScript (CN)简体中文

Follow on X

Cloudflare|@cloudflare

Related posts

April 05, 2024 1:01 PM

Browser Rendering API GA,推出 Cloudflare Snippets 、SWR,并向所有用户提供 Workers for Platforms

Browser Rendering API 现已向所有付费 Workers 客户提供,并改进了会话管理功能...

April 04, 2024 1:05 PM

生产安全新工具——渐进式部署、源码映射、速率限制和全新 SDK

我们今天发布了五项更新,旨在为您提供更 多功能——渐进式部署、Tail Workers 中的源映射堆栈跟踪、全新的速率限制 API、全新的 API SDK,以及对 Durable Objects 的更新——每项更新都旨在满足重要的生产服务需求...