У меня есть проблемы с производительностью, и мне нужны предложения, которые лучше всего подходят для 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 Вот.