Image

Imageupstartn wrote in Imageru_java

framework for transparent scaling

Честно говоря, задача довольно стандартная, даже приходилось решать похожие, но для специфических ситуаций. Не оставляет ощущение, что, возможно, уже есть готовый фрейвфорк для решения такого рода задач в общем случае.

Итак, есть некоторый интерфейс

interface IDataServer
{
void startListening(String name);
void stopListening(String name);
Snapshot getSnapshort(String name);

class Snapshot implements Serializable
{
//...
}
}

Метод startListening инициирует подписку на данные от некоторого удаленного источника для данного имени и начинает их обрабатывать определенным образом, по мере поступления. Метод getSnapshort позволяет получить накопленную информацию в некотором виде. Вызов приводит к отписке от удаленного источника и прекращению обработки для данного имени.
Данных на каждое имя приходит довольно много поэтому экземпляр класса, реализующий данный интерфейс, инстантиирован в отдельном процессе (на отдельном сервере) и доступен по RMI. К сожалению, в некоторых деплойментах имен, которые надо обрабатывать, очень много и хочется разнести это на несколько серверов, т.к. один не справляется, причем сделать это прозрачно для пользователя, т.е. такой себе transparent scaling.
В качестве самодельного решения видится что-то типа такого. Есть специальный router и satellites, реализующие интерфейс IDataServer. Router, как и каждый satellite, это отдельные процессы. "Клиент" обращается исключительно к router, который решает, какой satellite отдать на обработку это имя. Можно использовать как round-robin так и простой load-balancing по количеству обслуживающися имен, для определения, какой satellite выбрать. Алгоритм будет pluggable, так что - не принципиально. Понятно, что надо корректно обрабатывать остановку работающего или запуск нового satellite. После перезапуска router долже восстанавливать у себя данные о satellites и какой из них обслуживает какие имена.

Соответственно вопрос, есть ли готовые фреймворки предоставляющие необходимую функциональность. Т.е. я хотел бы реализовать только IDataServer и, скажем, алгоритм выбора satellite из имеющихся, а остальное получить готовое. :)

Да, естественно речь о Java. Если быть точным - Java SE.