Artigonal.com - Leia e Publique Artigos
Diretório de Artigos Gratuitos
01.12.2008 Login Cadastro Olá
E-mail:
Senha:
Salve meus dados neste computador 


Problemas com modelos de aplicações web

Por: Caio Azevedo Ranking do Autor Azul | Publicado em: 14-02-2008 | Comentários: 0 | Acessos: 258 | Avaliação:  (142) Ranking do Artigo Azul (?)

Em minhas recentes atividades como arquiteto de soluções .net, deparei em alguns clientes com uma situação no mínimo inusitada. Todos tinham como meta construir suas aplicações seguindo as tecnologias do momento - Multicamadas, Web Services, Orientação a Objetos, etc. E eis que, como tantos outros, insidiam nos mesmos erros - talvez por falta de experiência, maturidade ou mesmo conhecimento, o certo é que, tentar de qualquer forma e a qualquer custo inserir todas, ou pelo menos boa parte dessas tecnologias em seus modelos de aplicação, é uma prática cada vez mais comum no ambiente corporativo, e as consequências podem ser desastrosas, pondo em risco todo o projeto. Deparei com diversas situações, do uso excessivo e indiscriminado de uma tecnologia, à ilusão de se estar utilizado uma delas, a saber - Web Services e Orientação a Objetos respectivamente.

Problemas com modelos de aplicações não são novidades, desde os tempos da fórmula IIS * COM+ * SQL Server, a conhecida arquitetura Windows DNA - deparamos com alguns cenários realmente assustadores, onde na maioria das vezes o grande problema era a utilização do mais velho ainda, paradigma Cliente - Servidor. A seguir temos alguns cenários que certamente estavam fadados ao fracasso:

01. Acesso aos dados [via ADO] diretamente nas páginas, e para piorar, sem preocupação com as propriedades de otimização dos objetos Connection, RecordSet e Command, transformando uma aplicação Web em um típico cliente / servidor com os cursores no servidor [um desastre total];

02. Sub utilização de componentes [Visual Basic 6.0], uma vez que nenhuma das features do COM+ [Pool de Ativação, Controle de Transações, Segurança, etc] eram utilizadas, lhes restando somente a tarefa de executar stored procedures, caracterizando mais um caso de desuso de tecnologia, ou pior a ilusão de um ambiente em 3 camadas, já que as regras de negócio, ou ao menos parte delas, estão em sua implementação.

Consequências

Não dá outra pessoal, clientes vendo seu investimento [tempo e dinheiro] indo para o espaço, todo seu planejamento comprometido porque "o sistema não funciona", um verdadeiro fracasso. Tecnicamente temos alguns sintomas: (para os ambientes descritos)

- Sobrecarga de processamento - ora no IIS [via dllhost.exe], ora no COM+ [com altíssimos tempos de ativação dos componentes]
- Constantes "travamentos" da aplicação, e não menos comum de todas as demais aplicações do servidor.
- Conseqüentemente surge como já cansei de ouvir - "soluções baseadas em COM+ não funcionam.

No "admirável mundo novo" do ambiente .net, as aplicações podem ser modeladas das mais variadas maneiras, bem mais que no mundo DNA [o que sendo bem pessimista, só aumenta as chances de erros], sendo assim, uma boa dica para iniciar a modelagem de uma aplicação .net, seria delimitar todo o cenário, seus pré-requisitos técnico-operacionais, funcionalidades, infra-estrutura do ambiente de produção, políticas de contingência, dentre outras variáveis que certamente induzirão arquitetos, analistas, desenvolvedores, DBAs e a equipe de infra a cometerem erros que podem comprometer todo projeto, a seguir temos alguns casos, facilmente encontrados em qualquer ambiente corporativo.

