Ферма серверов Lucene.net / несколько серверов

До этого я не задумывался об этой проблеме, поскольку размещал приложение только на одном Windows Server 2008, а lucene.net хранит индекс на своем локальном жестком диске.

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

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

Один из вариантов для меня - соединить два сервера и сопоставить их с общим сервером, на котором хранятся индексы, но является ли это предложенным решением?

Как вы, ребята, справились с анализом и индексацией lucene.net в среде фермы серверов?

большое спасибо

2 ответа

Мы синхронизируем наши серверы с балансировкой нагрузки, каждый из которых имеет свою собственную копию Lucene, - это выполнение задачи на каком-либо другом сервере, который выполняется каждые 5 минут и дает команду каждому серверу с балансировкой нагрузки обновить свой индекс до определенной отметки времени.

Например, задача отправляет отметку времени "12/1/2013 12:35:02.423" на все серверы с балансировкой нагрузки (задача отправляет отметку времени через строку запроса на веб-страницу на каждом сайте с балансировкой нагрузки), затем каждый Сервер использует эту временную метку для запроса базы данных обо всех обновлениях, которые произошли с момента последнего обновления до этой временной метки, и обновляет свой локальный индекс Lucene.

Каждый сервер также хранит метку времени в БД, поэтому он знает, когда каждый сервер последний раз обновлялся. Таким образом, если сервер переходит в автономный режим, когда он возвращается в оперативный режим, в следующий раз, когда он получит команду метки времени, он получит все пропущенные обновления, пока он был в автономном режиме.

Вы можете отделить механизм индекса Lucene от вашего веб-приложения, создав службу, предоставляющую функциональные возможности, что-то вроде службы WCF или Rest.

Вы также можете использовать уже существующие поисковые серверы.

http://lucene.apache.org/solr/

http://www.elasticsearch.org/

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