Компания Parallel Universe объявила об открытии под лицензией LGPLv3 системы распределённой памяти Galaxy (in-memory data-grid), предназначенной для создания распределённых приложений, выполняемых на нескольких узлах, обрабатывающих единый массив данных. Galaxy берёт на себя функции распределения объектов данных, хранимых в виде байтового массива, между различными узлами кластера, создавая для запущенного на нескольких узлах приложения иллюзию, что работа ведётся с монолитной областью памяти.

При организации работы распределённой памяти возникает необходимость решения трёх проблем: выбор на каком узле потребуется та или иная порция данных, в ситуации когда все данные не умещаются в памяти одного узла; обеспечение непротиворечивости данных, при том, что один и тот же блок может одновременно обрабатываться и дублироваться на нескольких узлах; защита от потери/повреждения данных в случае сбоя узла кластера или возникновении сетевых проблем.

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

Для оптимизации производительности каждый объект данных ассоциируется с определённым узлом-владельцем, который выбирается по степени интенсивности работы с объектом данных. Когда с объектом работает узел владелец данные обрабатываются локально с минимальными задержками, при обращении к данному блоку с другого узла выполняются дополнительные действия по синхронизации состояния между узлами. В пределах всего кластера гарантируется согласованность всех данных, например, если блок Б изменён после изменения блока А, то гарантируется, что ни на одном узле не может оказаться новый блок А и старый Б. Для обеспечения отказоустойчивости, данные могут дублироваться на дополнительных узлах.

Galaxy не является традиционным хранилищем данных в формате ключ/значения, но при желании может быть использован в качестве низкоуровневого базиса для создания подобных систем и произвольных распределённых структур данных. Кроме того, Galaxy предоставляет средства для обмена сообщениями с гарантированной доставкой и сохранением порядка следования, а также обеспечивает работу сервиса по управлению конфигурацией кластера. Для управления кластером поддерживается интеграция с системами ZooKeeper и JGroups. Для обеспечения постоянного хранения содержимого распределённой памяти может быть использована БД BerkeleyDB и любые SQL СУБД. Код компонентов Galaxy написан на языке Java.

Источник: http://www.opennet.ru/opennews/art.shtml?num=34313