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

时间:2011-10-31 08:29:31

标签: mongodb cassandra nosql

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

现在有一个想法是你没有二次读取(所以一切都超过了主人)。这可能适用于MongoDB(你实际上有一个主人),但不适用于Cassandra(所有节点都相同)。但是我们的应用程序在世界各地的几个独立点运行,因此我们需要多主机功能。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

尊重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:将返回第一个副本返回的记录进行响应。始终在后台线程中执行一致性检查,以在使用ConsistencyLevel.ONE时修复任何一致性问题。这意味着即使初始读取获得较旧的值,后续调用也将具有正确的数据。 (这称为ReadRepair)
  • QUORUM:一旦报告了至少大部分副本(N / 2 + 1),将查询所有副本并返回具有最新时间戳的记录。同样,剩余的副本将在后台进行检查。
  • LOCAL_QUORUM:在本地数据中心内的大多数副本都已回复后,返回具有最新时间戳的记录。
  • EACH_QUORUM:在每个数据中心内的大多数副本都已回复后,返回具有最新时间戳的记录。
  • ALL:一旦所有副本都回复,将查询所有副本并返回具有最新时间戳的记录。任何无响应的副本都将无法运行。