Como já dissemos, um erro comum no desenvolvimento de aplicações, é a ilusão de se utilizar uma tecnologia/paradigma quando na verdade se está bem longe disso. Já demonstramos um caso quando falamos do mundo DNA 3-tiers, quando apesar dos recursos, a equipe responsável continuava com o paradigma Cliente x Servidor 2-tiers. Nos dias de hoje, o que vemos são aplicações, ditas orientada à objetos com multicamadas, onde não temos qualquer construção com herança de objetos [por exemplo, na implementação de classes proprietárias para repositório de dados - pessoa, cliente, usuário] - um desperdício dos recursos e funcionalidades que a OO disponibiliza. Dentro desse cenário ainda encontramos uma "camada de apresentação" implementada de tal forma que detalhes do banco de dados [string de conexão, nome de tabelas, atributos, etc] precisam ser conhecidas. Ora, uma aplicação multicamadas tem, dentre seus atrativos, prover um considerável nível de abstração entre as camadas o que não é o caso. Assim, em um cenário com esses "detalhes de construção", a aplicação aparentemente OO x Multicamadas, só não pode ser considerada Estruturada, pois a ferramenta de desenvolvimento não permite [qualquer assembly .net precisa de pelo menos uma classe].

Dentre as questões estruturais do desenvolvimento de softwares no nível arquitetural destacamos a escalabilidade [geralmente relacionada ao desempenho] - podendo ser do tipo horizontal ou vertical, e que varia basicamente em função do parque tecnológico disponível e das perspectivas de demanda para a aplicação. Imaginemos uma situação onde, a infra é definida com um pool de 4, 5 servidores potentes, configurados para implementar um Web Farm. Para que modelar uma solução distribuída, com Web Services, "desperdisando" um ou vários desses servidores para "camada de regras de negócio", sob o argumento que estamos diante de uma aplicação n-camadas ? Pois bem, estamos diante de um problema conceitual [sendo bem eufemista] - Aplicações multicamadas, não implicam necessariamente em aplicações distribuídas. Para piorar a situação desse cenário, a comunicação entre as "camadas" é feita com Web Services, um exemplo típico de modismo. Uma modelagem nessa forma tem um custo absurdo e não justificável. A seguir tomaremos esse caso como exemplo, de qualquer forma, não seria mais interessante deixar todos os componentes de regras de negócio no modelo de deploy padrão .net, "folder" bin], assim faríamos melhor uso do ambiente descrito.

Para exemplicar essa terrível tendência, lançarei mão dos Web Services, uma poderosa tecnologia - eu diria que uma das mais importantes desde o advento da internet, no entanto seu uso sem critérios pode ser catastrófico [como no cenário acima]. Os Web Services, como toda grande idéia, prima pela simplicidade, permitindo que funcionalidades, até então restritas à um ambiente fechado [uma intranet por exemplo], estejam acessíveis para todos, em qualquer lugar, por diversos dispositivos e independente das plataformas envolvidas, sendo assim, se você resolver utilizá-los no seu modelo de aplicação antes de mais nada procure dentre esses três itens, uma justificativa para tal. Como nem tudo na vida são flores, os Web Services tem seu custo, para realizar suas proezas ele se basea em três pilares - Serialização, XML e HTTP, o resto são conceitos e siglas, no fundo os Web Services são objetos serializados [Estruturas, DataSets, Arrays, Classes, etc], transmitidos entre as partes [através o já conhecido protocolo HTTP, livre dos firewalls], em um formato de dados que já se tornou padrão e amplamente difundido [viva o XML] e os custos ??? simples, o processo de serializar/deserializar tem seus custos de processamento [o menor de todos é bem verdade], a transmissão dos dados serializados via HTTP fatalmente acarreta um custo elevado, por concorrer com as requisições dos usuário POST/GET de páginas HTML e ASPX e principalmente pelo formato dos dados, XML, que contém um conjunto de metadados para compor as mensagens, tornando-as ainda maiores.

Sendo assim, aquele cenário "distribuído", tendo Web Services como meio de comunicação está deveras comprometido. Uma alternativa para esse ambiente, distribuído e sobretudo interno, seria o uso de Remoting uma tecnologia, que atende a demanda [se considerarmos, a real necessidade de um ambiente distribuído], sem os custos dos web services. Essa proeza é possível pela substituição de tecnologia nos três pilares do Web Service:

- Serialização - No Remoting, em sua melhor configuração para performance, a serialização binária, ao invés da XML é a mais indicada, tornando os dados trafegados significativamente menores. [o remoting também suporta serialização XML]
- HTTP - Aqui substituímos o protocolo de transporte para TCP, em uma porta específica, o que por definição é mais eficaz que o HTTP, além de evitar a concorrência com as aplicações e suas páginas estáticas e dinâmicas.

