我使用apache ignite作为内存数据库来提供数据,数据存储为
<Integer, String>
键值格式,每个请求包含一个键列表,我使用
cache.getAll(keys).values()
从 ignite 集群获取所有值的列表。
服务器配置:
测试配置:
我希望我的应用程序可以支持 50k RPS,但是,对于当前配置,它只能支持 2k RPS,并且响应时间将随着 RPS 的增加而增加。 (经测试,对于我的服务器应用程序,如果没有与 ignite 交互,它可以支持 >100k RPS,所以我认为瓶颈应该在 ignite 一侧)。以下是使用 Locust 的测试指标。
我的服务器应用程序和ignite集群上的cpu和内存使用率低于30%,我想知道ignite上是否有任何任务队列会阻塞缓存获取操作。
我不得不问,为什么要使用复制缓存?如果您使用分区缓存,则统计上 1/4 的密钥将驻留在每个主机上。通过这种分布模式,每个主机(及其关联的网络接口)将返回整个数据集的约 1/4。通过复制缓存,每个主机都可以返回所有请求的密钥,因此集群可以执行更多与网络相关的工作!通常,如果您有一个经常在连接中使用的小表,那么您希望使用复制缓存。对于像这样的大表,建议使用分区缓存!希望有帮助。