Arquitetura para aplicação com acesso web, desktop e móvel

19 respostas
M

Caros amigos,

Estou querendo desenvolver uma aplicação que terá acesso via Web (talvez Flex usando GraniteDS), acesso via desktop (Adobe Ria, ou C++/Objective-C - Windows e Mac OS) e acesso móvel (inicialmente iOS, depois Android). Sendo assim estou com umas dúvidas e gostaria de compartilhar com vocês... e pedir ajuda :)

1 - a melhor solução para manter a grande maioria das regras no lado servidor e ter compatilidade com estas plataformas citadas seria usar webservices? REST + JSON (devido ao iOS)?
2 - para questões de segurança do WS melhor seria usar spring security? Ou outra?
3 - usando REST (no WS) ficaria muito complicado colocar as regras no lado servidor? Afinal de contas só tenho 4 operaçoes (PUT, GET, POST, DELETE).

Estou aberto a sugestões, mas tenho que manter compatibilidade com as plataformas acima.

Abraços a todos.

19 Respostas

K

o que vai ter no seu server , ejb que processa requisição do web service ?

M

Ainda não pensei…rsrs no que está por trás do WS… mas pode ser EJB 3 ou “Spring” mesmo. A questão neste ponto é que vou hospedar a parte servidor no EC2 (AWS) em “perfil gratuito”, ou seja, não sei se terei memória sufucienete para um app server (tipo JBOSS 5 GA), já tentei isso em outro “hospedeiros” e justamente a memória foi a calcanhar de aquiles… com isso já até cogitei em trocar para Spring + Hibernate (MySQL) por usar BEM MENOS memória… mas estou aberto a dicas…rsrs

Abraços.

K

bom, se eu estiver errado me corrija mas o EC2 é gratuito no primeiro ano.
se sua aplicação vai lhe render pelo menos pra pagar o custo dela, nao vejo problemas em usar glassfish ou jboss (com um tunning pra nao comer memoria atoa)
com a spec de webbeans do jee6 vc pode usar tomcat. eu nao gosto do spring pq acho improdutivo a porrada de xml que tem q configurar.

outro ponto é que se vc vai usar web service, acho que a autenticação vai dar trabalho pra voce.

agora pra evitar problemas, eu faria web com jsf ou qualquer coisa que vc domine(jquery, flex). desktop com javafx(aproveita no mac, windows e linux) e o mobile, ta no webservice se usa o que quiser.

ainda acho o cenário bem obscuro pra opinar em arquitetura sem saber mais sobre o sistema, e errar na arquitetura, pode te dar muito mais trabalho la na frente.

M

Na verdade são dois sistemas distintos. Um de controle financeiro pessoal e outro de gerenciamento de projetos. A idéia é que os dois sejam produtivo$… ainda não sei como monetizar… mas isso é para o futuro. Você tocou em um ponto bom, o fato de usar um WebConteiner pode tornar meus custo de manutenção mais baratos, mas fico com certas limitações, já com um AppServer o céu é o limite… mas os custos também.

O cenário de ambas é o seuginte: “aplicação aberta ao público” é so cadastrar e usar… ou seja, a demanda pode ser nehuma :frowning: ou explodir :slight_smile: … o que tenho que ter em mente é o seguinte se a demanda for nenhuma meu custo deve ser pequeno para “manter elas no ar” e se a demanda explodir tenho que ter condições de dar suporte (por isso o cloud). Sendo assim a arquitetura deve ser escalável e de baixo custo… nossa isso é utopia…rsrs

Vamos contiuar a discusão… está boa… duas cabeças pensam melhor que uma :slight_smile:

K

