Cloudflare开发系列(一) Cloudflare入门简介


这个系列是针对软件开发的,主要介绍 Cloudflare 提供的构建基于全球网络的 Serverless 应用的基础能力,特别是支持免费计划的,会更加着重介绍。

为什么是 Cloudflare

Cloudflare 是一家跨国科技企业,总部位于美国旧金山,致力于加速和保护网站和网络应用程序。它通过分布在全球的边缘服务器网络来提供服务,包括内容分发网络(CDN)、分布式拒绝服务(DDoS)防护、域名解析服务(DNS)以及Web应用防火墙(WAF)。到目前为止,Cloudflare 已经在全球建立了 330 多个数据中心,构建了庞大的边缘网络,国内外很多大型企业和互联网公司都和它有着密切的合作关系。选择 Cloudflare 的原因主要有以下几点:

  • 高速: 遍布全球的边缘网络,使得你的应用可以在离用户最近的节点运行,减少延迟,提升用户体验;
  • 稳定: 提供了高度冗余和容错能力,即使个别服务器或数据中心出现问题,也不会影响应用的整体可用性;
  • 安全: 提供的内置安全功能,如 DDoS 防护、WAFSSL/TLS 加密,有助于保护你的应用免受各种网络攻击;
  • 隐秘: 是的,有的时候你并不希望暴露应用或应用开发者的信息,它也提供了很多隐私保护的能力;
  • 免费: 提供的免费计划足以支持构建小型网站的需要;
  • 简单: 通过提供的开发工具和 API,你可以更快速地开发和部署 Serverless 应用,专注于业务逻辑而非基础设施;
  • 直连: 国内可以直连 Cloudflare 全球网络,无需采用任何科学上网的手段;

控制面板

第一次登录以后,很多人会被 Cloudflare 控制面板的左侧栏搞的迷糊。实际上,控制面板有两层结构,第一层是全局的控制面板,它主要包括网站管理、域名管理、各种服务管理、账户管理等等功能。

第二层是点击上图中的某个网站(域名)进入的,这时左侧栏会切换成针对这个网站的功能,比如域名解析、安全证书、路由规则等等。

网络安全

这部分主要针对网络安全方面的的能力。

域名管理

你可以在 Cloudflare 注册域,Cloudflare 可以为你 WHOIS 隐私保护,默认开启了隐私保护的域通过 WHOIS 查询的结果是这样的,你的联系方式等信息都被保护了起来。

而且在 Cloudflare 注册域名也挺便宜的,比如你选择一个 .xyz 的生日靓号,每年 1 美刀都用不了。

你也可以选择在其他域名商购买域名后转入,可参考博主的另一篇文章 如何注册一个域名并托管到Cloudflare

域名解析服务(DNS)

这个功能在第二层控制面板中,除了提供域名服务商的标准域名解析服务,还提供了代理模式(小黄云)。代理模式下,你的网站被称为源服务器,最终用户可以就近连接到边缘网络,由 Cloudflare 代理到源服务器。这一来可以加速你网站的访问,二来也能保护你的源服务器不会暴露。DNS 服务支持直接在 Cloudflare 注册的域名以及转移或托管到 Cloudflare 的域名。

SSL/TTS

这是为你的网站提供加密证书的能力,证书分为三种,边缘证书、客户端证书和源证书。

  • 边缘证书:用于加密访问者到 Cloudflare 之间的流量;
  • 客户端证书:可以使用 Cloudflare 或你的Web浏览器生成的密钥和 CSR,用来保护你的服务不被未授权的设备访问;
  • 源证书:由 Cloudflare 生成的证书,安装在源服务器上,用于保护你的源服务器的资源只能被 Cloudflare 访问。

Web应用防火墙(WAF)

WAF 分成账户级(也就是全局的)和区域级(也就是某个网站的)两层,账户级在全局控制面板中,需要付费购买,这里就不介绍了。区域级在网站的控制面板中,左侧栏选择 安全性 - WAF 进入。免费计划下,网站只受免费托管规则集的保护,升级到 Pro 每个月 20 美刀还是挺贵的。免费计划的提供了 机器人验证限流等常用功能,一般的个人网站足够用了。

分布式拒绝服务(DDoS)

DDoSCloudflare 自动启用的能力,可以自动缓解基于 HTTPSSL/TTS 和网络层的 DDoS 攻击,如 HTTP 泛洪、SYN 泛洪、放大 HTTP 攻击、反射 HTTP 攻击、UDP 反射攻击等。

人机验证(Turnstile)

Turnstile 是类似 Google reCAPTCHA,可以方便的作为小组件嵌入到你的网站中进行人机验证,为访问提供防护,防止爬虫等自动化工具。Google reCAPTCHA 在国内是无法访问的,所以 Turnstile 是最好的替代品。你可以在网站的一些重要操作中嵌入 Turnstile 小组件,比如注册、登录、发帖等。

零信任(Zero Trust)

