Как использовать AtomicLong в подсистеме Hazelcast CP всего с двумя узлами кластера Hazelcast?

Я обновляюсь до последней версии Hazelcast [3.12] и сталкиваюсь с проблемой получения экземпляра AtomicLong. В новой версии HZ вводится концепция теоремы CAP, чтобы обеспечить согласованность и допуск раздела, но проблема в том, что подсистема CP должна иметь как минимум 3 члена.

Config config = new Config();
config.getCPSubsystemConfig().setCPMemberCount(3);
config.getCPSubsystemConfig().setGroupSize(3);

HazelcastInstance instance1 = Hazelcast.newHazelcastInstance(config);

Как я могу настроить подсистему CP, чтобы предоставить мне экземпляр atomicLong всего с двумя узлами Hazelcast?

Если я запускаю свое приложение только с одним узлом, выводится следующее сообщение:

MetadataRaftGroupManager.log: 65 [127.0.0.1]: 6000 [dev] [3.12] Подсистема CP ожидает подключения трех членов к кластеру. Текущее количество участников: 1

У меня будет только два узла, поэтому подсистема CP не позволяет мне использовать atomicLong, потому что она будет ждать вечно по крайней мере 3 узла.

Версия 3.11, которую я только что назвал hazelcast.getAtomicLong("count"), Как я могу справиться с этим?

1 ответ

Решение

Подсистема CP не может быть сконфигурирована для работы с менее чем 3 узлами, потому что это принесет в жертву "согласованность", которая является всей целью подсистемы CP при некоторых сценариях сбоя (разбиение сети).

Вы по-прежнему можете использовать API 3.11, поэтому код из вашей реализации 3.11 продолжит работать. Хотя API 3.11 помечены как устаревшие, они не удаляются и не отключаются; устаревание - это предупреждение о том, что API-интерфейсы, как известно, уязвимы для проблем согласованности в сценарии с разделением мозгов. Некоторый код приложения терпим к таким проблемам, и уязвимость не является проблемой; если ваше приложение не терпит потенциальной проблемы согласованности с атомарным длинным, то потребуется добавить дополнительный узел для перехода на реализацию CP.

Другие вопросы по тегам