Eu estou fazendo um projeto pessoal que pensei em usar o googleAppEngine(nao gosto das limitaçoes mas é custo zero forever se nao tiver demanda) e o EC2.
Meu projeto é web com modulos free e modulos pagos.
Mesmo que só os módulos free explodam, eu ja sei como monetizar no meu caso.
Claro que eu nao vou ter as integrações que vc tem.
por questões de custo e rapidez para desenvolvimento eu estou optando por tomcat e webbeans, apache click com jquery e openlayers no front-end, postgres e postgis (meu sistema tem gis tb) e talves eu nem use hibernate ou algo do tipo pois preciso de segurança a nivel de linha e acho que o row security level do hibernate só vai complicar.
Autenticação eu nao sei , talves o spring security (usava desde quando era projeto acegi).

No seu caso, eu arriscaria com glassfish, pois o custo de memória e cpu nao é caro no EC2 e vc pode tunar pois vai ter tudo na sua mão.

M

Não tenho nenhuma experiência com o GlassFish, inclusive quando ouvia falar dele era sempre com más impressões, que era lento, “bugado”, etc. mas isso já faz uns 5 anos ou mais, com certeza a Oracle evolui ele e pelo pouco que sei ele também (ou somente???) é a implementação de referência no “JAVA EE”. É isso mesmo?

Ele é menos “consumista” que o JBOSS?

EJB3 roda legal nele? Precisaria de alguma modificação no código do EJB3 para rodar nele?

Em relação ao WS com JSON, estou com receito da questão de só ter 4 operações para fazer tudo, se bem que no FUNDO toda aplicação tipo sistema de informação se baseia em cadastros e recuperação de dados… mas e a parte da lógica do negócio (o filé migno da aplicaçào :slight_smile: ) como posso fazer?

Por exemplo, quero calcular o saldo de uma conta, teria duas formas, um uso o GET para recuperar os lançamentos e deixo o lado cliente calcular, mas ao tenho dosi poréns o cliente deve ser robusto o suficiente para calcular o saldo e ainda teria muito tráfego, o que em uma app móvel é bem ruim. Outra solução, mais lógica e boa, seria colocar a regra de cálculo no lado servidor (o que ainda me trás o ganho de somente ter a regra em um lugar), mas ai qual o operação REST usaria???

K

fala marcelo, como foi o fim de semana ?

la vai as respostas.

sim, ele é a referencia agora e evoluiu bastante.

sim, é menos consumista, mas, você pode dar uma tunada no jboss também. e qanto ao desempenho, o primeiro passo seria colocar a jrockit como jvm ou a jvm da ibm e depois começar os testes.

como é a implementação de referencia, vc nao muda nada, ao contrario do jboss que sempre tem alguma peculiaridade.

eu usaria um get e deixaria o processamento do lado do servidor. como vc pensa em uma aplicação escalável, quanto menos regras do lado do cliente melhor.

F

Sim…esta tem sido a opção arquitetural mais usado.
REST - pela facilidades e leveza, ele assumiu o lugar do SOAP e outros protocolos de chamadas remotas.
JSON - pela facilidades e leveza tb assumiu o lugar do XML.

2 - para questões de segurança do WS melhor seria usar spring security? Ou outra?

Segurança é um assunto muito genérico que envolve 3 níveis - “física”, “rede” e “aplicação”. http://fernandofranzini.wordpress.com/2012/01/03/gerenciamento-de-vulnerabilidades-2011/
O spring security seria usada para nivel de “aplicação”. Mas tem muitas outras opções. Qualquer uma delas funciona - http://fernandofranzini.wordpress.com/2009/09/09/autenticacao-e-autorizacao/

  1. A regra tem que ficar no lado do servidor…caso contrario vc tera problemas de extensibilidade e flexibilidade…
  2. A operações HTTP são suficiente sim…eu não vejo complicação nenhuma. Tudo uma questão de estrutura e organização arquitetural sistemática.

A revista MundoJ Ed 48 publicou um artigo chamado de “Java de Ponta a Ponta” sendo justamente esse exemplo arquitetural que eu acho que seria muito útil para vc

M

E ai pessoal, foi mal não ter respondido antes… legal agora temos mais um na discussão… seja bem vindo Fernando e vamos trocar mais idéias… agora temos dois “senior” na conversa.

