Репликация кучи JVM между двумя машинами - программирование

Репликация кучи JVM между двумя машинами

Каковы основные принципы того, как два разделяемых компьютера, подключенных к одной и той же сети с одним и тем же Java-приложением, поддерживают одно и то же состояние, синхронизируя их кучу между собой?

Я верю, что Terracotta выполняет эту задачу, но я понятия не имею, как выглядит какой-то псевдо-код, который описывает его основные функции.

Я просто ищу понимание этой технологии.

4b9b3361

Ответ 1

Terracotta DSO работает, манипулируя байтовым кодом ваших классов (и классов JDK и т.д.). Инструкции о том, как и когда делать это, являются частью файла конфигурации Terracotta.

Модификация байт-кода ищет определенные байтовые коды, такие как чтение или запись поля, или вход для входа или выхода монитора. Всякий раз, когда выполняются эти инструкции, в этом месте добавляется код, который выполняет соответствующее действие в распределенном хранилище. Например, когда монитор получается из-за синхронизации, получается распределенная блокировка (независимо от того, является ли это блокировкой чтения или записи в зависимости от конфигурации). Если поле в общем объекте записано, распределенная система должна проверить, что блокировка записи удерживается, а затем отправляет значение данных, отправляется на кластерный сервер, который хранит его на диске или совместно использует его по сети.

Обратите внимание, что Terracotta не разделяет всю кучу, а только график объектов, указанных конфигурацией. В общем, было бы мало смысла делиться всей кучей. Вместо этого лучше использовать приложение для описания объектов домена, необходимых для распределенного приложения.

Существует множество оптимизаций, чтобы сделать операции выше эффективными: только полевые дельта отправляются по проводу и в форме, намного более эффективной, чем Java-сериализация, многие дельта могут быть объединены и отправлены пакетами, блокировки на самом деле "проверены" "для конкретного клиента, так что, если данные приложения разделены по клиентам, большинство распределенных блокировок на самом деле являются локальной операцией, не связанной с сетевым вызовом и т.д.

Ответ 2

Terracotta действительно может справиться с этим, если вы скажете это - см. описание его DSO - распределенные общие объекты.

Звучит круто, но я бы предпочел нечто вроде EHcache (может быть снова поддержан Terracotta), который функционирует на более высоком уровне.

Ответ 3

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

AFAIK, там нет зрелого решения, но это многообещающе.

Ответ 4

Я бы рекомендовал вам изучить http://www.jboss.org/infinispan и посмотреть, не выполнит ли он ваши потребности.