Apache Ignite 使用键值 API 的吞吐量瓶颈

问题描述 投票:0回答:1

我使用apache ignite作为内存数据库来提供数据,数据存储为

<Integer, String>
键值格式,每个请求包含一个键列表,我使用
cache.getAll(keys).values()
从 ignite 集群获取所有值的列表。

服务器配置:

  • 点燃版本:GridGain Community 8.8.34
  • ignite集群:4个节点,每个节点有 14 个 CPU 和 100 Gi
  • 缓存:每个节点上复制,每个复制50Gi
  • 我的服务器:点燃胖客户端,总共10个pod, 每个都有 6 个 cpu 和 10Gi 内存。

测试配置:

  • 每个请求的密钥大小为 700 个
  • 响应正文为850kb
  • 5000 个用户,10 spwan 率。

我希望我的应用程序可以支持 50k RPS,但是,对于当前配置,它只能支持 2k RPS,并且响应时间将随着 RPS 的增加而增加。 (经测试,对于我的服务器应用程序,如果没有与 ignite 交互,它可以支持 >100k RPS,所以我认为瓶颈应该在 ignite 一侧)。以下是使用 Locust 的测试指标。

enter image description here

我的服务器应用程序和ignite集群上的cpu和内存使用率低于30%,我想知道ignite上是否有任何任务队列会阻塞缓存获取操作。

performance optimization ignite gridgain throughput
1个回答
0
投票

我不得不问,为什么要使用复制缓存?如果您使用分区缓存,则统计上 1/4 的密钥将驻留在每个主机上。通过这种分布模式,每个主机(及其关联的网络接口)将返回整个数据集的约 1/4。通过复制缓存,每个主机都可以返回所有请求的密钥,因此集群可以执行更多与网络相关的工作!通常,如果您有一个经常在连接中使用的小表,那么您希望使用复制缓存。对于像这样的大表,建议使用分区缓存!希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.