V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  cloudzhou  ›  全部回复第 2 页 / 共 103 页
回复总数  2043
1  2  3  4  5  6  7  8  9  10 ... 103  
❮ ❯
@valord577 作为技术方案探讨,也很不错了,毕竟,ai 时代,已经不提技术了 :~

他这套方案,有应用场景,但不是 cache ,而是分布式 lock
lock 要做细腻,也有很多细节可思考:
1. 乐观/悲观,读/写锁,最高并发锁?令牌桶?(问号概念是我拍脑袋的)
2. 锁周期,不能导致资源长期不可用
3. 顺序,以及锁关联的 do once
等等

借助 raft 机制下,做一个全局的分布锁 lib ,用在敏感领域,大家用起来如同本地 lock

@imchuncai
昨天有几个问题没有回答:

Q: 而你的方案所有的操作都会对缓存进行写入,我的方案对热点数据更友好,冷数据的修改可能永远都不会触发写入缓存
A: 其实这是策略问题,我收到 update 事件,也可以根据是否在缓存里然后更新,缓存依然是按需的

Q: 驱逐的问题
A: 依然是策略问题
- 可以根据 ttl 尽量避免驱逐(现实中采取方案,因为 cache 驱逐是非常不好的行为,无法确定驱逐的数据是否重要)
- 在驱逐情况下,你提到的并发问题,可以根据监听 redis Keyspace Notifications 然后一个延迟周期,只更新 cache 已有的 key ,这样避免持久相互驱逐,同时更新并发竞态数据
10 月 28 日
回复了 laodao 创建的主题 › 生活 › 男人为啥非要结婚?给你再选一次的机会
@laodao 你父母给管孩子,要看你父母是否一起生活,以及相互付出。如果是传统的男方家庭为主,那么这个过程也就隐含着养老
10 月 28 日
回复了 laodao 创建的主题 › 生活 › 男人为啥非要结婚?给你再选一次的机会
@llCnll 那你可以看一下你有兄弟姐妹亲友没,刚好有孩子的,去当一下“德华”,别臆想,实际全天候带一两天小孩,然后再看看你的想法
10 月 28 日
回复了 laodao 创建的主题 › 生活 › 男人为啥非要结婚?给你再选一次的机会
这说的,婚恋早期,男性会看起来付出多一点
(放到自然界你就可以理解了,雄性争取配偶还在各种骚操作,人类起码还不需要决斗:0 )

长久一点看,男女会趋向合作式一起生活,简单说就是日常伴侣
而你提到的所谓现在社会,根本不符合真实场景

女性工作概率很高的,甚至女性更愿意去工作的,没工作大部分反而是家庭原因
家务、孩子啥的,你一个人的话,不需要搞?你确定你带孩子会比女性多?
你父母给管孩子,大部分也隐含了帮你父母养老的义务
10 月 28 日
回复了 ken2025 创建的主题 › 分享发现 › 发现了个有趣的 esp32 学习网站
@br_wang 并且老板是个技术出身的狂人
@rockddd 单看交互没有多大,但是 ai 会话无状态下,会导致每次会话,其实是交互的前几个上下文,这个等于会话 x10 了。但是也不至于影响带宽。
10 月 28 日
回复了 ken2025 创建的主题 › 分享发现 › 发现了个有趣的 esp32 学习网站
我在乐鑫工作了三年,乐鑫非常有可能成为一家很 nb 的企业,比如 “边缘 ai 计算” 类似概念
我大概理解你,你这里就充当了 cache 的角色,通过 rpc 然后触发 cache 读取/更新,存储 cache 的就是你这服务,通过 raft lock 的机制,保证了读写的时序和并发安全。

然而,你这个机制略显尴尬:

1. to c 端,大流量大并发,几乎不可用,raft 用来保证集群仲裁而已,连 kv 都谨慎使用,没见过谁敢接 c 端请求的。讲究啥一致性,cache 周期一过能刷最新值就好了

2. to b 端,尤其是银行等强一致性,db 走起,硬件堆上,让 db 自己做好 cache 缓存就好了

你这套机制,适用场景,非常少。
@imchuncai 你这里根本没有涉及到真实的 cache 存储啊,除非你存储到内存缓存?你要是接上 redis 或者任何远程 cache ,这写 cache 不就是会出现吗?还是说你用 raft 作为 cache store ?
@imchuncai 读写 cache 失败,导致的并发问题,vs cache 逻辑的设计,是两个问题
@imchuncai 你有没有想过驱逐这种情况,接下去所有的 update 都可能是失败的

你的设计,无非只是用 raft 做一个全局 lock 而已,lock 成功,当时写失败(驱逐)
cache 一样长期都是失败的

缓存讨论驱逐,几乎没有意义的,时序完全无法保证
@imchuncai 没错,我是理解你这个意思,和你的图一样的,核心无非是高版本被驱逐,低版本自然就占据

