cloudfalre worker 也许是目前 web 服务部署的一种最佳实践。

4 天前
 jeesk
1. 先前我问了一下,如果使用 cf 不考虑大陆,数据中心选择哪里好,后面我将我原有的 go 服务使用 worker 重写后, 速度比以前提高太多。

2. 这个服务我自己做了一个用户注册系统,主要是帮用户申请签名证书,以及商品订阅,以前用户备份的配置信息。js + d1 数据库完全够用。 关键的是还快,没有内存担心的问题。

3. 涉及到 cloudflare api 相关接口, 以前无论是部署到海外还是国内, 接口都慢的要死, 使用 worker 后, 快得无法想象。

4. 我以为使用 cloudflare 如果接口超过 cpu 占用 10ms ,接口就会超时, 从我使用的看来,没有这个问题。



5. worker 加上 d1 ,加上 cf 的证书,认证,限流,安全验证, 可以说从 serverless 的思想,重点狙击个人使用 springboot ,golang 写的 web 服务。

6. 当然也有很多限制, 比如储存文件,文件上传的得使用其他的对象储存。可能没有直接写磁盘方便。国内可能不能正常访问。如果 cf 关闭了这个服务,迁移代码很麻烦。无法使用一些 linux 命令处理一些业务逻辑,这个目前无解。


总得来说如果你有一个简单的服务,如果不想自己处理证书,安全,限流等等一系列的问题, 那么迁移到 worker 目前看,是一条不错的路子。这么香,况且还免费,不是我吹,要是国内能提供这种服务,估计国内阿里云和腾讯云会受到重创。在这种情况下,springboot
和 go 不再是我的优先考虑了。
3944 次点击
所在节点    程序员
50 条回复
crackidz
4 天前
Worker 可以使用 Go 啊...
xiashali
4 天前
当你收到 35k 的账单时就不会这么想了
chesha1
4 天前
@crackidz #21 不可以吧,原生只支持 js/ts ,python 和 rust 都是后加的还在 beta ,除非用 wasm ,那可以支持各种语言了
jqknono
4 天前
https://weread-challenge.techfetch.dev/
这个开源项目全用 workers 托管的,几分钟就做好了,0 成本。但是根据我非常浅显的对比,5 美元的起步价增加的内容不算多,最比如免费的提供每日最多 10w 次请求,一月是 300w 次,而 5 美元起步的是限 1000w 次请求,更多的请求按使用次数收费。
另外阿里云和腾讯云有新注册用户三个月有限制的 serverless ,阿里云的是预付费,起步价就很贵,请求次数购买后还有时间限制。
对比一圈后,CF 的这个 worker 或 page 的确是最便宜的。而且 severless 的代码和 server 上的代码有很多都是通用的,开发上也省时省力。
jqknono
4 天前
阿里云的 serverless 的流量费好像是另算,cf 只算请求次数,流量不计费。
sagaxu
4 天前
腾讯云 SCF ,阿里云 FC ,用户并不多,如果免费说不定尝试的人能多一点。

这种设施,可能更适合个人或者没什么流量的服务,流量一大不见得省钱,账单也不好估算,SLA 也没保障。

1. 绑定平台,在不同平台之间迁移很困难。
2. 主流框架支持度低,熟悉的的人少。
3. wordpress 等现有产品支持的不好。
4. 第三方库,比如微信支付宝 SDK 支持的不好。
5. 证书,安全,限流其实云网关都做的很好,开箱即用。

说是最佳实践,我认为过于夸张了,是不是良好的实践都不一定,谈何最佳。
r46mht
4 天前
@jeesk

看了 https://www.cloudflare.com/zh-cn/learning/serverless/serverless-performance/,试图总结一下。CF worker 相对于 lambda 的优势有两个:

1) 服务运行在 edge 上,因此从客户到服务器的延迟会显著减少。

部署在 lambda 上的服务运行在某一个选定的数据中心区域,因此如果只有一个 lambda 服务的话,无论世界各地的请求都会被传递到这一个区域,被 lambda 服务处理完成之后再把回应从这一个区域传回到客户那里。当然对于大体量的服务而言,开发者可以在多地区运行同一个服务,再在 edge 上面依靠某些 load balancing 的方法把来自某一地区的请求就近传到相应的地区。但是搞定这些东西费时费力费钱。

CF worker ,以及 lambda@edge 把处理请求的服务放在(每?)一个 edge 区域,对于简单的不需要依赖服务处理的请求,CF worker 和 lambda@edge 可以在最边缘的位置返回用户的请求而不用把请求传到更远的数据中心。但是如果请求依赖其他服务呢(比如需要访问数据库),考虑到无论 CF 创建 D1 ,还是 aws 创建 rds 的时候还是需要选择区域的,我猜这些请求最终还是会回到某一个你选择的区域。那么这种情况下 CF worker 或者 lambda@edge 的优势就没那么明显了。

CF“在全球 200 个城市拥有数据中心”,但是这个比其他大云计算厂商多还是少我暂且蒙古。

2 ) CF worker 使用 V8 作为 Javascript 的解释器,相比 AWS 用的 Node ,启动速度更快。

