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 объясняется здесь.