V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
dzdh
V2EX  ›  Go 编程语言

分布式环境下,不借助任何第三方存储的前提下,是不是必须要自己实现一个“存储”

  •  
  •   dzdh · 2022-07-12 01:28:09 +08:00 · 1865 次点击
    这是一个创建于 865 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不借助 redis 、mysql 等第三方存储。

    想维护一个集群的当前连接,是不是只能靠 raft 等机制实现自己的一个存储,而且一定是依靠主从的?

    比如一个 websocket 集群环境。我想知道当前整个集群中一共有多少连接活跃和连接详情(假设是 map[uid:string]server-ip )而不借助第三方存储(比如 redis 计数)是不是只能自己把每个节点的连接信息上报到当前集群的 leader 中(所谓 metadata )同时所有节点除了维护自身连接外,同样也接受备份存储。

    4 条回复    2022-07-12 13:46:36 +08:00
    realpg
        1
    realpg  
       2022-07-12 05:35:11 +08:00
    你就不要给自己找事儿做了

    云原生,分布式,弹性扩容,这些东西的前提就是有充分的其他服务
    你非得剥开他们图个啥
    asilin
        2
    asilin  
       2022-07-12 09:32:15 +08:00
    比较流行的 kafka 消息队列服务目前采用的都是外挂一个 zookeeper 做这样的事。

    但是,kafka 后期打算把 zookeeper 抛弃,自身实现一个 raft 集群,也就是你期望的那样,你可以去看看。
    dzdh
        3
    dzdh  
    OP
       2022-07-12 09:44:51 +08:00
    @realpg
    @asilin

    这样的。看到 cockroachdb 就一个二进制文件,直接启动就可以组成集群,分布式存储。
    又看到 tidb 需要借助一个 pd 来同步 metadata ,多个 pd 还有主从。
    又看到 redis 集群也是 redis-trib create 就完事了
    都没借助到第三方存储集群信息。

    拿 redis 来说,redis 集群是任何一个 key 不是所有节点都有的。但是连接任意一个节点都能读到任意一个 key ,所以他实现了按照 crc16 和 slots 取余的分片存储,每次根据 key 先判断在数据应该在哪个 slot 在根据 slot 判断在哪个节点。然后再去读对应的节点。

    所以再不借助任何第三方存储的情况下, 需要自己实现一套复杂的 metadata 同步。对吧。
    realrojeralone
        4
    realrojeralone  
       2022-07-12 13:46:36 +08:00
    @dzdh 问题拆解一下,你的需求是需要一个分布式环境的存储,你的疑问是分布式存储的数据是如何分布并路由的。

    回答你的疑问:数据分布和路由方式有关,广义上数据路由有两种方式,hash 和元数据中心结点。Hash 只需要知道 hash 算法和结点信息(很轻量和简单),根据 hash 算法计算请求的数据在哪个结点(你说的 redis ,以及 memcached 集群、ceph 的 crush ),而元数据中心结点的方式需要你请求元数据结点(一般是集群,元数据集群自己保证一致性,例如 zk ),元数据结点告诉你数据在哪,你再去请求(比如你提到的 tidb ,以及 GFS / HDFS 、HBase 等很多分布式系统)。这些系统本身就是分布式存储系统,自然不需要第三方存储集群(一般不需要)。

    对于你的需求(记录集群链接数),你的服务是无状态的,方案有很多,比如每个实例都可以对外提供链接统计功能,然后一个外部服务遍历请求所有实例,或者不需要外部服务,直接请求任意一个实例,被请求的实例遍历其他实例也行,也可以用一个外部存储系统记录,要求不高的话一个 redis 实例就能满足,要求高的话上 redis 集群
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2632 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:31 · PVG 12:31 · LAX 20:31 · JFK 23:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.