在Cassandra中对多租户数据库推荐的方法是什么?

时间:2018-11-21 07:33:24

标签: cassandra cassandra-2.0 cassandra-3.0 spring-data-cassandra

我正在考虑使用Apache Cassandra创建多租户应用程序。

我可以想到三种策略:

  1. 同一密钥空间中的所有租户都使用特定于租户的字段来确保安全性
  2. 单个共享数据库中每个租户的表
  3. 每个租户的密钥空间

我头脑中的声音暗示我选择了选项3。

思想和含义,有人吗?

2 个答案:

答案 0 :(得分:4)

您需要考虑以下几点:

选项1:在纯Cassandra中,仅当始终通过“代理”访问数据库时,此选项才有效-例如,API将对租户字段强制执行过滤。否则,如果您提供CQL访问,则每个人都可以读取所有数据。在这种情况下,还需要仔细创建数据模型,以使租户成为复合分区键的一部分。 DataStax Enterprise(DSE)具有称为row-level access control (RLAC)的附加功能,该功能允许在表级别设置权限。

选项2和3:非常相似,不同之处在于,当每个租户都具有密钥空间时,您可以灵活地设置不同的复制策略-这对于在绑定到不同地理区域的不同数据中心存储客户数据很有用。但是在两种情况下,集群中的表数量都有限制-合理的表数量大约为200,“硬停止”数量超过500。原因-您需要额外的资源(例如内存)来保持辅助状态每个表的数据结构(bloom过滤器等),这将消耗堆内存和堆外内存。

答案 1 :(得分:4)

我已经在零售空间中大规模进行了几年。因此,我相信 推荐 在Cassandra中处理多租户的方法不是 不是 。无论您如何做,租户都会受到“吵闹的邻居”问题的打击。只需等到一个租户运行一次BATCH更新,并将60k次写入批处理写入同一张表,其他人的性能就会下降。

但是更大的问题是,您无法保证每个租户的读写比甚至达到 >比率。实际上,它们可能会大不相同。对于选项#1和#2来说,这将是一个问题,因为磁盘IOP将进入同一目录。

选项#3实际上是实际可行的唯一方法。但同样,要做的只是考虑不周的BATCH写信而粉碎所有人。另外,要升级您的集群吗?现在,您必须与多个团队(而不是一个团队)进行协调。使用SSL?确保多个团队获得正确的证书,而不只是一个。

当我们有新团队使用Cassandra时,每个团队都有自己的集群。这样一来,他们就不会伤害其他任何人,我们可以为他们提供更少的关于谁在做什么的问号。