Lucene Solr - многоядерный или множественный экземпляр для разных документов схемы

У меня есть проблемы с производительностью и хотел предложения, которые лучше всего подходят для Multi Core или же Multi Instance(with different port)?

Мой случай первый:

  • В настоящее время я использую Solr с несколькими ядрами и работает нормально. Есть только одна проблема, которая иногда выдает "из кучи памяти при обработке полей фасетов", после чего мне нужно перезапустить solr. (Чтобы минимизировать количество перезапусков, я запускаю Solr с большим объемом памяти: java -Xms1000M -Xmx8000M -jar start.jar)

  • У меня есть экземпляр Amazon EC2 с 8core-2,8 ГГц /15 ГБ оперативной памяти с оптимизированным жестким диском.

  • У меня есть много таблиц базы данных (около 100), и я должен создать разные схемы для каждой (приводит к созданию разных ядер).

  • Каждая таблица имеет миллионы документов, с 7-9 проиндексированными полями и 10-50 сохраненными полями на документ.

  • Мои веб-порталы должны обрабатывать очень высокий трафик (в настоящее время у меня 10 запросов в секунду, может увеличиться до 50-100 в секунду). Я знаю, что "Solr" справится с этим, но я просто хочу сообщить вам, что меня беспокоит каждая маленькая проблема с производительностью.

  • Поиск Solr с помощью PHP и CURL в конкретном ядре, поэтому нет проблем с поиском и на другом экземпляре Solr.

Вопрос:

Насколько мне известно, Solr обрабатывает один запрос за раз. Поэтому я думаю, что если я создаю несколько экземпляров solr и запускаю их на разных портах, тогда мой веб-портал может обрабатывать больше запросов одновременно. (если пользователь ищет в другой таблице).

Итак, что вы мне предложите? Многоядерный в одном экземпляре Solr? или несколько экземпляров с одним / двумя ядрами в каждом?

Есть ли проблема с несколькими экземплярами Solr, работающими на разных портах?

ПРИМЕЧАНИЕ. Здесь я могу / могу / буду комбинировать менее изученное ядро ​​(ядра)/ маленькое ядро ​​(я) в одном экземпляре И ядро (я) с интенсивным трафиком в отдельном случае ИЛИ два-три с интенсивным трафиком ядро в одном экземпляре и т. д. Так как создание разных экземпляров для каждой таблицы (~100 здесь) потребует слишком много аппаратных ресурсов.

1 ответ

Решение

Solr может обрабатывать несколько запросов одновременно.

Я проверил это, выполнив длинный запрос [qTime=7203, ок. 7sec] и несколько маленьких запросов после длинного [qTime=30], Solr сначала отвечает на меньшие запросы, даже если они выполнялись после длинного запроса.

Этот момент дает много оснований в ответе: использовать один экземпляр Solr с несколькими ядрами. Просто назначьте высокую память JVM.


Другие пункты:

1. Каждому экземпляру solr потребуется ОЗУ, поэтому для запуска нескольких экземпляров потребуется больше ресурсов, что будет дорого. И если вы используете facets, sort fields тогда вам нужно выделить больше оперативной памяти для каждого экземпляра.

Как вы можете видеть в моем случае, мне нужно запустить Solr с большим объемом памяти (8 ГБ). Вы можете увидеть случай с датским веб-архивом, который использует несколько экземпляров и выделяет 9 ГБ ОЗУ для каждого с совокупным объемом 256 ГБ ОЗУ.

2. Вы можете запустить несколько экземпляров Solr на разных портах с помощью команды java -Djetty.port=8984 -jar start.jar, Все прошло нормально, но у меня есть одна проблема.

Во время индексации это может привести к "ошибке памяти недостаточно", и тогда экземпляр Solr будет уничтожен. Поэтому вам нужно запустить второй экземпляр с большим объемом памяти, что приведет к увеличению потребности в оперативной памяти.

3. Solr Resource Requirement и Performance проблема можно понять здесь. Согласно этой 64-битной среде и 12 ГБ ОЗУ рекомендуется для хорошей производительности. Оптимизация Solr объясняется здесь.

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