RMI - это API программирования сети Java, который использует JRMP protocol. Если мы анализируем пакеты с Wireshark, это показывает, что для установления связи между клиентом и сервером для протокола JRMP требуется как минимум 2 обмена сообщениями.Возможно ли использовать RMI с балансировщиком с круговым распределением в распределенной среде?
Подробнее: Первый запрос обмена - это этап согласования, второй обмен запросами - шаг lookup()
, тогда другие обмены запросов - это вызовы удаленной процедуры (когда мы используем методы из нашего класса, который расширяет Remote
). Первый вызов удаленной процедуры содержит имена атрибутов сериализованного класса, если один и тот же метод вызывается во второй раз, будут некоторые оптимизации (для каждого имени атрибута будет использоваться integer
id вместо String
).
Меньше деталей: JRMP является сложным, поскольку ему требуется несколько обменов запросов клиентов и серверов. Для протокола, такого как HTTP, требуется только одно.
Считаем, что мы работаем над облаком, у нас есть несколько узлов с серверами RMI, у нас также есть уравновешивающий баланс нагрузки между клиентами RMI и нашим облаком. Клиент RMI отправляет запрос на согласование, и первый узел получает его, затем балансировщик нагрузки отправляет запрос lookup()
ко второму узлу ... Возможно ли использовать RMI в распределенной среде?
Теоретически, есть ли веская причина в такой ситуации, чтобы не использовать интерфейс HTTP или обмена сообщениями? – chrylis
Привет, да, есть веская причина: если мы хотим использовать синхронную реализацию служебной ориентированной архитектуры (SOA), которая построена на двоичном протоколе (а не на обычном текстовом протоколе, таком как HTTP, который требует больше ЦП для сложных данных). – Gugelhupf
Процессорное время для сериализации/десериализации в наши дни тривиально дешево. Простота отладки стоит накладных расходов. – chrylis