Igor, passei o fim de semana literalmente, mais de 40 horas em cima da configuração do EC2, já estou com a instancia configurada com TomCat, MySQL, ip fico, e atendendo por uma url .com.br Vou agora colocar um servidor de versão para o meu código, pensei em Git ou Subversion, ainda ou analisar os prós e contras.

Voltando a nossa discussão sobre a arquitetura… concordo totalmente com você Fernando… REST + JSON está desbancando SOAP + XML. Na questão de segurança a parte física e de rede não posso, nem tenho como, me preocupar, pois vou usar EC2 (AWS). Sendo assim o item segurança se aplica a aplicação (rimo… :))

Concluí o mesmo Fernando, regras somente no lado servidor, senão vou ter trabalho dobrado ou triplicado se começar a “espalhar” as regras pelas diversas plataformas, além de manutenção hercúlea teria especificidade de cada plataforma.

Tenho este exemplar da MundoJ o único porém é que ele é com Androide e quero iniciar com iPhone, pois tenho mais familiaridade com o mundo mobile da Apple.

Quando a lado servidor acho que vou mesmo de EJB stateless… o que acham?

Abraços a todos.

F

Tudo bem…mas arquiteturalmente é a mesma coisa com o mesmo efeito…Hoje, o melhor mesmo é fazer Web Mobile para ter portabilidade para todos os smartphones - http://fernandofranzini.wordpress.com/2012/02/06/nova-tendencia-de-aplicativos-web-mobile/

Sim…De preferencia, Web Profile.

K

sempre usei subversion,clear case e source safe onde trabalhei. dos 3 eu prefiro o subversion, mas pelo que vi e ouvi do git, eu ia de git sem medo.
meu proximo projeto vai ter o git com certeza. ah, aproveita já e cria seu projeto com maven e coloca o hudson pra buildar tudo e rodar seus testes.

foi muito trabalhoso ? voce baixou a imagem do SO instalou as coisas e subiu ? qual SO voce está usando ? e as configurações do dominio ?

eu acho que vc está no caminho, a floresta começou a ser desbravada.

W

kdoigor:
bom, se eu estiver errado me corrija mas o EC2 é gratuito no primeiro ano.
se sua aplicação vai lhe render pelo menos pra pagar o custo dela, nao vejo problemas em usar glassfish ou jboss (com um tunning pra nao comer memoria atoa)
com a spec de webbeans do jee6 vc pode usar tomcat. eu nao gosto do spring pq acho improdutivo a porrada de xml que tem q configurar.

outro ponto é que se vc vai usar web service, acho que a autenticação vai dar trabalho pra voce.

agora pra evitar problemas, eu faria web com jsf ou qualquer coisa que vc domine(jquery, flex). desktop com javafx(aproveita no mac, windows e linux) e o mobile, ta no webservice se usa o que quiser.

ainda acho o cenário bem obscuro pra opinar em arquitetura sem saber mais sobre o sistema, e errar na arquitetura, pode te dar muito mais trabalho la na frente.

Me metendo no meio da conversa… mas qual a porrada de xmls que você tem que configurar com Spring?

E, por curiosidade (se tu puder falar), o sobre o que o seu projeto pessoal? Aquele usando postgis, openlayers e tal…

K

desculpa, foi uma expessão somente, mas aquilo que sai muito do web.xml pra mim ja passa a ser muito. :lol:
a unica vez que tentei usar spring e faz muito tempo mesmo, tinha uns 3 arquivos pra configurar ai eu larguei mao.

cara, nao posso dar detalhes pois perdi um ano comcebendo a ideia e modelando o sistema mas ele tem 4 módulos e um deles usa gis, eu vou georeferenciar o endereco dos usuarios do site e prover pra eles algumas facilidades baseadas na localidade deles. esse e o financeiro são os módulos free do sistema.
vou usar uma instancia do geoserver pra prover os layers e o openlayers pra apresentar na pagina.
outro detalhe é que pra monetizar o site, mesmo que os usuarios só utilizem os módulos free, eu ja tenho um esquema meu de negócio pra monetizar o sistema. (nao vou ficar rico mas pelo menos as fraldas do meu filho que ta chegando eu vou pagar.)

