gpt4 book ai didi

java - Zookeeper 读取的数据与文档不完全一致,但创建 znode 是否完全一致?

转载 作者:行者123 更新时间:2023-12-02 10:25:28 24 4
gpt4 key购买 nike

以下是我的假设/疑问。如果我的理解有错误请指出

通过阅读文档,我了解到

  1. Zookeeper 向 Leader 写入数据,然后将其复制到 Follower。读取请求可以由跟随者(从属)本身提供。因此读取可能会过时。
  2. 为什么我们不能使用zookeeper作为缓存系统?
  3. 由于写入请求始终发出/重定向到 Leader,这意味着节点创建是一致的。当两个客户端发送相同节点名称的写入请求时,其中一个总是会收到错误(NodeExistsException)。
  4. 如果上述情况成立,那么我们可以使用 Zookeeper 通过使用 requestId 创建 znode 来跟踪重复请求。
  5. 为了在分布式系统中生成序列号,我们可以使用顺序节点创建。

最佳答案

根据问题和评论中提供的信息,基本问题似乎是:在无状态多服务器架构中,如何最好地防止数据重复,这里的数据是“这笔退款处理了吗?”

这属于“主要基于意见”。有多种方法可以做到这一点,但没有一种方法是最好的。您可以使用 MySQL 来完成,也可以使用 Zookeeper 来完成。

现在是纯粹的观点和猜测:

要处理退款,必须有某个数据库?为什么不直接检查一下呢?您正在准备的重复请求场景似乎很少发生 - 这种情况每秒不会发生数百次。如果是这样,那么这种情况就不能保证高性能的实现。只需进行数据库查找就可以了。

您的工作负载与读:写的比例似乎是1:1。每次处理退款时,您都会检查退款是否已处理,如果未处理,则进行处理并进行记录。现在 Zookeeper 本身 says它最适合读:写10:1比率。虽然 MySQL 没有可用的此类指标,但它不需要为 Zookeeper 为写入 Activity 做出某些*保证。因此,我希望,它对于纯写密集型负载来说应该更好。 (* 顺序性、广播、共识等保证)

只是一个挑剔,但您的数据是数百(数千?数百万?)交易 ID 的线性列表。这正是 MySQL(或任何数据库)及其主键的构建目的。 Zookeeper 是为更复杂/更强大的分层数据而设计的。你不需要。

关于java - Zookeeper 读取的数据与文档不完全一致,但创建 znode 是否完全一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53984837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com