Как долго средневзвешенное значение должно занимать Apache Ignite?

В настоящее время я тестирую Appache Ignite для приложения, работающего практически в реальном времени, и простые операции кажутся чрезмерно медленными при относительно небольшом размере выборки. Ниже приводятся подробности настройки и сроки - смотрите 2 вопроса внизу.

Настроить:

  • Режим кэширования: раздел
  • Количество серверных узлов: 3
  • Процессоры: 4 на узел (12)
  • Размер кучи: 2 ГБ на узел (6 ГБ)

Первый вариант использования - это вычисление взвешенного среднего по двум полям объекта с разными скоростями.

Первый способ - выполнить запрос в стиле SQL:

...
query = new SqlFieldsQuery("select SUM(field1*field2)/SUM(field2) from MyObject");
cache.query(query).getAll();
....

Наблюдаемые сроки:

Кэш: 500 000 запросов / секунду: 10
Медиана: 428 мс, 90-й процентиль: 13 929 мс

Кэш: 500 000 запросов / секунду: 50
Медиана: 191 465 мс, 90-й процентиль: 402 285 мс

Очевидно, это ставится в очередь с огромной задержкой (>400 мс), простое средневзвешенное вычисление для одного jvm (4 ядра) занимает 6 мс.

Второй подход заключается в использовании IgniteCompute для широковещательной передачи Callables между узлами и вычисления средневзвешенного значения для каждого узла, снижая у вызывающего абонента, задержку лишь незначительно лучше, пропускная способность улучшается, но все еще находится на непригодных уровнях.

Кэш: 500 000 запросов / секунду: 10
Медиана: 408 мс, 90-й процентиль: 507 мс

Кэш: 500 000 запросов / секунду: 50
Медиана: 114,155мс, 90-й процентиль: 237,521мс

Несколько вещей, которые я заметил во время эксперимента:

  • Замена диска не происходит
  • Процессоры работают до 400%
  • Запрос разделен на два различных взвешенных средних (карта уменьшена)
  • Записи равномерно распределены по узлам
  • При каждом размере кучи около 500 МБ сборка мусора не запускается

На мои вопросы:

  1. Ожидаются ли эти сроки или есть какие-то очевидные условия, которые я пропускаю? Я не смог найти ориентиры для подобных операций.
  2. Каков рекомендуемый метод для выполнения вычислений в стиле fork-join при включенном зажигании без перемещения данных?

1 ответ

Эта тема подробно обсуждалась на форуме пользователей Apache Ignite: http://apache-ignite-users.70518.x6.nabble.com/Ignite-performance-td6703.html

Другие вопросы по тегам