2015-10-23 1 views
3

Нужна консультация по архитектуре приложения.Рекомендации по решению с использованием кэша 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?

Любой другой подход, за которым я могу следовать?

ответ

1

Рекомендуемая настройка для Hazelcast обычно представляет собой разделенный клиент кластера + для подключения к этому кластеру. Таким образом, вы можете масштабировать серверы REST API и кеши независимо.

Существует нет необходимости иметь узел Hazelcast, работающий локально для подключения, поскольку не все узлы имеют все данные. Это означает, что есть шанс, что вы получите кругооборот в любом случае.

В зависимости от частоты изменений в данных кэша (в настоящий момент это звучит довольно стабильно), вы можете активировать ближайший кэш в клиенте, чтобы локально использовать самые последние или часто используемые элементы (они автоматически недействительны, когда данные изменение, однако оно добавляет немного шанса прочитать устаревшие данные за короткий промежуток времени).

Надеюсь, это поможет.

+0

Hi. Спасибо за ваш ответ. Итак, вы говорите, что у REST Server есть экземпляр hazelCastClient, и конечные пользователи попадают на сервер REST, который по очереди попадает в HazelCast и получает информацию из Cache? Разве это не содержит два хмеля? Разве не рекомендуется, чтобы конечные пользователи непосредственно держали экземпляр HazelCastClient, и они напрямую разговаривают с кэшем? – ankurlu

+0

Зависит от того, что такое «конечный пользователь». Внешняя система, возможно, не (безопасность) - внутренняя система, конечно, почему бы и нет. Я просто взял «REST API», потому что он упоминался раньше :) – noctarius

0

В дополнение к надстройке, если целью является то, что только один экземпляр Hazelcast работает на всех серверах или один за JVM, оба они хороши.

например.если в вашем кластере есть 3 сервера приложений, создавая экземпляр для JVM &, данные копируются по звукам лучше. & на сервере приложений все приложения (WAR/EAR) могут использовать данные из своего собственного экземпляра.