Zero Trust 是一种网络安全模型,要求试图访问专用网络上资源的每一个人和每台设备(无论位于网络边界之内还是之外)都必须进行严格的身份验证。在传统的网络安全模型是类似于城堡加护城河的模式,网络外部很难获得访问权限, 而内部默认每个人都会被信任。这种模式的问题就在于一旦获取了网络的访问权限,就可以自由支配网络内的所有内容。而零信任则是网络内外默认都不信任任何人,所有试图访问网络资源的每一个人都需要进行验证。

Cloudflare 提供的零信任服务针对免费计划就可以提供 50 人团队以下的使用许可,功能也很多,不一一介绍了,这里只展开说下它提供的两种内网穿透能力。

隧道(Tunnel)

实际上,两种内网穿透能力都是基于隧道的,但是因为针对的场景不同,所以分开说。这里特指提供安全暴露本地服务到互联网的能力,它是个人开发者最常用的利器了,适用的场景如下:

  • 需要对外开放的本地网站、API 或服务;
  • 服务器处于内网或希望隐藏公网 IP;
  • 需要为服务设置严格访问权限的团队环境。

WARP 连接

区别于前一种,它适用于将内网设备连接到零信任网络中,这更像一种全球的组网方案,如果你的企业在全球有多个办公点,就可以通过它整合在一个虚拟网络中,使得每个成员都可以安全的访问企业内的资源。

电子邮件路由

这是第二层网站控制面板的功能,所谓邮件路由就是让你可以用你的域名设置一些邮箱,然后 Cloudflare 可以将发往这些邮箱的邮件转发给你的其他邮箱,比如 GmailQQ邮箱 等。它仅支持接收邮件,用来收收验证邮件啥的还是挺方便的。

网站开发

这部分主要是提供的开发能力,你可以使用这些技术实现 Serverless 的应用。

开发工具

Cloudflare 向软件开发人员提供了 Wrangler 的开发工具,下面这些面向网站开发的能力除了可以在面板上操作以外,也都能通过开发工具以命令行的方式进行配置。另外,开发工具还提供了本地开发模式,方便在部署到全球网络前先进行本地测试和调试。

Workers 和 Pages

这是构建 Serverless 应用的核心,在开始的时候 WorkersPages 是两个不同的服务,针对的场景也各有不同,但随着不断地演进,这两者之间技术上的差异越来越小,所以 Cloudflare 也就把这两个服务放在一起了。虽然有两个不同的入口,也有着不同的面板,但是事实上 Workers 也能以 Pages 的方式去部署。这也使得很多新入手的同学不知道该如何选择,其实从场景上看这两者还是有明显的区别的。

Workers

起初 Workers 被定义为一种云计算节点,提供了类似于 Node.js 的运行环境让你编写的 Javascript 代码在边缘计算节点上执行,所以说它是偏向于后端的服务节点。相比于 Pages,它多了一个 编辑代码 的按钮,可以在线编辑、调试代码。这取决于 Workers 部署的本质上就是一个 Javascript 代码片段,通常入口文件就叫 worker.js

Worker 路由 是在网站控制面板提供的附加的能力,可以将设置规则将你网站的流量转发到指定的 Workers 进行处理。这个特性有些特别的用法,比如配合优先域名进一步加速你的服务。

Pages

类似于 Github Pages,它起初被定义为一静态资源节点,主要用来提供静态资源的访问。但随着演进,服务端代码也可以在节点上执行,转变成类似于 JSPPHP 这样的动态资源服务节点了。但是从使用场景上,它更像是偏向于前端的服务节点。这因为这样的特性,它不像 Workers 初始提供模板生成一个代码片段,而是推荐从 Git 存储库导入。

耐用对象(Durable Objects)

这个能力来源于单节点和集群的差异,通常在单节点服务的时候,所有 Javascript 对象都是在本地内存中的,当不再有变量引用时就会被销毁释放内存。一个比较经典的场景就是聊天室,创建了一个 房间 对象,当 用户 连接进来就会关联到一个 房间,当 房间 里没有 用户 连接时就可以销毁,当某人说话时,就可以获取到 房间 里关联的所有 用户,将消息推送给他们。这似乎运行的很完美,但是运行在全球网络中就不一样了,用户 从世界各地连接进来,他们运行在不同的节点中,而每个节点中 房间 实例都是不同的,关联的 用户 也不一样,这使得某人说话时,只能将消息推送给本节点的 用户,而无法传播到其他节点中。因此我们需要一个能力,能进行跨节点的调用 —— 发消息,这就类似于 RPC 一样,这就是耐用对象的本质。

从根本上说,它依然是运行不同节点中的不同对象实例,但是给了一个唯一的 ID 将他们绑在了一起。需要操作对象时,可以在执行节点中创建出对象,也可以被销毁。对象的状态被独立出来进行存储,这样看上去你在不同节点中操作对象的效果都是一样的,它们从逻辑上就可以被认为是同一个对象。

工作流(Workflows)

这项能力目前还在测试阶段,博主也未试用过,从文档上看,它提供的是一种将业务逻辑拆解成多个逻辑片段,这些逻辑片段可以运行在全球节点上,再用流程将这些逻辑片段组织起来,从而提供分布式任务执行、协调的能力。

浏览器呈现(Browser Rendering)

