cloudzhou's recent timeline updates
cloudzhou

cloudzhou

V2EX member #19761, joined on 2012-04-23 09:29:19 +08:00
普通程序员,大模型之争如同 Jdk 版本
程序员  •  cloudzhou  •  Sep 24  •  Lastly replied by cloudzhou
36
谈人形机器人的未来应用
分享发现  •  cloudzhou  •  Jan 10  •  Lastly replied by kenshinhu
84
从产品角度评价 v2ex
V2EX  •  cloudzhou  •  Sep 29, 2025  •  Lastly replied by catamaran
34
大龄被裁大头兵职业感想(三)
  •  1   
    职场话题  •  cloudzhou  •  Jan 19, 2025  •  Lastly replied by headwindx
    21
    大龄被裁大头兵职业感想(二)
  •  3   
    职场话题  •  cloudzhou  •  Jan 13, 2025  •  Lastly replied by kingfighters
    58
    大龄被裁大头兵职业感想
  •  4   
    职场话题  •  cloudzhou  •  Jan 15, 2025  •  Lastly replied by kivmi
    85
    浏览器 tab 的插件想法
    奇思妙想  •  cloudzhou  •  Apr 10, 2025  •  Lastly replied by jackie777
    30
    cloudzhou's recent replies
    @imchuncai 你很适合做一致性高的业务,这个考验很多设计细节,很多人都不会考虑一致性的
    @imchuncai 严格从并发安全看这个不够的,这是我之前一个妥协方案,“引入一个延迟周期”,只是说尽量避免
    Get cache miss:
    1. Get DB
    2. set Cache
    3. Get DB
    4. set cache cas and only exists

    这个不知道什么逻辑? get 两次?
    @imchuncai 除了你说的,“发送 event Z 失败” 这种情况,目前最终一致是可以做到的,你再看看我的方案。

    而我的意思,你不能把这个失败也纳进来讨论,可以说失去讨论意义了。
    @imchuncai

    续期的意思就是 GETEX 传入相同的过期时间
    过期时间是否相同一点都没影响啊,下次更新就是新的数据了,我们的核心是,旧数据最多 ttl 时间内
    你的意思是每次 get 的时候,还延续 ttl ?这个我的实践上,没有这么做的

    ---
    你不能把发送 event z 失败,这个事情纳进来,正如 raft 脑裂整个系统失败了一样。
    这么说的话不用举这么复杂的例子,只要 version=1 事件设置 cache 成功,version=2 事件因为各种原因失败就行了,缓存已经不一致

    CAP 理论里,只能有两个,而 cache ,实践上都是纳入弱一致性范围。
    @imchuncai

    你一旦提供 ttl ,你就没法处理用户会续期的行为
    cache ttl 是没有续约概念的,只会中途刷新,或者到期消失,影响范围只有 ttl 时间

    我再次总结不出现 ttl 范围 cache 不一致的设计:

    触发事件然后缓存集中处理,也就是没有并发态:
    1. 读触发 cache 更新,触发 event: (read, table, id)
    2. 驱逐、写触发 cache 可能更新,触发 event: (write/volatile, table, id)
    3. 事件流式处理,同一个 table 事件只有一个进程顺序处理
    4. 无论是 1 ,2 事件,从 db 拉去新数据,read 操作直接 cas 更新 cache ,write/volatile 一样,cas and only exists

    重点:同一个 table 只有一个处理点,消息不管先后乱序,都是 select by id 拉最新数据和 cache 同步
    @imchuncai

    1. 我的 append 还有两个实现,那个是解决最终一致
    2. mysql by id 是真的快,尤其是已经在 innodb cache ,问题是 db 很宝贵,让 db 做事务严格一致的行为
    3. etcd 只是一个例子,因为他们就是 raft 协议,只要你要 raft 就存在多节点协商,其实你这个 case ,没有用 raft 的需要
    4. raft 所谓的锁,等于一个写指令,对你这里来说也等于多点协商
    5. qps 就是最重要的事情,衡量一个技术方案是否可行,对 qps 要有一个非常直观的了解,经典的 Latency Numbers Every Programmer Should Know
    https://gist.github.com/jboner/2841832
    同样可扩展到对于 raft 、redis 、mysql 读写的 qps 的时延衡量
    Oct 30
    Replied to a topic by naixiangapp › 职场话题 › 浙江车企真 j8 事多
    @naixiangapp 那你的问题,就应该是提出 bug 被改这个问题,而不是去说关了这个 bug 问题
    Oct 30
    Replied to a topic by naixiangapp › 职场话题 › 浙江车企真 j8 事多
    重写 bug 描述,这个不专业

    但是:
    “是固件问题,不是软件问题,把这个 bug 单关闭吧”

    这也不专业,你不能叫测试关闭 bug ,你让测试部门怎么想?
    一个具体流程:
    开发对于 bug ,解决 or 不需要处理,然后 issue 描述具体上下文,为什么不需要处理,之后交给测试决定就好了

    都按流程来,没必要置气,你提你的,我解决我的
    @imchuncai
    我的强一致是不可能达成这是对的,包括短期的不一致,但是我这个方案,是可以做到最终一致的,你可以看我的 append

    数据库持有写锁,和 raft 的锁,差距极大,数据库性能其实比我们想象高很多,还有锁范围也是不同。
    反而是 raft ,涉及到多点协商一致,这个 qps 非常低的,etcd 早期都被诟骂,因为有人把它当 kv 用。
    raft 作为选举、仲裁大脑,不适合做高 qps 的行为。有很多测评,raft 集群 qps 低于单体 mysql 。

    所以我说你这个方案,本质没问题,但是不应该用在 cache 。
    cache 这玩意是为了什么,无非就是快,而你把一个 raft 包一下,这,快不起来的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4453 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:14 · PVG 08:14 · LAX 16:14 · JFK 19:14
    ♥ Do have faith in what you're doing.