serverless 冷启动慢好像已经是一个臭名昭著的问题。Node 虽然以 V8 为基础,但是应该有一套属于自己的运行时。考虑到 V8 为处理网页的 JavaScript 代码而生,而 Node 为把 Javascript 从浏览器带到服务器而生,那么 V8 比 Node 启动快也非常合情合理。不过我猜代价是一些 Node 代码没办法直接原封不动的迁移到 worker 的 V8 环境来。以及也许某些仅支持 node 的库没法在 worker 里面用。貌似 worker 现在有 beta 版的 Python 支持,没仔细看不知道是不是魔改版快速启动 python 环境...



总而言之,懒得迁移了,摆了。
crackidz
4 天前
@chesha1 是的,现在 worker 两种 runtime ,一种是 js/ts ,另外一种就是 wasm
jeesk
4 天前
@jqknono 个人开发者完全够了。 你 App 日请求已经 10w 次了, 这个时候你的收益肯定能够负担 5 美元 1 个月了。

很多说超预算的, 完全是没有预算的计划。 超过 10w 请求的这种, 还不愿意付费。 可谓是把老美的公益送餐, 中产还去白嫖的场景,发挥得极致了。
jeesk
4 天前
@sagaxu

你只看到我说的流量了。 但是其他的功能是一个不看, 自动 https, 认证,限流,等等。 要不你看看国内云对网关付费的价格? 算了, 你还是别看了, 看了会绷不住的。
jeesk
4 天前
@sagaxu

1. 平台迁移问题, 确实是一个问题, 设置 cpu 密集型的都不适合这玩意,特别是免费套单。 即使换一个云主机, 使用 node 一样的能够运行。

2. 啥叫主流框架? spring boot, go frame ? 其他微服务?
3. wordpress 凭啥要适配 serverless ? 那为什么不适配 java, golang ,rust ?
4. 第三库只要有 js/node 就能用,甚至直接用 http 接口就行。


目前能看到的风险, 迁移麻烦,cpu 密集型不能用,账单这一块不认可,防火墙就能阻挡大部分流量了,如果真有 dos 攻击,你用啥平台都无法避免停机+高额账单。
richardwong
4 天前
避免 vendor lockin
julyclyde
4 天前
@crackidz 我还以为 js 和 wasm 一码事呢
Jafee
4 天前
cf worker 最需要的是一个账单限额,不然一旦被 d ,就会很难受了。
sagaxu
4 天前
@jeesk 自动续的 SSL 证书,限流都是很常见的标准功能,自己配一遍 nginx 要一刻钟?一年能配几次?算不上多大卖点。固定带宽遇到 DDOS 只会停机进入黑洞,没有额外账单。

第三库只要有 js/node 就能用?很遗憾,很多第三方库不支持 nodejs ,自己封装 http 接口可能要在加密解密校验上花点调试时间。比如微信支付,官方 SDK 就只有 Java 、PHP 和 Go 。

资源也限的很死,一个 instance 最大只有 128M 内存,也不能使用 fs 和 child_process 模块,express 这样的框架也不支持,引入一个依赖的时候,还得先搞清楚这个依赖支持不支持部署在 workers 。

限制太多,增加人力成本,也省不了几个钱。适用的场景太少了,就这也能重创阿里云和腾讯云,太过夸张了。
jeesk
4 天前
@sagaxu


你有钱,怎么搞都行。
qweruiop
4 天前
@jeesk worker 最大的问题,他其实基建这一套,包括他的 d1 ,r2+cache ,Workers Analytics Engine
都是深度绑定的。你一个项目可能开始的时候,会比较注意,但是开发一段时间后,你是不可能低改动成本迁移到其他 serverless 的。

当你的访问量上来了,被攻击?你 worker 只能靠 cf 的防火墙来防,但是他那个防火墙的策略简单的可以,很难防住被刷,然后你就看到你的账单从几百到 几十 k 了。

重点是,当出现这个问题的时候:
1 ,如果通过自定义 cf 的 firewall 那些简单的逻辑,你基本要么防不住,要么把普通用户也给关了。。。
2 ,要或者,你当下再想迁移?基本上,也等于需要重写大部分代码了。。。

另外我们当时是 cf 的企业客户(被迫买的),就是为了用他的防火墙规则防止被刷 worker 。。。

https://blog.cloudflare.com/zh-cn/post-mortem-on-cloudflare-control-plane-and-analytics-outage/

出事的时候,几个组件瘫痪了差不多 2 天吧。。。然后打他那个企业版专属北美电话,也没啥卵用。。。

其实各大云都有故障,损失抛开不说,关键是出问题的时候,基于 worker 和他那些缓存啊,db 开发的方案,不像 go/java ,你基本上迁移不出来了。。。
mooyo
3 天前
绑定太深 只适合个人开发者 极小规模初创
Int100
3 天前
是好用,但是代码需要避免 vendor locked-in
june4
3 天前
小人小玩具玩玩很适合,毕竟免费。但我估计这免费额度和开发体验完全不如花点小钱买个轻量 vps 的。
厂商锁定又有开发限制的东西,碰到问题等得哭吧。
我记得 V2EX 站长就上了 google 类似开发环境的大当,一开始也如 OP 这样吹捧过好一阵,后来就麻了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1102503

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX