我正在考虑使用apachecassandra创建一个多租户应用程序。我可以想出三个策略:同一密钥空间中的所有租户使用租户特定的字段进行安全保护单个共享数据库中每个租户的表每个租户的密钥空间我脑子里的声音建议我选择第三种。有什么想法和暗示吗?
uurity8g1#
您需要考虑以下几点:选项1:在纯cassandra中,只有通过“proxy”访问数据库时,此选项才起作用,例如,api将强制对租户字段进行过滤。否则,如果您提供cql访问,那么每个人都可以读取所有数据。在这种情况下,您还需要小心地创建数据模型,将租户作为复合分区密钥的一部分。datastax enterprise(dse)具有称为行级访问控制(rlac)的附加功能,允许在表级设置权限。选项2和3:非常相似,只是当每个租户有一个键空间时,就可以灵活地设置不同的复制策略—这对于将客户的数据存储在绑定到不同地理区域的不同数据中心非常有用。但在这两种情况下,集群中表的数量都有限制——合理的表数量大约是200个,“硬停止”的数量超过500个。原因是,您需要额外的资源(如内存)来为每个表保留辅助数据结构(bloomfilter等),这将消耗堆内存和堆外内存。
ezykj2lf2#
我已经在零售领域大规模地做了几年了。因此,我认为,在Cassandra处理多租户的建议方法是,不要。不管你怎么做,租户都会受到“吵闹邻居”问题的打击。只要等到一个租户运行一个批处理更新,将60k个写操作批处理到同一个表中,其他人的性能就会下降。但更大的问题是,您无法保证每个租户的读写比率都是相似的。事实上,他们可能会有很大的不同。对于选项1和选项2来说,这将是一个问题,因为磁盘iops将到达同一目录。选项3实际上是唯一可行的方法。不过,所有这一切都需要一个考虑不周的批写粉碎所有人。另外,要升级您的群集吗?现在你必须和多个团队协调,而不是一个团队。使用ssl?确保多个团队获得正确的证书,而不是只有一个。当我们有新的团队使用cassandra时,每个团队都有自己的集群。这样,他们就不会伤害其他任何人,我们可以用更少的问号来支持他们。
2条答案
按热度按时间uurity8g1#
您需要考虑以下几点:
选项1:在纯cassandra中,只有通过“proxy”访问数据库时,此选项才起作用,例如,api将强制对租户字段进行过滤。否则,如果您提供cql访问,那么每个人都可以读取所有数据。在这种情况下,您还需要小心地创建数据模型,将租户作为复合分区密钥的一部分。datastax enterprise(dse)具有称为行级访问控制(rlac)的附加功能,允许在表级设置权限。
选项2和3:非常相似,只是当每个租户有一个键空间时,就可以灵活地设置不同的复制策略—这对于将客户的数据存储在绑定到不同地理区域的不同数据中心非常有用。但在这两种情况下,集群中表的数量都有限制——合理的表数量大约是200个,“硬停止”的数量超过500个。原因是,您需要额外的资源(如内存)来为每个表保留辅助数据结构(bloomfilter等),这将消耗堆内存和堆外内存。
ezykj2lf2#
我已经在零售领域大规模地做了几年了。因此,我认为,在Cassandra处理多租户的建议方法是,不要。不管你怎么做,租户都会受到“吵闹邻居”问题的打击。只要等到一个租户运行一个批处理更新,将60k个写操作批处理到同一个表中,其他人的性能就会下降。
但更大的问题是,您无法保证每个租户的读写比率都是相似的。事实上,他们可能会有很大的不同。对于选项1和选项2来说,这将是一个问题,因为磁盘iops将到达同一目录。
选项3实际上是唯一可行的方法。不过,所有这一切都需要一个考虑不周的批写粉碎所有人。另外,要升级您的群集吗?现在你必须和多个团队协调,而不是一个团队。使用ssl?确保多个团队获得正确的证书,而不是只有一个。
当我们有新的团队使用cassandra时,每个团队都有自己的集群。这样,他们就不会伤害其他任何人,我们可以用更少的问号来支持他们。