Назад | Перейти на главную страницу

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

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

Мой случай сначала:

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

  • У меня есть экземпляр amazon EC2 с 8core-2.8GHtz / 15GB Ram с оптимизированным жестким диском.

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

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

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

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

Вопрос:

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

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

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

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

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

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

Этот пункт дает много оснований для ответа: Используйте один экземпляр solr с несколькими ядрами. Просто назначьте High memory JVM.


Прочие пункты:

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

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

2. Вы можете запустить несколько экземпляров solr на разных ПОРТАХ с помощью команды java -Djetty.port=8984 -jar start.jar. Все работало нормально, НО у меня возникла одна проблема.

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

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