V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
bingoup886
V2EX  ›  程序员

如何校验多个 jvm 中的内存 cache 的数据一致性?

  •  
  •   bingoup886 · 2023-07-14 11:09:37 +08:00 · 1400 次点击
    这是一个创建于 530 天前的主题,其中的信息可能已经有所发展或是发生改变。

    机器数量很多,超过 10 万,想通过定时打点上报一个内存 map 的 md5 签名来比对,但感觉有点重,有没有更轻量级的方案?

    10 条回复    2023-07-15 11:44:01 +08:00
    Red998
        1
    Red998  
       2023-07-14 11:16:16 +08:00
    不能用 redis 么?
    Nooooobycat
        2
    Nooooobycat  
       2023-07-14 11:29:50 +08:00
    map.hashCode ()?
    bingoup886
        3
    bingoup886  
    OP
       2023-07-14 11:40:22 +08:00
    @Red998 是在 client 中的,宿主不属于同一个服务,用 redis 不太好
    bingoup886
        4
    bingoup886  
    OP
       2023-07-14 11:40:48 +08:00
    @Nooooobycat 这个返回值会收到 jdk 版本的影响吧
    dode
        5
    dode  
       2023-07-14 13:32:20 +08:00 via Android
    给数据签名,客户端校验呢
    vino2014zly
        6
    vino2014zly  
       2023-07-14 13:44:14 +08:00
    加个版本号,cache 更新时版本号同步更新
    iosyyy
        7
    iosyyy  
       2023-07-14 13:45:34 +08:00
    感觉没啥太好的办法..
    不过就这个感觉可以取样假设有 1000 台随机分片出来的 client 拿到的数据一致就默认他一致 或者用消息队列也可 就是你把这些 hash 后的或者 md5 的数据都上传到消息队列统一处理🤔
    bthulu
        8
    bthulu  
       2023-07-14 16:53:39 +08:00
    是大型连锁超市/药店的收银台吧?
    10 万机器, 上报内存 md5 这个有啥重的? 稍微错开个点时间上传就行了. 比如一台 10 点整, 一台 10 点 200 毫秒, 一台 10 点 300 毫秒. 将 10 万台机器上传时间控制在 10 秒内, 并发就是 1 万每秒. 服务端用一台机器, 起个后台, 起个 rabitmq, 后台就开一个接口, 接收数据甩进 mq 完事. 再过半小时, 由业务后台从 mq 中读取数据进行处理就行了.
    xx6412223
        9
    xx6412223  
       2023-07-14 16:54:51 +08:00
    给出的描述信息太少
    1 cache 是每个节点独自拉取更新或者说维护更新的
    2 有什么情况可能会造成 cache 不一致

    保证所有 client 的 cache 一致,,本身这个想法就有点。。。
    zibber
        10
    zibber  
       2023-07-15 11:44:01 +08:00
    设备定时上传到对象存储, 写个脚本定时扫一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   991 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:00 · PVG 05:00 · LAX 13:00 · JFK 16:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.