Разработка системы для обновления записи в двух системах: параллельной или последовательной?

#elasticsearch #solr #architecture #system-design

#elasticsearch #solr #архитектура #system-design

Вопрос:

У нас есть система, которая хранит данные в RDBMS. Доступ к этим данным осуществляется через пользовательский интерфейс или приложение. По мере масштабирования системы увеличивается задержка извлечения этих данных.

Для масштабирования системы и улучшения возможностей поиска мы планируем также хранить эти данные в Elastic Search или SOLR. Новые данные будут вставлены в основную систему и будут отправлены в ES / SOLR через Kafka. Приложение / пользовательский интерфейс получит эти данные из ES / SOLR.

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

  • Если обновление отправляется в основную систему, а затем передается ES через Kafka, может возникнуть задержка, и пользовательский интерфейс / приложение могут получить устаревшие записи из-за этого.

  • Если обновление отправляется параллельно в обе системы, проблема с устаревшей записью будет решена. Но как обрабатывать исключение, когда обновление в одной из систем завершается неудачей, а другие проходят?

Ответ №1:

Механизм защиты приложений должен вам помочь. Попробуйте Netflix hystrix.

Шаги:

  1. Получите существующую запись, которая вот-вот будет обновлена.
  2. Выполнить выполнение библиотеки hystrix:
    • Обновите запись в RDBMS. При сбое генерирует исключение с кодом. Допустим, здесь используется code1.
    • Обновить запись в ES. При сбое генерирует исключение с кодом. Допустим, здесь используется code2.
  3. Выполните запасной вариант, если при выполнении возникают исключения:
    • Если code1, верните исключение вызывающему клиенту.
    • Если code2, верните (обновите) значение в RDBMS к более старой записи.

Netflix hystrix в основном предоставляет всевозможные функции для механизма защиты приложений. Попробуйте.

Комментарии:

1. Заданный вопрос не относится к варианту использования Hystrix.