这个系列是针对软件开发的,主要介绍 Cloudflare
提供的构建基于全球网络的 Serverless
应用的基础能力,特别是支持免费计划的,会更加着重介绍。
为什么是 Cloudflare
Cloudflare
是一家跨国科技企业,总部位于美国旧金山,致力于加速和保护网站和网络应用程序。它通过分布在全球的边缘服务器网络来提供服务,包括内容分发网络(CDN)、分布式拒绝服务(DDoS)防护、域名解析服务(DNS)以及Web应用防火墙(WAF)。到目前为止,Cloudflare
已经在全球建立了 330 多个数据中心,构建了庞大的边缘网络,国内外很多大型企业和互联网公司都和它有着密切的合作关系。选择 Cloudflare
的原因主要有以下几点:
- 高速: 遍布全球的边缘网络,使得你的应用可以在离用户最近的节点运行,减少延迟,提升用户体验;
- 稳定: 提供了高度冗余和容错能力,即使个别服务器或数据中心出现问题,也不会影响应用的整体可用性;
- 安全: 提供的内置安全功能,如
DDoS
防护、WAF
和SSL/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)
DDoS
是 Cloudflare
自动启用的能力,可以自动缓解基于 HTTP
、SSL/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
可以将发往这些邮箱的邮件转发给你的其他邮箱,比如 Gmail
、QQ邮箱
等。它仅支持接收邮件,用来收收验证邮件啥的还是挺方便的。
网站开发
这部分主要是提供的开发能力,你可以使用这些技术实现 Serverless
的应用。
开发工具
Cloudflare
向软件开发人员提供了 Wrangler
的开发工具,下面这些面向网站开发的能力除了可以在面板上操作以外,也都能通过开发工具以命令行的方式进行配置。另外,开发工具还提供了本地开发模式,方便在部署到全球网络前先进行本地测试和调试。
Workers 和 Pages
这是构建 Serverless
应用的核心,在开始的时候 Workers
和 Pages
是两个不同的服务,针对的场景也各有不同,但随着不断地演进,这两者之间技术上的差异越来越小,所以 Cloudflare
也就把这两个服务放在一起了。虽然有两个不同的入口,也有着不同的面板,但是事实上 Workers
也能以 Pages
的方式去部署。这也使得很多新入手的同学不知道该如何选择,其实从场景上看这两者还是有明显的区别的。
Workers
起初 Workers
被定义为一种云计算节点,提供了类似于 Node.js
的运行环境让你编写的 Javascript
代码在边缘计算节点上执行,所以说它是偏向于后端的服务节点。相比于 Pages
,它多了一个 编辑代码
的按钮,可以在线编辑、调试代码。这取决于 Workers
部署的本质上就是一个 Javascript
代码片段,通常入口文件就叫 worker.js
。
Worker 路由
是在网站控制面板提供的附加的能力,可以将设置规则将你网站的流量转发到指定的Workers
进行处理。这个特性有些特别的用法,比如配合优先域名进一步加速你的服务。
Pages
类似于 Github Pages
,它起初被定义为一静态资源节点,主要用来提供静态资源的访问。但随着演进,服务端代码也可以在节点上执行,转变成类似于 JSP
、PHP
这样的动态资源服务节点了。但是从使用场景上,它更像是偏向于前端的服务节点。这因为这样的特性,它不像 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 数据库
D1
是 Cloudflare
提供的分布式结构化数据存储方案,从 SQL
语法上它更接近于 SQLite
。
Hyperdrive
Hyperdrive
可以用来连接和加速你自己的数据库,无论数据库是公网上的或者内网中(通过隧道能力)的,都可以通过它进行连接。目前只支持 PostgreSQL
数据库,并为它在边缘网络提供查询缓存以加速数据库访问。
消息队列(Queues)
这是一个类似于 MQ
的分布式消息队列服务,生产者将消息推到队列中,而消费者可以在多个节点上进行接收,并提供 ACK
机制来保证消息被正确的消费。
R2 对象存储
R2
是 Cloudflare
提供的分布式对象存储方案,类似于 S3
,它适用于存储非结构化数据,比如文件。但和传统的分布式文件系统不同,R2
存储的内容会自动分发到全球网络实现 CDN
加速。
Workers AI
这部分能力是为了构建 AI
应用而提供的。Workers AI
提供了一个 AI
推理模型目录,你可以利用它构建自己的 AI
应用。AI
能力分成几大类:
- 文本生成
- 文本分析总结
- 文本数据转换向量
- 文本分类
- 文本生成图像
- 图像归纳文本
- 图像分类
- 目标检测
- 语音识别
- 翻译
Cloudflare
本身并不提供实际的AI
能力,只是为你的AI
应用提供集成的能力,而提供商可能是OpenAI
、
向量数据库(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/亿向量维度 |
另外,R2
和 Workers AI
都是另外收费的,都是先免费提供一定的用量,超额部分另外计费,下面是 R2
的计费方式。
免费额度 | 超额计费 | |
---|---|---|
存储 | 每月10GB | $0.015/GB |
写入类请求 | 每月100万次 | $4.5/100万次 |
读取类请求 | 每月1000万次 | $0.36/100万次 |
至于 Workers AI
根据不同的模型提供计算方式各不相同,详细请查阅 官方文档。