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

rit*_*rit 2 mongodb cassandra nosql

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

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

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

谢谢你的帮助!

sdo*_*lgy 6

尊重Apache Cassandra:

ConsistencyLevel是一个枚举,它根据模式定义控制读写行为.不同的一致性级别具有不同的含义,具体取决于您是否正在执行写入或读取操作.请注意,如果W + R> ReplicationFactor,其中W是要写入时阻塞的节点数,R是要阻止读取的数字,则将具有强烈一致的行为; 也就是说,读者总会看到最近的写作.其中最有趣的是进行QUORUM读写操作,这样可以保持一致性,同时在面对节点故障时仍然可以使用高达一半的ReplicationFactor.当然,如果延迟比一致性更重要,那么您可以为其中一个或两个使用较低的值.

这是在应用程序端管理的.特别是对于您的问题,它归结为您如何设计Cassandra实现,跨Cassandra节点的复制因子以及应用程序在读/写方面的行为方式.

  • ANY:确保写入已写入至少一个节点,包括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:一旦所有副本都回复,将查询所有副本并返回具有最新时间戳的记录.任何无响应的副本都将无法运行.