多租户方法的 Apache Ignite 性能
Posted
技术标签:
【中文标题】多租户方法的 Apache Ignite 性能【英文标题】:Apache Ignite performance of multi-tenant approaches 【发布时间】:2016-08-25 07:48:15 【问题描述】:我正在一个项目中工作,该项目必须在缓存中维护大量记录(Apache Ignite),这些记录由公司划分。
例如:
公司;产品;数量
CompA;一种; 15
CompA;乙; 10
组合B;一种; 20
组合B;乙; 12
我怀疑在同一个缓存中创建条目与键(公司 + 产品)附加租户之间的性能,并为每个租户创建一个新缓存,例如:
CacheConfiguration<String, String> cfgCompanyA = new CacheConfiguration<>();
cfgCompanyA.setName("CompanyA");
IgniteCache<String, String> cacheCompanyA = ignite.getOrCreateCache(cfgCompanyA);
CacheConfiguration<String, String> cfgCompanyB = new CacheConfiguration<>();
cfgCompanyB.setName("CompanyB");
IgniteCache<String, String> cacheCompanyB = ignite.getOrCreateCache(cfgCompanyB);
【问题讨论】:
【参考方案1】:我建议为每个租户创建单独的缓存。这两种方法的性能应该没有区别,但数据会更好地相互隔离,从而简化代码。
【讨论】:
【参考方案2】:这取决于您的要求。我不是 Apache Ignite 专家,所以我将在一般层面上解决这个问题。
单独缓存的参数:
访问效率更高,key中没有租户 一个租户的缓存和处理可以共同定位,更容易移动 缓存配置基于每个客户端,使您能够控制保证延迟和每个客户端的资源使用情况反对单独缓存的论点:
共享缓存为您提供可控的最佳资源使用率。如果您为租户提供单独的缓存,即使租户数月未使用您的应用程序,缓存也可能会耗尽资源 如果要动态添加租户,您需要想出一个概念来管理所有缓存配置一个很好的选择是使用两者的混合物:
将租户一直放在缓存键中 实现一个可以获取每个租户数据的缓存池 允许多个缓存池以及将缓存池分配给租户的能力这允许您:
即使有多个租户,也有一个用于开发和(单元)测试的缓存池。简化开发设置。 将高容量租户分配给独占缓存池 将低容量租户分配给共享缓存池,优化资源使用率 新租户从共享池中开始,或者您可能拥有具有其他资源限制的“免费增值”和“试用”池。 低容量租户可以在不更改缓存配置的情况下进出【讨论】:
【参考方案3】:我用这段代码 (scala) 做了一些测试:https://github.com/neoramon/scala-ignite-muiti-tenant 随着更多的 100k 记录开始被租户更有效地使用缓存。
机器: 4核, 8 RAM(堆 4GB) 固态硬盘。
【讨论】:
你能告诉我一些细节为什么使用单独的缓存更好吗?以上是关于多租户方法的 Apache Ignite 性能的主要内容,如果未能解决你的问题,请参考以下文章