Pessoal, de maneira alguma sou contra o uso de Web Services, mas sua utilização em um ambiente intra-domínio, com dois ou mais servidores, trocando todo e qualquer tipo de mensagem - operações DML, pesquisas ao banco de dados para carregar controles, instância dos componentes de regras de negócio, entre outras, definitivamente não será bem sucedida quando a demanda atingir um patamar considerável.

A seguir, exemplificaremos dois cenários distribuídos, um como Web Services e outro com Remoting aplicável ao nosso ambiente, não entraremos em todos os detalhes da implementação dos modelos, nossa preocupação aqui é com a arquitetura [mas se precisar é só entrar em contato].

Cenário:

Temos um assembly, componente.dll, com a classe/método que precisamos acessar remotamente, esse método simplesmente executa uma instrução de repetição for 10000000 vezes sem qualquer operação por interação, para o acesso remoto, escreveremos uma "camada" web services e outra remoting que disponibilizarão o método para o cliente.

Modelo Web Services

Para implementação do modelo "Web Services", temos nosso componente, implementado como uma classe qualquer [código 1]. Agora precisamos de um "servidor" e assim teremos a combinação IIS [host] x Web Service [comunicação] - implementado em um arquivo .asmx [código 2] e hospedado em um diretório virtual como uma aplicação Web qualquer, que chamaremos WsRemote, [logo as mensagens trocadas concorrem com as demais aplicações]. Pronto, eis nossa porção "server" do ambiente distribuído desse cenário, onde toda complexidade [serialização, comunicação, listening], são resolvidos pelo IIS, com seu custo é claro.

Atente para criação do objeto e chamada ao seu método.

Preparando Cliente:

Usaremos como cliente uma aplicação console [para simplificar]. Para tal precisamos do que chamamos Proxy do Web Service, que corresponde a uma classe também com os métodos disponíveis no Web Service [muita gente não sabe da existência dessa classe, já que o Visual Studio garante a "transparência"], essa classe é gerada pelo utilitário WSDL , com a seguinte sintaxe: WSDL http://localhost/WSRemote/WebService.asmx, em seguida é só compilar a classe e utilizar o assembly gerado no cliente

Modelo Remoting

Esse modelo é um pouco mais complicado, afinal não temos o IIS para as funcionalidades mais complexas, por isso construiremos o nosso [ou pelo menos uma ferramenta similar e que atenda as funcionalidades que precisaremos].

O princípio aqui é a ativação do objeto [marshal], onde o cliente tem uma referência do objeto remoto - no entanto, ele efetivamente é criado no servidor. Agora precisamos do "servidor" [um elemento em estado de espera, que atenda as requisições dos clientes remotos] - e ai construiremos aquele que corresponde ao IIS [host] do cenário anterior. Nosso remoting server, é um programa executável como outro qualquer que disponibiliza um canal (endereço IP : Porta), além é claro, o nosso componente .

Preparando Server:

Para disponibilizar nosso componente basta compilá-lo, copiar a dll gerada para mesma pasta do servidor [remoteService.exe] e executá-lo - não esqueça de fazer referência à dll na compilação do servidor.

Preparando Cliente:

Novamente nosso cliente é uma aplicação console. Para testá-lo copie o componente para o local do cliente [isso é necessário para referenciar o componente remoto] e o execute [código 6]. Atente que apesar da dll está fisicamente localizada no client sua ativação é realizada no server [comprovado pela execução do construtor do componente informando o número de instâncias].

Ao executarmos os dois cenários, percebemos através dos contadores utilizados, um sensível ganho de performance na versão Remoting, no entanto em um cenário real, onde nosso web service concorre com as demais aplicações web e sobretudo, onde o processamento do componente de negócio é considerável, essa diferença tende a aumentar, e outra, para que utilizar uma tecnologia, se temos alternativas mais elegante e performática ?? - modismo, hábito, facilidade na implementação ?, são nesses "detalhes" que distinguimos bons e maus projetos de software.

Bom pessoal, eis um exemplo dentre tantos outros que encontramos em qualquer ambiente corporativo, muito cuidado com os modelos de aplicação utilizados em seus projetos, façamos uma reflexão no que já temos implementado, como poderíamos modificar, detectando pontos críticos e sugerindo mudanças em próximos projetos, o que não se podemos admitir é a incidência de erros dessa natureza pacivamente.

