切换导航
新动弹计划
搜索
文章
动弹
排行榜
登录
注册
搜索 “#${user.id}` ,比如 `github” ,共找到 1 项结果
×
搜索
文章
动弹
热门关键词
#daily tips#
Cursor
掌控习惯
ChatGPT
Laravel
读书
#稍后阅读#
Falcon
09-15 23:39
冒泡
#Cloudflare#
踩了不少坑,比如它家的KV db 是有延迟的,各节点之间需要时间同步,才能达到最终一致性,我做了一个todolist练手,而且这个 todolist 支持用户注册登录,为了追求简单,用户信息、sessionKey和todo任务 的内容都保存KV里。
在同步用户任务信息的时候,我才发现同一个用户,如果一个设备是手机,另一个设备是用电脑,他们就很有可能读取到不同的任务状态,比如我在手机上删除了一个任务,在电脑上该任务还是没有删除情况。我开始还怀疑是我的代码出了问题,debug到了三四点,后来我才发现原来是这个kvdb的问题,它是分布式的,会把一个节点的数据同步到其他节点,就像cdn,节点间的同步是有延迟的,所以会产生脏读的情况。但是最终会达成一致性,文档是这么说的。
这种不一致性在某些场景是可以接受的,所以用来存session没什么问题,但问题在于如果追求强一致性,比如聊天应用,视频对话,就不能用kvdb了,它们推荐的方式是用Durable Objects,所以我又替换成了Durable Object,在next.js里写了又出现错误,后来又一查,原来这个开付费计划才能用,每月至少20刀。
搞了半天又白搭,我又检查了一下D1是否可靠,看来也不行,看来也存在节点复制的延迟。
准备集成 upslash的redis了,我知道这玩意可以做单点,指定一个区域,不过似乎也支持多节点复制。
又发现一个大坑,在绑定
#upslash#
的时候,要在浏览器隐私模式下绑定,不然它会通过Auth0(用chatgpt的话)自动登录Google,怎么也绑定不到新的 upslash 账户。
绑定后得到两个环境变量:
UPSTASH_REDIS_REST_URL
UPSTASH_REDIS_REST_TOKEN
会绑定到cloudflare生产环境(但加密),也可以登录upslash redis管理面板复制其值。
update:
我以为没有坑了,没想到又遇到一个,是关于upslash的,我先前设置用户的key是这样的 `${user.loginMethod}
#${user.id}` ,比如 `github#
123` ,但是坑就在这里,如果是kv用这种key没有关系,但upslash的是通过rest_api更新的,key会作为url的一部分,
#在url上有特殊用途,如果正常解析,后面的内容会因为#
被截断,upslash也没想到有人会用 `#` 做key的,没有兼容处理。改成用@连接!
0 赞
暂无评论
查看