Хранение всех экземпляров в памяти графа БД в синхронизации - PullRequest
0 голосов
/ 01 июля 2019

Мы создаем Java-приложение, которое будет использовать встроенный Neo4j для обхода графа.Ниже приведены причины, по которым мы хотим использовать встроенную версию вместо централизованного сервера

  1. Это приложение не является владельцем данных.Данные будут поступать на него через другое приложение.Локальное хранение данных поможет нам в быстром вычислении и, следовательно, улучшит наши API.
  2. Поскольку объем данных слишком мал, мы не хотим поддерживать централизованный сервер, что повлечет за собой дополнительные расходы и обслуживание.
  3. Нет необходимости в дополнительном кеше

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

Мы решили использовать Кафку для решения первой проблемы.Идея состоит в том, чтобы иметь слушателя kafka с другим groupid (чтобы гарантировать, что все получают обновления) во всех случаях.Всякий раз, когда есть обновление, событие будет опубликовано в Кафке.Все экземпляры будут прослушивать событие и будут выполнять операцию обновления.

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

1 Ответ

0 голосов
/ 01 июля 2019

Потребители Kafka чрезвычайно последовательны и надежны, если вы правильно настроили их, поэтому у них не должно быть никаких причин пропускать сообщения, если только нет проблем с инфраструктурой, в этом случае любое решение, которое вы разрабатываетебудут проблемы.Если кластер Kafka исправен (например, по крайней мере одна из копий данных доступна, и по крайней мере кворумские зоокейперы работают и работают), тогда ваши потребители должны получать каждое сообщение из тем, на которые они подписаны.Потребитель будет обрабатывать повторные попытки / повторное подключение, пока ваши настройки тайм-аута / повторных попыток являются нормальными.Конфиги по умолчанию в последних версиях kafka соответствуют 99% времени.

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

...