Avalie este artigo: Current: 5 / 5 stars - 4 vote(s).

Fonte Artigos - Artigonal.com

Imprima este Artigo Imprimir artigo   Envie o Artigos a um amigo Enviar a um amigo   Publique este Artigo no seu site Publique este Artigo   Mande mensagem ao Autor Mensagem ao autor  
Caio AzevedoPerfil o autor:

 

Submeter artigos se tornou um dos meios os mais populares de gerar links de qualidade e tráfego para o seu site. CADASTRE-SE JÁ, É DE GRAÇA!

Comentários

Comente este artigo Comente este artigo
Nome
E-mail:
Comentário
Digite o código de segurança: Captcha


Artigos Relacionados

Fundamentos teóricos sobre C#
Por: Caio Azevedo | 14/02/2008 | Programação
Partiremos dos fundamentos teóricos da tecnologia, e através de exemplos tentaremos prover soluções para as situações do nosso dia a dia. Seria interessante contar com a interatividade de vocês leitores com críticas e sugestões sobre os assuntos abordados.

WEB 3.0: O QUE ESPERAR PARA 2020?
Por: Eduardo Favaretto | 14/02/2008 | Internet
Até 2010 chegaremos à Web 3.0 ou Semântica, anunciada como a terceira onda da Internet, “e de 2010 a 2020 veremos a transição da Web 3.0 para a Web 4.0, cujos benefícios ninguém ainda pode prever”, revela Eduardo Favaretto,do iBUSCAS.

Seo, Otimização De Sites, Mitos, Lendas E Método Científico
Por: Alexis Kauffmann | 05/05/2008 | Marketing na Internet
Uma discussão sobre a formação de mitos no mercado de SEO e como produzir conhecimento realmente útil a longo prazo.

Consultas com JOINS
Por: Thiago Caserta | 11/02/2008 | Informática
Um breve conceito e exemplos práticos das poderosas cláusulas de amarrações entre tabelas, os famosos JOINs (LEFT JOIN, RIGHT JOIN, INNER JOIN e FULL JOIN).

2008: O ANO QUE A PUBLICIDADE DECOLOU NA INTERNET
Por: Eduardo Favaretto | 14/02/2008 | Marketing na Internet
O setor da mídia on-line movimentou cerca de R$ 500 milhões no Brasil e US$ 21 bilhões nos EUA, em 2007, proporcionalmente 7,4% do bolo publicitário de lá e 2,7% do total brasileiro – o que se pode esperar para o ano novo?

Seo E Mídias Sociais: O Casamento Ideal Para O Marketing Na Web
Por: Alexis Kauffmann | 05/05/2008 | Marketing na Internet
Nada como ver números reais para entender porque se fala tanto em SEO e Mídias Sociais na atualidade;

Especial sobre .Net
Por: Caio Azevedo | 14/02/2008 | Programação
Estamos a beira de uma revolução, a plataforma .Net é um fato, boa parte dos desenvolvedores seguirá esse caminho. Enquanto isso na “vida real” nos deparamos todo dia com a boa e velha formula: ASP, VB 6.0/COM+, JavaScript, SQL Server. E é nesse ambiente que tenho dedicado meu tempo nos últimos seis meses, e o que pretendo nesse espaço é compartilhar o que aprendemos nesse período.

MECANISMOS DE BUSCAS: DESCUBRA NOVAS OPÇÕES
Por: Eduardo Favaretto | 14/02/2008 | Internet
Os buscadores mais usados são generalistas: Google, Yahoo, Live Search, ASK, que vasculham a web sem nenhum refinamento apurado e nem restrição aplicada. Na chamada web semântica, surgem mecanismos de busca que requisitam conteúdo interativo em outros formatos além do HTML.

Últimos Programação artigos

Phpmyadmin - Administrando Tabelas
Por: Amilcar Junior | 12/10/2008
Usado no gerenciamento de dados no MySQL administração de banco de dados e tabelas. Vamos nessa matéria abordar o script phpMyAdmin , usado no gerenciamento de dados no MySQL. Para fazer o download da última versão, vá nesse link. Você precisa ter instalado em sua máquina o Servidor Apache, o PHP e o MySQL para usar o phpMyAdmin. Após seu download e tudo funcionando corretamente ...