8.CDC:set key ,这时候是不是已经设置到 redis ,然后又被驱逐,然后 version = 1 设置进去,对吧

1. redis 驱逐本身不合理,意味着 cache 有丢失
2. 我们监听 redis Keyspace Notifications ,驱逐事件,根据 id 重新读取 version = 2 数据进行重放,覆盖更新 cache
@imchuncai

Get 操作才会对缓存进行写入
你这里我看不懂,Get 有 cache 就直接拿,不要等 set 结束了,cache 怕的是持久不刷新,不是这种场景

key 的驱逐这个情况,是不考虑的,这要考虑,就 Keyspace Notifications 订阅,然后 row 数据重放一下就行了,version 已经自带。

我这个方案,其实核心差异是:version 是否是 db 自带,各有优劣
version db 自带,所有问题都非常简单,任意重放 row 数据即可,除了 update/delete 需要注意

如果 db 不自带,这时候 version 来自外部,尤其要考虑到 cache miss ,就有些复杂度

但是如果使用你这个方案,那问题就非常简单了:
1. cache miss 触发一个 miss 事件
2. 在补充 cache 的时候,设置 lock key 周期,单位时间 lock time +1
3. 补充 cache ,检查 lock key 没有其他写操作,也就是 lock time 依然是 1 ,说明补充 cache 成功
4. 如果 lock time 不等于 1 ,说明有其他写操作,设置 next try 重试
5. 其他写操作,lock time +1

这个逻辑和你的 缓存未命中 是很想的
就是说,你的方案,在解决 db 没有 version 情况下,我是可以用的

---
cache 一定要做到,读没有代价,写稍微带来代价,尽量异步,允许缓存不一致窗口,但是不要永久缓存
cdc 这种后台订阅,事件驱动,刷新 cache 的方案,对读写都是没啥代价的
@imchuncai

1. 因为第一步就是 select for update 去拿写锁,所有要改的都已经查出来了。
你这一步,对业务的开发,已经影响很大了,不管是模式还是性能,开发肯定习惯 update/delete 一个 sql 搞定

2. cdc 是需要对 key 的格式有约定的
这就太简单了,${table_name}_${id},约定大于配置即可

3. 第二数据库需要维护 version 字段
这个 version ,可以放在 db column ,也可以是独立的 redis ,或者 kv db ,核心还是 ${table_name}_${id}: ${version}。如果是 db column ,那么天然就有,update version = version+1 ,如果其他途径,无非就是变更 version+1
因为 cdc 是顺序的,所以 version + 1 然后设置一个最新的 table object 数据,没问题,只需要确定 version 递增,和关联表数据,没有乱序即可

cdc 是难得的,把所有变更都纳进来的一种方式,不管从哪里更新

cache 这玩意,就不要讲究高一致性了,raft 带来的损耗,还不如去掉缓存,把 mysql innodb cache 加大点
@LDa 他这里还有一个非常难解决的问题,就是 update 然后其实隐含多个 cache 更新
比如 update order set xxx where yyy ,导致多个 order 修改
这时候,触发的不是单个 order 更新,是批量更新
cdc + 版本号,解决这个问题
一直讨论类似缓存一致性问题,直到我选择了更简单的方式
你的这个实现方式太重度了,以至于无法验证正确性

我的方式很简单:依赖 db/redis 的一致性
简单说:
无论是 insert/update/delete ,都认为是变更,version + 1
cdc 监听事件变更:
( version, object )变成一个事件

cache:
object_key_$id : {version: $version, objcet...}

redis 更新,update if version > current
简单高效,不阻塞更新过程,允许瞬间 cache 差异

---
你这套机制,除非高一致性才需要
但是,到了这一级别的高一致性,简单依赖 db 就好了,没必要这么复杂
10 月 27 日
回复了 NNCandy 创建的主题 › 生活 › 你们是如何和岳父岳母相处的
@m0unta1n886 对年轻一代可以这么说,老一辈要求就太苛求了
击败肯定不会很久,半年一年。但是到时候又有 Opus 6.X ,一样不会满足
我的观点是,别关心啥 ai 了,自己用,哪个满足你工作就哪个
10 月 26 日
回复了 Need4more 创建的主题 › 分享发现 › DeepSeek 融资 1000 亿人民币
@lang1pal 这,ds 现在想挣钱,那简直太容易不过了,现在就光靠 api ,也不怎么宣传,就跟印钞机一样。

你现在看到的投入巨大,是因为算力约束下,要构建更大的训练、推理的大规模集群。
但是如果你要算这个钱,那海外这些大模型更是海量投入。
1  2  3  4  5  6  7  8  9  10 ... 103  
❮ ❯
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1253 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 20:39 · PVG 04:39 · LAX 12:39 · JFK 15:39
♥ Do have faith in what you're doing.