【问题标题】:How to implement client authentication solution with NoSQL (Cassandra)?如何使用 NoSQL (Cassandra) 实现客户端身份验证解决方案?
【发布时间】:2011-10-31 08:29:31
【问题描述】:

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

现在一个想法是你不做二次读取(所以一切都经过一个主人)。这可能适用于 MongoDB(您实际上有一个 master),但不适用于 Cassandra(所有节点都是平等的)。但我们的应用程序在全球多个独立点运行,因此我们需要多主机能力。

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

感谢您的帮助!

【问题讨论】:

    标签: mongodb cassandra nosql


    【解决方案1】:

    关于 Apache Cassandra:

    ConsistencyLevel 是一个枚举,它根据您的架构定义控制读取和写入行为。不同的一致性级别具有不同的含义,具体取决于您是在执行写入操作还是读取操作。请注意,如果 W + R > ReplicationFactor,其中 W 是要在写入时阻塞的节点数,而 R 是要在读取时阻塞的节点数,您将具有高度一致的行为;也就是说,读者将始终看到最新的写入。其中,最有趣的是进行 QUORUM 读取和写入,这可以为您提供一致性,同时在节点故障时仍然允许高达 ReplicationFactor 一半的可用性。当然,如果延迟比一致性更重要,那么您可以为其中一个或两个使用较低的值。

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

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

    阅读

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2018-07-03
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多