W

3 anos muda muito. :smiley:

Hoje a quantidade de xml é bem menor. Você pode fazer component scanning e anotar as classes que quer usar. Aliás, dá até pra usar configuração programática onde, em várias situações, não há nenhum arquivo xml.

kdoigor:

cara, nao posso dar detalhes pois perdi um ano comcebendo a ideia e modelando o sistema mas ele tem 4 módulos e um deles usa gis, eu vou georeferenciar o endereco dos usuarios do site e prover pra eles algumas facilidades baseadas na localidade deles. esse e o financeiro são os módulos free do sistema.
vou usar uma instancia do geoserver pra prover os layers e o openlayers pra apresentar na pagina.
outro detalhe é que pra monetizar o site, mesmo que os usuarios só utilizem os módulos free, eu ja tenho um esquema meu de negócio pra monetizar o sistema. (nao vou ficar rico mas pelo menos as fraldas do meu filho que ta chegando eu vou pagar.)

Legal cara. Apenas fiquei curioso por que já trabalhei com gis.

K

qdo tiver um tempo eu vou tentar dinovo.
teve uma das empresas que trabalhei em que o gerente achava que xml era a solução para todos os problemas da humanidade.
consequência, ate a renderização de telas tinha que ler um xml(era framework interno). peguei meio que trauma.

M

sempre usei subversion,clear case e source safe onde trabalhei. dos 3 eu prefiro o subversion, mas pelo que vi e ouvi do git, eu ia de git sem medo.
meu proximo projeto vai ter o git com certeza. ah, aproveita já e cria seu projeto com maven e coloca o hudson pra buildar tudo e rodar seus testes.

Acabei optando pelo SVN mesmo… já tenho mais intimidade trabalho com ele a mais de 5 anos…e outra os ganhos que eu teria usando um DVCS são nulos… VCS distribuído… o time inicial é do tipo EUquipe… eu modelo, eu programa, eu gerencio…e ainda sirvo café e faço a limpeza.

Trabalhoso foi e ainda é… não está 100% do jeito que eu quero… mas com a ajuda do Oráculo (ele só não responde qual serão os número da MegaSena da próximo semana :)) achei um e-book FANTÁSTICO… (http://planetatecnologia.com/) é um blog do Roberto Silva e ele e o José Papo fizeram um e-book sobre como montar e configurar um servidor no EC2 do 0 ao 100… e ainda por cima é 0800 o e-book… vale MUITO mesmo assinar a newsletter para receber o e-book.

Só não usei o Route 53 para DNS usei o novo serviço do Resgitro.br mesmo… funciona que é uma beleza, mas você em que conhecer sobre conf de DNS (nada que o Oráculo não lhe ajude).

Hum… :slight_smile: legal… E persistência… adiciono mais uma camada de DAO Genérico ou vou direto do EJB??? (vou usar Hibernate sempre) Já tenho um modelo de DAO genérico que uso em quase todos os meus projetos… é bem legal com anotações próprias, named query, etc…

M

Pessoal,

Andei pensando nesta arquitetura e ainda não estou 100% em relação ao EJB. Andei analisando quais seriam os ganhos de usar EJB ao invés de um framework (sei que são coisas distintas ou até mesmo complementares), o Spring. De cara minha aplicação não terá componentes distribuídos, ela é puramente Web centrada em um "único módulo", a possível "componentização" seria somente por questões de organização, mas tudo vai rodar no mesmo App Server. Outro ponto são "os extras" J2EE (digo extras pq a maioria vê J2EE = EJB), tais como JavaMail, JMS, JNDI a priori não iria usar.

 Sendo assim... pensei... não estou tentando matar uma formiga com um canhão???? Ai pensei no Spring... com ele (e claro mais alguns outros frameworks) consigo quase tudo do J2EE, mas tudo que preciso. Por outro lado se usar diversos frameworks pode (e dará) dores de cabeça para "azeitar" tudo.

 A minha grande questão é um App Server J2EE no EC2 vai con$umir bem :)... (memória e processamento)... agora usando Spring até uma micro instância agüenta o tranco.

 O que vocês acham??? Ó dúvida!!! Help-me!!! :) :) :)
