Jag*_*gan 4 cassandra cassandra-2.0 spring-data-cassandra cassandra-3.0
我正在考虑使用 Apache Cassandra 创建一个多租户应用程序。
我可以想到三个策略:
我脑海中的声音建议我选择选项 3。
想法和影响,有人吗?
您需要考虑以下几个因素:
选项 1:在纯 Cassandra 中,此选项仅在始终通过“代理”访问数据库时才有效 - 例如,该 API 将强制对租户字段进行过滤。否则,如果您提供 CQL 访问权限,那么每个人都可以读取所有数据。在这种情况下,您还需要仔细创建数据模型,将租户作为复合分区键的一部分。DataStax Enterprise (DSE) 具有称为行级访问控制 (RLAC) 的附加功能,允许在表级别设置权限。
选项 2 和 3:非常相似,除了当每个租户有一个键空间时,您可以灵活设置不同的复制策略 - 这对于将客户数据存储在绑定到不同地理区域的不同数据中心很有用。但在这两种情况下,集群中的表数量都有限制——合理的表数量在 200 左右,“硬停止”超过 500。原因——你需要额外的资源,比如内存,来保持辅助每个表的数据结构(布隆过滤器等),这将消耗堆内存和堆外内存。
我已经在零售领域大规模地这样做了几年。所以我认为在 Cassandra 中处理多租户的推荐方法不是。无论你怎么做,租户都会受到“吵闹的邻居”问题的打击。只需等到一个租户运行 BATCH 更新,将 60k 写入批量写入同一个表,而其他所有人的性能都会下降。
但更大的问题是,您无法保证每个租户甚至具有相似的读写比率。事实上,它们可能会大不相同。这对于选项 #1 和 #2 来说将是一个问题,因为磁盘 IOP 将进入同一目录。
选项#3 确实是它实际可行的唯一方法。但同样,只需要一次考虑不周的 BATCH 写入就可以粉碎所有人。另外,想要升级您的集群吗?现在,您必须与多个团队进行协调,而不仅仅是一个。使用 SSL?确保多个团队获得正确的证书,而不仅仅是一个。
当我们有新团队使用 Cassandra 时,每个团队都有自己的集群。这样,他们就不会伤害其他任何人,我们可以用更少的问号来支持他们,谁在做什么。
| 归档时间: |
|
| 查看次数: |
1744 次 |
| 最近记录: |