мы разрабатываем архитектуру поиска для корпоративного веб-приложения. Для этого мы будем использовать Lucene.net. Индексы не будут большими (около 100 000 документов), но служба поиска всегда должна быть всегда и всегда быть актуальной. В индекс будут добавлены новые документы и одновременный поиск. Поскольку у нас должна быть высокая доступность для поисковой системы, у нас есть 2 сервера приложений, которые предоставляют службу WCF для выполнения поиска и индексирования (копия службы выполняется на каждом сервере). Затем сервер использует lucene.net API для доступа к индексам.
Проблема в том, что было бы лучшим решением для постоянного поддержания индексов? Мы рассмотрели несколько вариантов:
-
Использование одного сервера для индексирования и наличие второго сервера для доступа к индексы через SMB: нет, потому что мы иметь единственную точку отказа ситуация;
-
Индексирование на оба сервера, по существу, запись каждого индекса дважды: возможно, отвратительная производительность и возможность desync, если, например. индексы сервера 1 ОК и сервер 2 исчерпывает дисковое пространство или что-то еще,
-
Использование SOLR или KATTA для переноса доступа к индексам: нет, мы не можем иметь tomcat или аналогичный запуск на серверах, у нас есть только IIS.
-
Сохранение индекса в базе данных: я нашел, что это можно сделать с помощью java-версии Lucene (модуль JdbcDirectory), но я не нашел ничего подобного для Lucene.net. Даже если это означало небольшой удар производительности, мы пошли бы на эту опцию, потому что это решило бы решить проблему concurrency и синхронизации с мини-разработкой.
-
Использование Lucene.net DistributedSearch Contrib module: я не смог зарегистрировать одну ссылку с документацией об этом. Я даже не знаю, просматривая код, что делает этот код, но мне кажется, что он фактически разбивает индекс на несколько машин, чего мы не хотим.
-
rsync и друзья, копируя индексы назад и вперед между двумя серверами: это кажется хакерским и подверженным ошибкам нам, и, если индексы становятся большими, может занять некоторое время, и в течение этого периода мы будем возвращать коррумпированные или несогласованные данные клиентам, поэтому нам нужно разработать специальную политику блокировки, которую мы не хотим.
Я понимаю, что это сложная проблема, но я уверен, что перед этим столкнулись многие люди. Любая помощь приветствуется!