я предполагаю, что мы говорим классический Java EE сценарий:
client (usually browser) ----> Servlet ----> EJB ----> DB
В этом случае мы могли бы либо находить Servlet и EJB, либо использовать локальные интерфейсы или иметь сервлет и EJB в отдельных слоях и, следовательно, нужны удаленные интерфейсы - конечно, используя дистанционный интерфейс e потребует дополнительного сетевого хопа, однако он, возможно, может принести пользу.
Рассмотрим сначала масштабирование локального сценария. Двигатель сервлета/EJB иссякает, поэтому мы развертываем еще один, получаем больше энергии (очевидно, какой-то опрыскиватель перед сервлетом должен распределять работу. Нам нужно больше энергии, добавить еще больше уровней Servlet/EJB. Но ...
Предположим, что наш слой EJB действительно очень тяжелый, возможно, выполнив сложное вычисление после сбора данных. Для достижения требуемой производительности мы масштабируем объединенный уровень Servlet/EJB, НО нам не нужны все эти копии движка Servlet, они практически не работают, все работает на уровне EJB, мы без причины потребляем память и другие ресурсы. В таком сценарии использование удаленных EJB может дать нам выигрыш, мы можем развернуть независимо, получать как можно больше копий движка сервлетов и движка EJB, а стоимость удаленного хопа может быть незначительной по сравнению со сложными вычислительными затратами.
Удаленный и локальный не имеет ничего общего с масштабируемостью. Он ссылается только на то, может ли EJB получить доступ к удаленному вызову или к локальному вызову. На практике Remote никогда не используется, но в редких случаях, потому что вся логика обычно находится на одном сервере приложений, поэтому удаленные вызовы добавляют латентность и снижают производительность для общих случаев. –