J

Marcelo Magalhaes:
Caros amigos,

Estou querendo desenvolver uma aplicação que terá acesso via Web (talvez Flex usando GraniteDS), acesso via desktop (Adobe Ria, ou C++/Objective-C - Windows e Mac OS) e acesso móvel (inicialmente iOS, depois Android). Sendo assim estou com umas dúvidas e gostaria de compartilhar com vocês... e pedir ajuda :)

1 - a melhor solução para manter a grande maioria das regras no lado servidor e ter compatilidade com estas plataformas citadas seria usar webservices? REST + JSON (devido ao iOS)?
2 - para questões de segurança do WS melhor seria usar spring security? Ou outra?
3 - usando REST (no WS) ficaria muito complicado colocar as regras no lado servidor? Afinal de contas só tenho 4 operaçoes (PUT, GET, POST, DELETE).

Estou aberto a sugestões, mas tenho que manter compatibilidade com as plataformas acima.

Abraços a todos.

Cara, se você usar REST o cliente vai poder ser escrito em qualquer linguagem, pois vai somente precisar trafegar json ou xml.

Fica fácil desenvolver um cliente muito eficiente e leve em c++, pois existem muitas bibliotecas de xml opensource.

M

juliocbq:
Marcelo Magalhaes:
Caros amigos,

Estou querendo desenvolver uma aplicação que terá acesso via Web (talvez Flex usando GraniteDS), acesso via desktop (Adobe Ria, ou C++/Objective-C - Windows e Mac OS) e acesso móvel (inicialmente iOS, depois Android). Sendo assim estou com umas dúvidas e gostaria de compartilhar com vocês... e pedir ajuda :)

1 - a melhor solução para manter a grande maioria das regras no lado servidor e ter compatilidade com estas plataformas citadas seria usar webservices? REST + JSON (devido ao iOS)?
2 - para questões de segurança do WS melhor seria usar spring security? Ou outra?
3 - usando REST (no WS) ficaria muito complicado colocar as regras no lado servidor? Afinal de contas só tenho 4 operaçoes (PUT, GET, POST, DELETE).

Estou aberto a sugestões, mas tenho que manter compatibilidade com as plataformas acima.

Abraços a todos.

Cara, se você usar REST o cliente vai poder ser escrito em qualquer linguagem, pois vai somente precisar trafegar json ou xml.

Fica fácil desenvolver um cliente muito eficiente e leve em c++, pois existem muitas bibliotecas de xml opensource.

Concordo plenamento com você Julio… A base deste arquitetura é exatamente essa, se um dia eu quiser acessar via uma desktopApp em C++ (já usei muita a wxWidgets… muito boa), posso, se quiser acesso via PHP posso… etc… além de outras plataformas…iPad, iPod, Android…etc.

A grande questão agora está no uso de JEE ou Spring. A dúvida surgiu por questões de cu$to do EC2 quando configurado para suportar JEE (GlassFish). A recomendação mínima é de 1GB a padrão 2GB acima disso seria somente em casos extremos. Como uma instância free tem somente 618 MB Ram (ou algo próximo disso, não me lembro) para usar JEE já teria que passar para uma instância paga… mesmo assim acho que (não tenho certeza) Tomcat + Spring rodam em bem menos que 1GB.

Vou fazer uma análise de custo do cloud e volta a postar aqui… Vamos manter o tópico vivo… no fim vou montar um passo-a-passo (how to) de toda esta história.

Abraços a todos.

Criado 13 de julho de 2012
Ultima resposta 13 de ago. de 2012
Respostas 19
Participantes 5