Нужна консультация по архитектуре приложения.Рекомендации по решению с использованием кэша HazelCast
Я работаю над приложением, использующим Hazelcast как Caching Solution. Технология Stack для приложения включает в себя Hibernate, Spring. Моим требованием является то, что конечные пользователи должны иметь возможность получать данные из кэша. Как часть процесса загрузки данных; все таблицы сбрасываются один за другим в Hazelcast в их соответствующих кэшах
Данные, необходимые конечным пользователям, обрабатываются формой данных, то есть данными после соединения таблиц на основе столбцов внешнего ключа. Это соединение выполняется путем запроса кэша с использованием Predicates. После манипулирования кешем, данные должны быть созданы и представлены пользователю. Мне нужен совет по настройке архитектуры приложения, чтобы он был масштабируемым. Ниже приведены подходы, о которых я могу думать.
a) Создайте экземпляр кластера HazelCast (Hazelcast.newHazelcastInstance()) и пусть он запускается на JVM. Пусть разные конечные пользователи подключаются к экземпляру, используя «hazelCastClient» (HazelcastClient.newHazelcastClient (clientConfig)), работающий на своих клиентских машинах и получающий данные из кэша, манипулирует им на клиенте и использует его. В свое время около 150 клиентов могут запрашивать кеш, что означает, что мне нужно сделать 150 соединений hazelCastClient. Кажется, это шея бутылки. Пожалуйста, предлагайте, может ли возникнуть проблема с большим количеством подключений или нет?
b) Создайте экземпляр кластера HazelCast (Hazelcast.newHazelcastInstance()) и пусть он запускается на JVM. Создайте REST-сервер, работающий на отдельной JVM, и получив объект hazelCastClient и позвольте всем конечным пользователям попасть на сервер REST и получить ответ как JSON. Я могу манипулировать данными как часть REST-вызова и представлять управляемые данные как выходные данные для конечных пользователей. Поскольку сервер REST имеет соединение hazelCastClient, он может подключаться к кластеру HazelCast, работающему на разных JVM, и запрашивать его. Я могу масштабировать его с помощью «n» серверов REST, работающих за балансировщиком нагрузки, где каждый сервер REST поддерживает соединение с кластером. Проблема заключается в том, что у этой архитектуры есть два перелета: один от конечного пользователя до сервера REST, а другой - от сервера REST (хостинг hzCastClientConnection) до кластера HazelCast. Также, если несколько запросов попадают на сервер REST, может ли несколько запросов быть сервером одним клиентом Connection?
Любой другой подход, за которым я могу следовать?
Hi. Спасибо за ваш ответ. Итак, вы говорите, что у REST Server есть экземпляр hazelCastClient, и конечные пользователи попадают на сервер REST, который по очереди попадает в HazelCast и получает информацию из Cache? Разве это не содержит два хмеля? Разве не рекомендуется, чтобы конечные пользователи непосредственно держали экземпляр HazelCastClient, и они напрямую разговаривают с кэшем? – ankurlu
Зависит от того, что такое «конечный пользователь». Внешняя система, возможно, не (безопасность) - внутренняя система, конечно, почему бы и нет. Я просто взял «REST API», потому что он упоминался раньше :) – noctarius