Выбор функций Hazelcast

У меня есть задача (о ней я расскажу чуть позже) и, насколько я понимаю, Hazelcast — лучший выбор для нее. Но у него так много функций и применений, что я не могу понять, что именно выбрать.

На самом деле задача такова:
У меня есть серверное приложение Java A и серверное приложение Java B. У меня есть несколько серверов Java, некоторые из них содержат экземпляр приложения A, некоторые содержат экземпляр B, некоторые содержат оба.

Мне нужно хранить одну карту между всеми серверами. И A, и B могут вводить карту, а B может читать с карты по ключу.

Итак, я думаю, что мне нужна распределенная карта, но я не могу понять, какие еще функции мне нужны? Какой будет резервная конфигурация? Нужен ли мне распределенный запрос для поиска B по ключу? Нужен ли мне «клиент Hazelcast»?


person Mikhail Ivanov    schedule 21.05.2013    source источник


Ответы (2)


Hazelcast — отличный инструмент. Согласитесь, может быть сложно увидеть то, что вам нужно, но это проще, чем вы думаете :)

Сначала вам нужно запустить один или несколько узлов Hazelcast, чтобы запустить сетку (рекомендуется 2 или более, чтобы обеспечить избыточность).

Вам решать, есть ли у сервера A/B встроенные узлы hazelcast, или если вы запускаете сетку hazelcast извне для сервера A/B и используете HazelcastClient для связи с ним.

Вы лучше всех можете оценить это решение. Вероятно, проще начать с встраивания узла сетки hazelcast в сервер A/B. Если вы обнаружите, что это не работает для вас, запустите отдельную сетку hazelcast и переключитесь на использование HazelcastClient на сервере A/B.

Вам нужно будет настроить некоторые порты для работы вашей сетки, наиболее распространенная конфигурация — это localhost: 5701, а отсюда — дополнительные порты (5702, 5703 и т. д.).

Чтобы распределить ваши данные, это очень просто — настройте карту hazelcast, дайте ей имя и установите количество резервных копий (значение 1 будет в порядке).

Я не вижу, что вам нужен здесь распределенный запрос, так как IMap<K,V> должен дать вам доступ к нужным вам данным.

Это помогает? У вас есть дополнительные конкретные вопросы?

Документация Hazelcast довольно хороша, а также существует активное сообщество пользователей.

Удачи!

person vikingsteve    schedule 21.05.2013
comment
Вопрос об узле и клиенте был именно тем, что мне было интересно... ответ - попробовать..? - person Crowie; 11.09.2013
comment
Точно, и посмотрите, что лучше всего подходит для вашей ситуации. Если вы обнаружите, скажем, что у вас уже запущено 3 стабильных jvms, то может иметь смысл встроить экземпляр Hazelcast в каждый из них. В противном случае очень просто запустить внешнюю сетку из {x} узлов и общаться с ней через HazelcastClient. В настоящее время я склоняюсь к последнему варианту, но вначале первый вариант мне давался легче. - person vikingsteve; 11.09.2013

Стив! Большое спасибо за ваш ответ. Наконец, в своем классе логики я создал синглтон для работы с экземпляром Hazelcast, например

final static String DistributedMapName = "SystemUserActivityMap";
private static HazelcastInstance instance = Hazelcast.newHazelcastInstance();

Я также создал hazelcast.xml, довольно простой

 <network>
            <port auto-increment="true">5701</port>
            <join>
                <multicast enabled="false">
                    <multicast-group>224.2.2.3</multicast-group>
                    <multicast-port>54327</multicast-port>
                </multicast>
                <tcp-ip enabled="true">
                    <interface>127.0.0.1</interface>
                </tcp-ip>
                <aws enabled="false">
                </aws>
            </join>
        </network>
    <map name="SystemUserActivityMap">...

сначала все работало нормально, но позже я заметил в сообщениях журнала ошибок tomcat, что hazelcast время от времени запускает новый порт, поэтому вскоре после запуска это было

Members [1] {
    Member [127.0.0.1]:5701 this
}

теперь это

Members [9] {
    Member [127.0.0.1]:5701
    Member [127.0.0.1]:5702
    Member [127.0.0.1]:5703
    Member [127.0.0.1]:5704
    Member [127.0.0.1]:5705
    Member [127.0.0.1]:5706
    Member [127.0.0.1]:5707 this
    Member [127.0.0.1]:5708
    Member [127.0.0.1]:5709
}

и продолжайте расти... я не понимаю, почему он использует все эти порты на этой машине

person Mikhail Ivanov    schedule 22.05.2013
comment
Михаил, вы несколько раз развертывали веб-приложение на tomcat? И вы развернули и развернули в менеджере tomcat или через авторазвертывание (или как)? У меня есть ощущение, что у вас может быть утечка памяти/потока, когда вы отменяете развертывание, а экземпляр hazelcast не закрывается. Что произойдет, если вы полностью перезапустите tomcat? Пожалуйста, проверьте это и дайте мне знать результат. - person vikingsteve; 23.05.2013