这是基于 Puppeteer 拓展出来的能力。原本 Puppeteer 支持开启无界面的 Headless 浏览器,并提供 API 实现操控浏览器进行截图、生成PDF、网页爬取、Web测试等。现在 Cloudflare 将这些能力带到了服务端,你可以开启远程 Headless 浏览器进行操控。

存储能力

为了构建 Serverless 应用,Cloudflare 还为 Workers 开发提供了多种分布式存储的能力。

键值存储(KV)

这是一个类似于 Redis 的分布式缓存服务,相比于 Redis 支持了多种数据类型不同,它只提供了最基础的键值对的缓存。

D1 SQL 数据库

D1Cloudflare 提供的分布式结构化数据存储方案,从 SQL 语法上它更接近于 SQLite

Hyperdrive

Hyperdrive 可以用来连接和加速你自己的数据库,无论数据库是公网上的或者内网中(通过隧道能力)的,都可以通过它进行连接。目前只支持 PostgreSQL 数据库,并为它在边缘网络提供查询缓存以加速数据库访问。

消息队列(Queues)

这是一个类似于 MQ 的分布式消息队列服务,生产者将消息推到队列中,而消费者可以在多个节点上进行接收,并提供 ACK 机制来保证消息被正确的消费。

R2 对象存储

R2Cloudflare 提供的分布式对象存储方案,类似于 S3,它适用于存储非结构化数据,比如文件。但和传统的分布式文件系统不同,R2 存储的内容会自动分发到全球网络实现 CDN 加速。

Workers AI

这部分能力是为了构建 AI 应用而提供的。Workers AI 提供了一个 AI 推理模型目录,你可以利用它构建自己的 AI 应用。AI 能力分成几大类:

  • 文本生成
  • 文本分析总结
  • 文本数据转换向量
  • 文本分类
  • 文本生成图像
  • 图像归纳文本
  • 图像分类
  • 目标检测
  • 语音识别
  • 翻译

Cloudflare 本身并不提供实际的 AI 能力,只是为你的 AI 应用提供集成的能力,而提供商可能是 OpenAIGoogle 等,所以可能会需要支付额外的费用。

向量数据库(Vectorize)

这是一个分布式的向量数据库,它可以帮助你构建全栈 AI 应用,比如通过大模型将文本数据转换成向量存储起来,建立索引,提供查询。

通话(Calls)

这也是一个还在测试中的能力,主要是用来构建实时的 WebRTC 应用,比如音视频通话或会议。

计费

除了一些特别收费的服务,Cloudflare 主要提供的计划有三种,免费计划 是注册就开通的,可以使用大部分主要的能力,一般个人网站,甚至小型网站都足够用了。Workers 付费计划 是针对开发人员提供的付费计划,主要是针对 Workers 和 Pages 和各种分布式存储能力的,价格也不贵,每个月 5 美刀还是很值得订阅的。第三种是针对网站的,订阅网站的付费计划也是只针对该网站的,你可以在首页的网站列表看到每个网站的付费计划。网站付费计划 分三档,专业版商用版企业版,主要是为网站提供更好的优化、防护能力,价格也不菲,从每月 20 美刀上不封顶,一般的个人或小型网站不建议订阅。下面列出了 免费计划付费计划 在开发能力上的主要区别,更详细的可以在自己的控制面板中查看。

能力 免费计划 付费计划
Workers 和 Pages 每天10万个请求 每天1000万个请求
每个请求最多10毫秒CPU占用时间 每个请求最多30秒CPU占用时间
每个定时任务或队列消费15分钟CPU时间
每月3万秒CPU占用时间 + 超出部分$0.02/千秒
耐用对象 不支持 每月100万次请求 + $0.15/100万次
每月40万GB秒 + $12.5/100万GB秒
存储1GB
浏览器呈现 不支持 每分钟2个新浏览器,最大2并发
KV 每天10万次读取 每月1000万次读取 + $0.05/100万次
每天1000次写入 每月100万次写入 + $5/100万次
每天1000次删除 每月100万次删除 + $5/100万次
每天1000次查询 每月100万次查询 + $5/100万次
存储1GB 存储1GB + $0.5/GB每月
D1 每天500万行读取 每月25亿行读取 + $0.001/100万行
每天10万行写入 每月5000万行写入 + $1/100万行
存储5GB 存储5GB + $0.75/GB每月
Hyperdrive 不支持 支持
Queues 不支持 每月100万次操作 + $0.4/100万次
Vectorize 每月3000万向量维度查询 每月5000万向量维度查询 + $0.01/100万向量维度
每月500万向量维度存储 每月1000万向量维度存储 + $0.05/亿向量维度

另外,R2Workers AI 都是另外收费的,都是先免费提供一定的用量,超额部分另外计费,下面是 R2 的计费方式。

免费额度 超额计费
存储 每月10GB $0.015/GB
写入类请求 每月100万次 $4.5/100万次
读取类请求 每月1000万次 $0.36/100万次

至于 Workers AI 根据不同的模型提供计算方式各不相同,详细请查阅 官方文档


文章作者: Mingy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mingy !
评论
  目录