Mysql - Contruindo Tabelas
Por: Amilcar Junior | 12/10/2008
O uso direto do MySQL dentro do PhpMyAdmin construido tabelas.

Recordset - Dreamweaver Cs3
Por: Amilcar Junior | 12/10/2008
Uso de Recordset para ligar um banco de dados a uma página dinâmica no Adobe dreamweaver.

Segurança - Trocando A Porta Do Sql Server 2000
Por: Tulio Rosa | 24/05/2008
Existem várias configurações que podemos fazer para garantir a segurança do banco de dados, entre elas temos a opção de alterar a porta default utilizada nas conexões, fazendo isso somente as solicitações direcionadas a nova porta terão respostas, as demais receberão erros como se o banco não existisse.

Data Por Extenso
Por: Yunis Carvalho | 15/04/2008
Vamos descrever como colocar a data por extenso em um site e o detalhe é que a data será atualizada automaticamente, de acordo com a data do sistema do servidor que está hospedado o site.

O Porque E Como Do Siw
Por: Ruben Zevallos Jr. | 08/03/2008
Já vi muitos projetos para Internet irem para o buraco, porque o ele teria muito dado dinâmico, relatórios etc, mas foi totalmente guiado por profissionais de design e não de sistemas.

Um Pouco De Siw
Por: Ruben Zevallos Jr. | 08/03/2008
Muitas pessoas já me perguntaram o que é SIW. SIW é a sigla de Sistemas com Interface Web. O SIW é o desenvolvimento de Sistemas normais utilizando a Interface Web, que tem diversas vantagens perante a interface gráfica normal

Como instalar e configurar o Php5 e o Apache
Por: Alexandre Silveira | 21/02/2008
Este artigo trata sobre a instalação e configuração do php5 e o apache.

Mais artigos de Caio Azevedo

Especial sobre .Net
Por: Caio Azevedo | 14/02/2008 | Programação
Estamos a beira de uma revolução, a plataforma .Net é um fato, boa parte dos desenvolvedores seguirá esse caminho. Enquanto isso na “vida real” nos deparamos todo dia com a boa e velha formula: ASP, VB 6.0/COM+, JavaScript, SQL Server. E é nesse ambiente que tenho dedicado meu tempo nos últimos seis meses, e o que pretendo nesse espaço é compartilhar o que aprendemos nesse período.

Fundamentos teóricos sobre C#
Por: Caio Azevedo | 14/02/2008 | Programação
Partiremos dos fundamentos teóricos da tecnologia, e através de exemplos tentaremos prover soluções para as situações do nosso dia a dia. Seria interessante contar com a interatividade de vocês leitores com críticas e sugestões sobre os assuntos abordados.

MSIL - Microsoft Intermediate Language
Por: Caio Azevedo | 14/02/2008 | Programação
Minha proposta nesse espaço inicialmente seria de analisarmos a linguagem C#, sua sintaxe, implementações dos conceitos de orientação a objetos, etc. Para tal ,acredito que a implementação de programas console [aqueles que rodam no DOS], seja a melhor alternativa nesse primeiro momento.

Usando Namespaces profissionalmente
Por: Caio Azevedo | 14/02/2008 | Programação
O que a princípio aparenta ser mais um dos novos conceitos do .net, veremos que o mesmo tem muito a ser explorado, e assim faremos, tentando extrair todo o potencial dessa funcionalidade do Framework, além de aproveitarmos a oportunidade para analisar a diretiva using[Imports, seu correspondente no VB.NET].

Desmistificando as Classes
Por: Caio Azevedo | 14/02/2008 | Programação
A Linguagem C# é totalmente baseada no modelo de programação orientada à objetos, sendo assim, profundos conhecimentos em alguns de seus elementos principais são de fundamental importância para que possamos extrair o máximo do modelo/linguagem, sobretudo aqueles desenvolvedores acostumados com outros modelos tais quais, programação estruturada e orientada à eventos.

Exemplo de otimização de armazenamento de dados
Por: Caio Azevedo | 14/02/2008 | Informática
Esse artigo tem como objetivo propor a solução de um problema no qual deparamos com razoável freqüência, e se você ainda não o teve pela frente, provavelmente ainda o terá especialmente se você desenvolve aplicações comerciais.

Categorias do Artigo





Webmasters

Leitor de RSS
RSS
Links

Business Info

Anunciar