Я участвую в разработке распределенного решения, основанного на RMI, и развернутого на нескольких узлах Weblogic 10gR3 (10.3.0.0). Один из узлов размещает сервер RMI, а другие узлы обращаются к нему через стороннего поставщика JNDI. Пытаясь улучшить нашу инфраструктуру путем добавления дополнительных серверов RMI, мы столкнулись с некоторыми проблемами.
Детали нашей инфраструктуры:
-RMI-сервер работает на управляемом сервере, порт 7005.
-RMI клиенты обращаются к нему через удаленного провайдера JNDI, который указывает на что-то вроде: t3: // имя хоста: 7005
Я публикую то, что мы уже пробовали, при создании дополнительных серверов RMI и почему это не сработало:
1) Использование Amazon ELB -> это не вариант, потому что он требует открытия нашего порта времени выполнения (7005) для всего Интернета, что, очевидно, является недостатком безопасности.
2) Настройка поставщика JNDI с несколькими конечными точками (что-то вроде: t3: // hostname1: 7005, hostname2: 7005), который, по-видимому, работает для очередей JMS -> все запросы были направлены на сервер RMI, работающий на hostname1, а приложение по сути работало нормально. Однако при преднамеренном сбое сервера за хостом hostname1 запросы на hostname2 не направлялись. (Должны ли они вообще быть перенаправлены?)
3) При использовании программного балансировщика нагрузки, такого как HAproxy -> при балансировке по уровню HTTP, запросы интерпретировались как «t3 10.3.0.0», что приводило к ошибке HTTP 502 на HAproxy. При балансировке по уровню TCP мы получили несколько ошибок «отсутствующий объект», как будто одно TCP-соединение использовалось для нескольких HTTP-запросов, а после завершения первого последующие запросы не смогли получить доступ к удаленным объектам ( просто угадаю).
4) Мы не хотели использовать кластерную среду WebLogic.
5) Мы еще не рассматривали использование высокоуровневых фреймворков, таких как spring-remoting-cluster .
Какие-нибудь подсказки / предложения? Заранее спасибо!