Огромное количество предметов, шард и ява - PullRequest
4 голосов
/ 17 августа 2011

Я новичок в java ee и не знаю, как выполнить конкретное требование.

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

Мой вопрос заключается в том, существует ли подход Java EE для решения проблемы определения местоположения экземпляра объекта, позволяющий клиентам получать ссылку на объект без необходимости знать, на каком компьютере он находится.

Я знаю о JNDI, но я не уверен, что регистрация каждого из объектов в каталоге JNDI является подходящей. Нужно ли мне писать библиотеку «Локатор», которая может узнать о виртуальной машине, к которой принадлежит каждый объект?

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Без более подробной информации, позвольте мне найти несколько путей для исследования.

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

Сама Java EE (как спецификация) не указывает, и эталонная реализация не предоставляет "из коробки"«Решение для массово распределенной кластеризации и шардинга, я думаю, вы ищете.

Glassfish (Java EE RI) сам использует Shoal в качестве инфраструктуры кластеризации, которая может использовать либо Grizzly или JGroups в качестве базовой платформы групповых коммуникаций.

Итак, в вашем конкретном случае я хотел бы рассмотреть вопрос о создании и использовании JGroups для групповых коммуникаций.Затем вместо центрального реестра мы полагаемся на DHT для определения местоположения службы / объекта.Посмотрите, как существующие успешные платформы на основе DHT (memcached, Apache Cassandra) реализуют разбиение и поиск, отказоустойчивость и отработка отказа, и просто адаптируйте / адаптируйте их.Затем вы можете использовать RMI / RPC для вызовов клиент-сервер (сервисный узел).

Надеюсь, у меня есть смысл, и удачи!Если вы сами это раскроете, посмотрите, сможете ли вы открыть его.;)

0 голосов
/ 18 августа 2011

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

Простой пример кода здесь.Вы пишете свои вычисления через класс, который реализует com.tangosol.uti.InvocableMap.EntryProcessor.Это позволит производить расчеты на сервере, где существуют данные.Одно ограничение заключается в том, что данные должны быть сериализуемыми, поскольку они перемещаются по сети.

public class CalcLogic implements EntryProcessor {
....
    //InvocableMap.Entry is the "data"
    //You write your calculation in this process methods.
    public Object process(InvocableMap.Entry entry {
        (YourObjectType) obj = (YourObjectType)entry.getValue();
        //do some calculation against obj here
        entry.setValue(obj);   
        return null;
    }

....
}
...