#elasticsearch #solr #architecture #system-design
#elasticsearch #solr #архитектура #system-design
Вопрос:
У нас есть система, которая хранит данные в RDBMS. Доступ к этим данным осуществляется через пользовательский интерфейс или приложение. По мере масштабирования системы увеличивается задержка извлечения этих данных.
Для масштабирования системы и улучшения возможностей поиска мы планируем также хранить эти данные в Elastic Search или SOLR. Новые данные будут вставлены в основную систему и будут отправлены в ES / SOLR через Kafka. Приложение / пользовательский интерфейс получит эти данные из ES / SOLR.
Теперь приложение и пользовательский интерфейс могут обновлять эти данные. Мне нужны входные данные о том, как спроектировать этот поток обновления.
-
Если обновление отправляется в основную систему, а затем передается ES через Kafka, может возникнуть задержка, и пользовательский интерфейс / приложение могут получить устаревшие записи из-за этого.
-
Если обновление отправляется параллельно в обе системы, проблема с устаревшей записью будет решена. Но как обрабатывать исключение, когда обновление в одной из систем завершается неудачей, а другие проходят?
Ответ №1:
Механизм защиты приложений должен вам помочь. Попробуйте Netflix hystrix.
Шаги:
- Получите существующую запись, которая вот-вот будет обновлена.
- Выполнить выполнение библиотеки hystrix:
- Обновите запись в RDBMS. При сбое генерирует исключение с кодом. Допустим, здесь используется code1.
- Обновить запись в ES. При сбое генерирует исключение с кодом. Допустим, здесь используется code2.
- Выполните запасной вариант, если при выполнении возникают исключения:
- Если code1, верните исключение вызывающему клиенту.
- Если code2, верните (обновите) значение в RDBMS к более старой записи.
Netflix hystrix в основном предоставляет всевозможные функции для механизма защиты приложений. Попробуйте.
Комментарии:
1. Заданный вопрос не относится к варианту использования Hystrix.