Realmente ‘The Mask’ este é um fato importante, pois no meu caso existem cinco dias de pico, e dentre estes um dia especial de muita concorrencia, dentre estes cinco dias, acontece praticamente 90% de todas as requisições, e neste dia especial cerca de 50% das requisições, ou seja, 1 milhão de requisições em um dia. Como você pode observar acredito eu que colocar a aplicação em cluster com load balancer, vai ser a melhor saida para melhorar minha escalabilidade, agora pelo que eu entendi, se eu optar por distribuir meus objetos com suas regras de negocio com EJB, eu ganho em escalabilidade pelo fato de migrar o processamento das regras de negocio para outra máquina, não é isso? ou seja, minha aplicação web ficaria mais leve e portanto teria mais capacidade de suportar maior carga, estou correto? seria somente este o meu ganho com EJB, distribuir objetos para não sobrecarregar o processamento das regras de negocio em um unico lugar?
Além disso, estes objetos distribuidos, poderiam ser clusterizados? ou seja, um mesmo tipo de objeto estar distribuido em varios servidores remotos fazendo um compartilhamento da carga de requisições, desta forma eu diminuo certos gargalos e fico mais seguro caso o servidor do EJB remoto de algum pau, eu já teria o outro assumindo toda a carga.
Sim, você consegue deixar seus objetos distribuídos em máquinas diferentes, somente o negócio, e se por acaso uma máquina de negocio cair a outra assume. Eu utilizei essa configuração por muito tempo, eu tinha 2 apaches, que distribuiam para 4 webcontainers e que distribuiam para 8 ejb containers… funcionou bem … Mas os motivos dessa configuração eram específicos da aplicação e tinha um pouco de política envolvida…
Agora sobre a pergunta de ontem, como identificar se vai ser útil EJB ou não, se é melhor Web Services e tals…
Bom, Web Services ,na minha opinião, só são bons em B2B e B2C, pois são lentos(protocolos não binários), não tem 2PC e a segurança é precária. Para distribuir processamento acredito que EJB seja uma boa, agora vc fazendo load balance vc tb está distribuindo o processamento ! Agora imagine processos batch disparados por rotinas JMS que consomem quantidades absurdas de memória, seria interessante que essa alocação toda não atrapalhasse as requisições http da parte web, aí vejo uma vantagem em separar o processamento.
Outro caso, em ambientes heterogêneos e com segurança muito alta, imagine o cenário onde vc tem uma máquina AIX que acessa algum recurso específico (storage, hardwares específicos, etc…) e que só de dentro do AIX vc tem acesso, aí voce pode colocar um EJB Container junto no AIX e chamar os processo através de EJB de uma máquina windows que fica em uma rede menos segura.
Imagine empresas distribuídas mundialmente, onde não existe uma centralização de todos os dados, e existem rotinas que devem ser inicializadas por um ponto central, mas rodar em cada filial, assim você também utiliza EJB com chamadas remotas.
Não me lembro de outros exemplos, mas você percebe que são rotinas específicas e que também podem ser feitas utilizando outras tecnologias, RMI, Socket, etc… Mas a idéia é mostrar que com EJB isso já tá pronto, não precisa codificar esses serviços de infra-estrutura para fazer essas chamadas remotas.
Mas como a galera já disse antes, esse tipo de coisa é igual Neston, existem mil maneiras de se fazer, invente a sua