Do Windows DNA para o mundo orientado a serviços : cada caso é um caso?

Olá pessoal, tudo certo?

A partir dos últimos emails, tive uma grande discussão com o amigo Rogério Cordeiro (aqui do MSDN) sobre o uso de WCF, WF e outros frameworks na evolução de arquiteturas WinDNA usadas em algumas aplicações típicas. Cenários como Internet Banking, Interfaces de Corretoras, Acompanhamento de Pedidos  ou Portais de Comércio Eletrônico são bons exemplos. Ao final da discussão, começamos a traçar um mapa sobre alternativas de arquiteturas e tecnologias para a evolução desse tipo de plataforma.

Se relembrarmos os tempos de Windows DNA - Windows Distributed interNet Applications Architecture (anunciado em setembro de 1999, você se lembra?), a camada de apresentação era implementada em páginas ASP/HTML, enquanto a lógica de negócio era implementada através de componentes COM+, hosteados no COM+ 1.0 do Windows NT 4.0 ou Windows 2000 Server. O controle e a coordenação de transações eram feitos através do MSDTC - Microsoft Distributed Transaction Coordinator e a camada de dados era isolada em servidores dedicados, acessados pelos componentes de negócio. E quando havia transações disparadas na plataforma alta (mainframes), o uso de COMTI e COMAREA era muito comum (saudades de uma TLB ? :)

A figura abaixo representa bem o famoso WinDNA:

image 

Outro ponto importante nessa discussão era o modelo de threads implementado pelo Visual Basic 6.0, grande gerador de componentes COM na época. Tipicamente, VB6 gera componentes STA - Single Thread Apartment, o que provoca o enfileiramente de mensagens devido sua limitação no tratamento de múltiplas chamadas para a mesma thread. O modelo que liberava esse enfileiramento é conhecido como MTA - Multi Thread Apartment, que é obtido em componentes COM implementados em C++ ou agora em .NET.

Um bom artigo sobre o WinDNA está no link abaixo:

Windows DNA Architecture Design: A Scalable, Highly Available Business Object Architecture
Ref.: https://www.microsoft.com/technet/archive/ittasks/deploy/depovg/windna.mspx?mfr=true

E sobre as questões de STA e MTA, veja ainda no artigo:

Understanding COM Apartments
Ref.: https://www.codeguru.com/cpp/com-tech/activex/apts/article.php/c5529

De fato, muitas empresas implementaram os cenários acima em WinDNA e atualmente questionam quais são as alternativas rumo aos novos frameworks da Microsoft.

Mas sobre quais frameworks e tecnologias estamos falando? Vejamos nossas opções:

  • WCF - Windows Communication Foundation (.NET 3.x)
  • WF - Windows Workflow Foundation (.NET 3.x)
  • WPF - Windows Presentation Foundation (.NET 3.x)
  • Windows CardSpace (.NET 3.x)
  • ADO.NET Entity Framework (Beta 3)
  • ADO.NET Data Services (CTP)
  • Microsoft Sync Framework (CTP)
  • ASP.NET MVC Framework (Preview 2)
  • Microsoft ASP.NET AJAX 1.0  

E ainda outras tecnologias como (misturei assuntos de propósito):

  • Virtualização;
  • LINQ to SQL, LINQ to XML, LINQ to Entities, LINQ to Objects;
  • Microsoft Silverlight 2 (Beta 1);
  • SaaS, Web 2.0, SOA, ESB, RIA;
  • IIS 7.0 e o Windows Process Activation Service (WAS);
  • Windows Server 2008, SQL Server 2008;
  • Service Broker, SSIS;
  • Fábricas de Software, Domain-Specific Languages, GAT/GAX;
  • Office Business Application (OBA);
  • e mais recentemente Software + Services (S+S), para ficar em algumas...

Assim, nossa discussão sobre evolução de uma arquitetura WinDNA típica torna-se um grande desafio. Nossas opções de tecnologias tornaram-se mais complexas e diversas nesses útimos 10 anos.

Mas para atacar esse desafio, vamos propor 2 etapas muito básicas. Como primeiro passo, precisamos de algumas questões para um processo de preparação e entendimento de nosso cenário atual. Vejamos:

  • Na evolução de nossa interface ASP, temos espaço para um novo padrão visual, caminhando para interfaces mais ricas (RIA), com interatividade e customização feita pelo usuário (WEB 2.0) e ainda com capacidade para compor funcionalidades de diferentes fontes de dados (Aplicações de Composição ou Mashups)?
  • Quantos componentes de negócio estamos tratando?
  • Conseguimos separar os componentes críticos em desempenho dos componentes de apoio?
  • Estamos utilizando algum framework de desenvolvimento para a construção dos componentes de negócio no WinDNA?
  • Conseguimos construir um inventário completo sobre esses componentes de negócio?
  • Na evolução de nossos componentes de negócio, é possível observar espaço para composição e coordenação de processos, na forma de workflows ou encadeamento de atividades?
  • Existe a necessidade de aplicação de regras de negócio, seja de forma dinâmica ou estática?
  • Na evolução de nossa conectividade com outros sistemas, quais são os cenários de transporte possíveis? Reconhecemos o uso de TCP, Named Pipes, MSMQ e Web Services?
  • Na evolução de nosso consumo de transações na plataforma alta, estamos utilizando chamadas via COMTI ou outros mecanismos de comunicação via APPC ou TCP com aplicações no mainframe?
  • Quais são os bancos de dados envolvidos? Conseguimos identificar um isolamento claro entre camada de negócio e camada de dados? Como está o uso de stored procedures e queries SQL pela arquitetura? Como estão os modelos de dados envolvidos?
  • Qual o inventário de sistema operacional presente na arquitetura atual?
  • Como está a infra-estrutura atual para as questões de disponibilidade da aplicação, como balanceamento de carga, balanceamento de componentes, farm de servidores, clusters, etc.?
  • Como são tratados os demais aspectos da aplicação como transação, recuperação, monitoração, segurança, tratamento de exceções, autenticação, controle de acesso, atualização de versões, etc.?

De fato, as questões acima irão nos ajudar para um maior entendimento sobre a arquitetura atual. Com certeza você irá adicionar novas questões, específicas para sua empresa.

O passo seguinte será mapear os recursos e benefícios de cada um dos novos frameworks Pós-WinDNA, afim de começar o mapeamento de tecnologias que irão oferecer a melhor solução para sua arquitetura. Um exemplo de aplicação seria esse:

image

Ao lado, uma aplicação Web (asp) com componentes COM+ 1.0 e acesso ao banco de dados e mainframe (usando HIS), uma foto tirada durante nossa discussão com o Rogério :-)

Como seria a evolução desse tipo de cenário?

Veremos algumas idéias em breve...

Para finalizar, não devemos esperar soluções mágicas ou soluções únicas para todos os cenários. Cada caso é um caso, sempre!

Esse texto foi só para iniciar a discussão. Vamos continuar o tema em posts futuros, por isso, comentários serão benvindos...

Por enquanto é só! Até o próximo post :)

Waldemir.