Кластерное взаимодействие

Приложение Jmix может быть развернуто в кластере из нескольких связанных серверов для распределения нагрузки, повышения надежности и оптимизации использования ресурсов. Раздел Кластер Kubernetes предоставляет практическое руководство по развертыванию в кластере.

Данный раздел содержит информацию о том, какие механизмы Jmix участвуют в кластерном взаимодействии и какие базовые технологии при этом используются. Это может быть полезно для устранения неполадок и для реализации альтернативных методов взаимодействия в кластере.

Подсистемы Jmix требуют наличия двух различных методов взаимодействия: общего кэша и обмена сообщениями. Оба используются через высокоуровневые абстракции, которые могут иметь различные реализации. Реализация по умолчанию - Hazelcast.

Общий кэш

Общий кэш используется следующими функциями Jmix:

Все эти механизмы зависят от API Spring Cache и JCache. В качестве примера на следующей диаграмме показаны классы, участвующие в кэшировании запросов:

jmix cluster cache.drawio

Класс StandardQueryCache использует Spring Cache для большинства операций. Он также использует JCache через вспомогательный класс CacheOperations для итерирования по кэшу, поскольку Spring Cache не предоставляет такой возможности.

Другие перечисленные выше функции Jmix используют общий кэш таким же образом.

Проект приложения должен предоставить реализацию JCache для Spring Cache. Например, чтобы использовать Hazelcast, достаточно добавить зависимость:

build.gradle
implementation 'com.hazelcast:hazelcast'

и определить свойство:

application.properties
spring.cache.jcache.provider = com.hazelcast.cache.HazelcastMemberCachingProvider

Обмен сообщениями

Обмен сообщениями используется следующими функциями Jmix:

  • Кэш сущностей - для распространения изменений в кэшированных сущностях.

  • Notifications - для отсылки уведомлений в приложении.

Эти функции зависят от абстракции Spring Messaging: интерфейса SubscribableChannel. Jmix предоставляет реализации этого интерфейса, делегируя работу ITopic Hazelcast:

jmix cluster messaging.drawio

Эти реализации автоматически создаются в приложении, если в проект добавлена зависимость от Hazelcast.

Если вы хотите использовать другого поставщика обмена сообщениями, создайте свои собственные Spring-бины, реализующие интерфейс EclipseLinkChannelSupplier для кэша сущностей и интерфейс InAppSubscribableChannelSupplier для уведомлений.