gpt4 book ai didi

mongodb - 如何使用 NoSQL (Cassandra) 实现客户端身份验证解决方案?

转载 作者:可可西里 更新时间:2023-11-01 09:58:25 26 4
gpt4 key购买 nike

我目前正在考虑如何使用 NoSQL 解决方案为 Web 应用程序实现身份验证。我在此遇到的问题是,在大多数 NoSQL 解决方案(例如 Cassandra、MongoDB)中,可能会延迟写入。例如,我们在节点 A 上写入,但不能保证写入同时出现在节点 B 上。这与 NoSQL 解决方案背后的方法是合乎逻辑的。

现在的一个想法是您不进行二次读取(因此一切都经过母版)。这可能适用于 MongoDB(您实际上有一个主节点),但不适用于 Cassandra(所有节点都相等)。但是我们的应用程序在世界各地的几个独立点运行,因此我们需要多主控能力。

目前我不知道 Cassandra 的解决方案,我可以在其中更新数据并确保后续读取(对所有节点)确实有更改。那么,如何在身份验证请求(读取)可以并行出现在多个节点上的那些 NoSQL 解决方案之上构建身份验证呢?

感谢您的帮助!

最佳答案

关于 Apache Cassandra:

The ConsistencyLevel is an enum that controls both read and write behavior based on in your schema definition. The different consistency levels have different meanings, depending on if you're doing a write or read operation. Note that if W + R > ReplicationFactor, where W is the number of nodes to block for on write, and R the number to block for on reads, you will have strongly consistent behavior; that is, readers will always see the most recent write. Of these, the most interesting is to do QUORUM reads and writes, which gives you consistency while still allowing availability in the face of node failures up to half of ReplicationFactor. Of course if latency is more important than consistency then you can use lower values for either or both.

这是在应用程序端管理的。具体到您的问题,归结为您如何设计 Cassandra 实现、跨 Cassandra 节点的复制因子以及您的应用程序在读/写时的行为方式。

Write

  • 任何:确保写入已写入至少 1 个节点,包括 HintedHandoff 接收者。
  • 一:在响应客户端之前,确保写入已写入至少 1 个副本的提交日志和内存表。
  • QUORUM:确保在响应客户端之前写入已写入 N/2 + 1 个副本。
  • LOCAL_QUORUM:确保写入已写入本地数据中心内的/2 + 1 个节点(需要 NetworkTopologyStrategy)
  • EACH_QUORUM:确保写入已写入每个数据中心的/2 + 1 个节点(需要 NetworkTopologyStrategy)
  • ALL:确保在响应客户端之前写入所有N个副本。任何无响应的副本都将导致操作失败。

Read

  • 任何:不支持。你可能想要一个。
  • ONE:将返回第一个响应的副本返回的记录。当使用 ConsistencyLevel.ONE 时,一致性检查总是在后台线程中完成,以修复任何一致性问题。这意味着即使初始读取的值较旧,后续调用也将具有正确的数据。 (这叫做 ReadRepair)
  • QUORUM:将查询所有副本并在至少报告了大多数副本 (N/2 + 1) 后返回具有最新时间戳的记录。同样,将在后台检查剩余的副本。
  • LOCAL_QUORUM:一旦本地数据中心内的大多数副本已回复,就会返回具有最新时间戳的记录。
  • EACH_QUORUM:一旦每个数据中心内的大多数副本已回复,就会返回具有最新时间戳的记录。
  • ALL:将查询所有副本,并在所有副本都回复后返回具有最新时间戳的记录。任何无响应的副本都将使操作失败。

关于mongodb - 如何使用 NoSQL (Cassandra) 实现客户端身份验证解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7951310/

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