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

Mongodb 如何使用NoSQL(Cassandra)实现客户端身份验证解决方案?,mongodb,cassandra,nosql,Mongodb,Cassandra,Nosql,我目前正在考虑如何使用NoSQL解决方案为web应用程序实现身份验证。我在此遇到的问题是,在大多数NoSQL解决方案(例如Cassandra、MongoDB)中,可能都延迟了写入。例如,我们在节点A上写入,但不能保证写入同时出现在节点B上。这与NoSQL解决方案背后的方法是合乎逻辑的 现在有一个想法是,您不进行二次读取(因此所有内容都经过主控)。这可能适用于MongoDB(实际上有一个主节点),但不适用于Cassandra(所有节点都相等)。但是,我们的应用程序在世界各地的几个独立点运行,因此我

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

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

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


谢谢你的帮助

关于Apache Cassandra:

ConsistenceLevel是一个枚举,它根据模式定义中的内容控制读写行为。不同的一致性级别有不同的含义,这取决于您是在执行写操作还是读取操作。请注意,如果W+R>ReplicationFactor,其中W是写入时要阻止的节点数,R是读取时要阻止的节点数,那么您的行为将非常一致;也就是说,读者总是会看到最近的文章。其中,最有趣的是执行仲裁读取和写入,这可以提供一致性,同时在面临节点故障时仍然允许高达复制因子一半的可用性。当然,如果延迟比一致性更重要,那么可以对其中一个或两个使用较低的值

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

  • ANY:确保写入操作已写入至少1个节点,包括HintedHandoff收件人
  • 第一:在响应客户机之前,确保已将写操作写入至少1个副本的提交日志和内存表
  • 仲裁:在响应客户端之前,确保已将写操作写入N/2+1副本
  • 本地仲裁:确保已将写操作写入本地数据中心内的/2+1节点(需要NetworkTopologyStrategy)
  • 每个仲裁:确保写入已写入每个数据中心的/2+1节点(需要NetworkTopologyStrategy)
  • 全部:在响应客户端之前,确保已将写操作写入所有N个副本。任何无响应的副本都将使操作失败
阅读

  • 任何:不支持。你可能想要一个
  • 一:将返回第一个副本返回的记录以进行响应。一致性检查始终在后台线程中进行,以修复使用ConsistenceLevel.ONE时的任何一致性问题。这意味着即使最初读取的值较旧,后续调用也将具有正确的数据。(这称为ReadRepair)
  • 仲裁:将查询所有副本,并在至少报告了大多数副本(N/2+1)后返回具有最新时间戳的记录。同样,将在后台检查剩余的复制副本
  • LOCAL_QUORUM:在本地数据中心内的大多数副本回复后,返回带有最新时间戳的记录
  • EACH_QUORUM:在每个数据中心内的大多数副本回复后,返回带有最新时间戳的记录
  • ALL:在所有副本回复后,将查询所有副本并返回带有最新时间戳的记录。任何无响应的副本都将使操作失败
好的,这将是满足要求的一种方法。现在,我们必须了解如何在每个数据中心处理此问题,以便数据主要保留在首选数据中心。请阅读Cassandra的网络拓扑策略。。这会帮你解决问题。更新的文档链接: