Você está na página 1de 40

Aprenda a disciplina,

busque a arte e contribua THE


com idéias no:
www.ArchitectureJournal.net
Recursos nos quais você
ARCHITECTURE
pode confiar.
JOURNAL
Idéias para melhores resultados
TM

Journal 12

Arquitetura para a Web


Web 2.0 na Empresa
Distribuição eficiente de
software por meio de
plataformas de entrega
de serviços
Comunicação segura
de domínio cruzado no
navegador
Um modelo orientado
a aplicativo para
dados relacionais
Perfil do Architecture
Journal: Pat Helland
Segurança dos Dados
na Web
Add-ins gerenciados:
controle de versões e
hospedagem confiável
THE
Sumário ARCHITECTURE
JOURNAL TM

Idéias para melhores resultados

Journal 12

Apresentação 1
por Simon Guest

Web 2.0 na Empresa 2


por Michael Platt
Descubra os elementos de tecnologia, dados e pessoas de uma arquitetura Web 2.0 e como podem ser usados dentro
e fora da empresa.

Distribuição eficiente de software por meio de plataformas de


entrega de serviços 7
por Gianpaolo Carraro, Fred Chong e Eugenio Pace
Explore o uso de uma plataforma de entrega de serviços que permite a distribuição eficiente de software para a Web.

Comunicação segura de domínio cruzado no navegador 14


por Danny Thorpe
Os navegadores atuais trabalham com eficiência através de vários domínios. Conheça uma técnica nova para desenvolver
sites da Web que podem compartilhar informações.

Um modelo orientado a aplicativo para dados relacionais 19


por Michael Pizzo
Com freqüência, o formato dos dados de um banco de dados não corresponde ao aplicativo que deve interagir com eles.
Veja como um modelo conceitual pode ser usado para superar essa questão.

Perfil do Architecture Journal: Pat Helland 26


Pat Helland é um arquiteto da equipe do Visual Studio da Microsoft. Saiba tudo sobre sua carreira e o que ele pensa de
tornar-se um arquiteto.

Segurança dos dados na Web 30


por Peter Hammond
Existem muitos padrões para a troca de dados pela Web. Saiba quais as recomendações e ciladas a evitar, conhecendo
várias experiências.

Add-ins gerenciados: controle de versões e hospedagem confiável 33


por Jesse Kaplan
Conheça alguns dos conceitos arquiteturais avançados do próximo lançamento do .NET Framework, compatível
com um modelo add-in flexível e confiável.

Recursos nos quais você pode confiar. www.architecturejournal.net


Fundador
Arvindra Sehmi
Microsoft Corporation
Editor-chefe
Simon Guest
Microsoft Corporation
Apresentação
Conselho Editorial Microsoft
Gianpaolo Carraro
John deVadoss
Neil Hutson
Eugenio Pace
Javed Sikander
Philip Teale Caro Arquiteto,
Jon Tobey
Editor
Lisa Slouffman
Microsoft Corporation B em-vindo à Edição 12 do Jornal. Nesta oportunidade, o tema é "Arquitetura para a
Web". Estou certo, não preciso dizer-lhes qual o nível de importância alcançado pela
Web para os arquitetos, nos últimos anos, em quase todas as organizações. Todavia,
Design, impressão e distribuição
depois de falar com muitos sobre projetos para a Web, surge uma idéia principal comum:
CMP Technology – Editora a necessidade de adaptar, adotar princípios arquiteturais de bom resultado no passado e
Chris Harding, diretor administrativo
refatorá-los para a Web. Assim, tentei manter essa informação em mente ao selecionar os
Angela Duarte, gerente de publicação
Lisa Broscritto, gerente de projeto artigos para esta edição.
Kellie Ferris, diretor corporativo de
serviços criativos Liderando a edição com o tópico do Web 2.0 na empresa temos o retorno do autor
Jimmy Pizzo, diretor de produção Michael Platt. Michael discute alguns dos princípios relativos à tecnologia, aos dados e às
pessoas do Web 2.0, colocando esses dados em um mapa para saber como podem ser
Diagramação, finalização e impressão (BR)
utilizados, dentro e fora da empresa. Depois do artigo do Michael, Gianpaolo Carraro,
Arthéria Comunicação & Multimídia
www.artheria.com.br Fred Chong e Eugenio Pace apresentam o conceito de uma plataforma de entrega de
serviços. Continuando com o trabalho realizado no espaço do SaaS, Software como
Serviço, eles abordam o que é necessário para concretizar a distribuição eficiente de
software pela Web, atualmente. Danny Thorpe da equipe do Windows Live vem a seguir,
® com um artigo que explora algumas das complexidades da comunicação em domínio
cruzado no navegador. Utilizando uma analogia original, Danny analisa um conjunto de
As informações contidas neste The Architecture Journal (“Jornal”) técnicas que podem ser usadas para superar esse desafio. Temos ainda o excelente artigo
têm finalidade informativa, apenas. As matérias do Jornal não de Michael Pizzo sobre um modelo orientado a aplicativo para dados relacionais. Com os
constituem a opinião da Microsoft Corporation (“Microsoft”) nem
da CMP Media LLC ("CMP") e, tampouco, são recomendações da
dados representando uma parte considerável de muitos aplicativos da Web, o Michael
Microsoft ou da CMP; assim sendo, você não deve confiar em nos leva a conhecer alguns dos desafios atuais dos esquemas de banco de dados e
nenhuma das matérias deste Jornal sem solicitar o aval de um aplicativos, apresentando um framework para melhor integrar esses dois elementos.
consultor independente. A Microsoft e a CMP não fazem
declarações nem oferecem garantias quanto à exatidão ou Na introdução que fiz para a última edição, mencionei um ex-colega, Pat Helland. Para
adequação para determinada finalidade de qualquer matéria deste
Jornal e, em nenhuma circunstância, nem a Microsoft, nem a CMP esta edição, encontrei-me com Pat, que recentemente voltou para a Microsoft como
aceitará responsabilidade de qualquer tipo, inclusive arquiteto da equipe do Visual Studio. Perguntei ao Pat sobre a função que irá
responsabilidade por negligência (salvo em caso de danos físicos desempenhar e, também, sobre alguns de seus pitorescos pensamentos sobre o que
ou morte) com relação a quaisquer tipos de perdas ou danos
(incluindo, mas não se limitando, aos casos de perda de negócios,
significa tornar-se um arquiteto. Depois da entrevista com Pat, temos um artigo escrito
de receita, de lucros ou prejuízo imprevisto) resultantes do uso das por Peter Hammond. O texto do Peter nos permite percorrer os últimos 10 anos,
informações deste Jornal. O Jornal pode ter imprecisões técnicas e analisando algumas questões sobre dados, vividas por muitas pessoas, e apresenta,
erros tipográficos. O Jornal pode ser atualizado periodicamente e,
também, uma técnica atual para a troca de dados confiável pela Web. Para fechar esta
às vezes, poderá estar desatualizado. A Microsoft e a CMP não se
responsabilizam pela atualização das informações deste Jornal edição, temos o privilégio de ter um artigo escrito por Jesse Kaplan. Jesse nos guia
nem por deixar de fazê-lo. Este Jornal contém matérias através de algumas das considerações arquiteturais do próximo lançamento do .NET
encaminhadas e criadas por terceiros. Até o máximo permitido Framework e apresenta um modelo para criação de add-ins confiáveis e flexíveis.
pela lei aplicável, a Microsoft e a CMP isentam-se de todas as
responsabilidades por qualquer ilegalidade decorrente de erro,
omissão ou imprecisão deste Jornal; além disso, a Microsoft e a
Bem, isto completa outra edição. Falando em adaptações, aqui no The Architecture
CMP não se responsabilizam pelas matérias recebidas de terceiros. Journal estamos sempre tentando novas coisas–muitas delas aprendidas com você. Se
As marcas comerciais a seguir são marcas comerciais registradas tiver comentários ou idéias para futuros temas e artigos, não deixe de nos dizer para
da Microsoft Corporation: BizTalk, Microsoft, SharePoint, SQL melhorarmos esta publicação para você. Nosso endereço é
Server, Visual Studio, Windows, Windows NT e Windows Server.
editors@architecturejournal.net.
Quaisquer outras marcas comerciais são de propriedade de seus
respectivos proprietários.
Todos os direitos autorais e outros direitos de propriedade
intelectual das matérias publicadas no Jornal pertencem à
Microsoft Corporation ou estão a ela licenciados. Copiar,
reproduzir, transmitir, armazenar, adaptar ou modificar o layout ou
o conteúdo deste Jornal são ações proibidas, a não ser que haja
autorização prévia, por escrito, da Microsoft Corporation e de cada
um dos seus autores.
Copyright © 2007 Microsoft Corporation. Todos os direitos
reservados. Simon Guest

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 1


Web 2.0 na
Empresa
por Michael Platt

Resumo escrever e ler conteúdo complexo - combinada ao suporte de rede


social e a rápida disseminação do acesso por banda larga - permite a
Recentemente, os modelos antigos que estabelecem como interação das pessoas com a Web, conteúdo online e entre si.
as pessoas publicam e consomem as informações na Web Representando uma mudança fundamental na forma com que as
transformaram-se de modo radical. Em lugar de pessoas interagem com conteúdo, aplicativos e outros usuários, a nova
simplesmente visualizar as informações em páginas da Web Web é uma plataforma para canalizar e promover a inteligência
estáticas, os usuários agora publicam conteúdo próprio nos coletiva. As pessoas já não são mais consumidores de conteúdo e
blogs, em wikis e sites que compartilham fotos e vídeos. As aplicativos, simplesmente: são participantes, criam conteúdo e
pessoas estabelecem colaboração, listas de discussões e interagem com vários serviços e pessoas. Mais e mais pessoas estão
criando blogs, contribuindo para bases de conhecimento como a
comunidades online; combinam dados, conteúdo e serviços
Wikipedia e utilizando tecnologias ponto a ponto (P2P). Algumas
de várias fontes para criar experiências e aplicativos vezes denominado “o efeito da rede”, este aumento na participação e
personalizados. na criação de conteúdo propõe novas oportunidades para envolver o
Comum e coletivamente denominados “Web 2.0”, esses usuário de forma mais profunda e significativa.
novos sites que compartilham áreas de conteúdo, listas de
discussões e colaboração, além de padrões de projeto de Originalmente, Tim O'Reilly assim definiu as características da Web 2.0:
aplicativo ou “mashups” estão transformando a Web de "
Web como plataforma;
consumidor. Representam, também, uma significativa "
Canalizando a inteligência coletiva;
oportunidade para que as organizações construam novos
"
Dados como a próxima característica "Intel inside";
sistemas sociais, baseados na Web de colaboração,
produtividade e de negócio, para aprimorar o custo e
"
Fim do ciclo de lançamento de software;

retorno de receita. "


Modelos leves de programação;
Este artigo examinará como tecnologia, dados e pessoas "
Software acima do nível de um único dispositivo;
reúnem-se para formar a Web 2.0, como a Web 2.0 está "
Rica experiência do usuário.
hoje sendo utilizada no espaço de consumidor e como
essas técnicas e conceitos podem ser usados dentro e fora Essas características podem ser agrupadas em três áreas: o uso da Web
da empresa, para fornecer novas oportunidades de como uma plataforma, a Web como um lugar para ler e escrever
produtividade e negócios. conteúdo complexo e o uso social e colaborativo da Web.

A Web como uma plataforma


Web 2.0 Os sistemas da Web 2.0 usam a Web como uma plataforma, como
Durante a última década, os aplicativos para a Web sofreram uma enorme gama de dispositivos interconectados que podem
mudanças significativas; há dez anos, não havia sites ou aplicativos que fornecer um novo nível de experiência rica e imersiva para o usuário,
permitissem o compartilhamento na Web, apenas sites compostos de um modelo de programação leve e fácil de usar para o desenvolvedor
páginas estáticas ou aplicativos para ecommerce. As empresas que e um mecanismo de implantação rápido e flexível para o fornecedor. A
tinham sites na Web com interface de consumidor podiam se conectar Web 2.0 recria a Internet pelas perspectivas dos usuário,
com consumidores experientes em Internet e usar seus sites na Web desenvolvedor e fornecedor; cada uma delas permite novos e criativos
como canais de comunicação com o mercado e de venda de seus usos da Internet.
produtos; intranets corporativas eram utilizadas principalmente como O conceito do serviço serve de base para todos os sistemas
locais para publicação de notícias e políticas da empresa. Mais conectados, inclusive, obviamente, para a Web 2.0. Um sistema
recentemente, os sites da Web tornaram-se o destino de comunidades baseado em serviço tem como fundamento o princípio da separação
de usuários para criar e compartilhar dados ricos e complexos como de interesses, por meio do uso de baixo acoplamento ou troca de
músicas, imagens, vídeo e para discutir e avaliar esse conteúdo. mensagens. O baixo acoplamento permite a criação da funcionalidade
Este fenômeno foi batizado de “Web 2.0” em um artigo de Tim O'Reilly como um serviço, com distribuição por rede; por exemplo, no mundo
que discutiu o tema embrionariamente, em setembro de 2005, e que da Web 2.0, a funcionalidade diária pode ser fornecida por um
ainda hoje continua em expansão. Em essência, a Web 2.0 é a mecanismo de blog e ser distribuída como um serviço para o usuário
concretização coletiva de que a habilidade de usar a Web para final ou blogger, pela Internet.

2 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Web 2.0 na Empresa

Essa distribuição da funcionalidade de software pela Internet é Existem também conjuntos de tecnologias, além do Ajax, que estão
comumente denominada Software como Serviço (SaaS) e, hoje em dia, aumentando o valor da experiência do usuário em áreas como as
serve de base para a maior parte dos sistemas da Web 2.0. comunicações, voz e vídeo. A troca de mensagens instantâneas (IM) é
Quando consideramos a Internet como uma plataforma, podemos ver intensamente usada nos aplicativos Web 2.0 para fornecer
que ela deve fornecer uma quantidade de elementos importantes de comunicações instantâneas e existe uma ampla gama de agentes e
plataforma como a independência do dispositivo, interface de usuário opções de distribuição disponíveis para os sistemas IM. Os sistemas de
rica e comum, interface de programação comum, a implantação de voz sobre IP (VoIP) permitem a comunicação por voz e teleconferência
software ou serviço e mecanismo de gestão. pela Internet como parte da experiência do usuário. E, por fim, o
Software acima do nível de um único dispositivo fornecimento de vídeo transmitido e armazenado em tempo real refina
Conhecemos muito bem o software em um servidor fornecendo a experiência do cliente.
serviços ao software em um PC (em Windows ou em um navegador), o As amplitude, riqueza e flexibilidade fornecidas por essas tecnologias
qual, então, consome ou exibe esses serviços. Embora este seja um levam a interface do usuário para além de uma IU dinâmica, para uma
modelo com o qual estamos familiarizados, ele não cobre vários casos experiência audiovisual totalmente interativa com novas e poderosas
comuns, como os sistemas P2P ou a distribuição para dispositivos não- formas de interação das pessoas com sistemas e entre si, ainda a serem
PC como players de música, celulares ou dispositivos de navegação. exploradas.
Precisamos de um modelo que inclua esses casos e absorva um nível
Modelos leves de programação
de serviço superior ao básico HTTP para conectá-los: é preciso abordar
Na Web 2.0, os modelos de programação, os conceitos e as técnicas
os conceitos de um serviço de música como os iTunes, Napster ou um
serviço de telefonia como o Skype. Precisamos ter um modelo que são significativamente diferentes daqueles que têm sido usados na
trate do software acima do nível de dispositivo ou serviço único mas empresa. Embora tenham os serviços como base e apóiem-se no
que inclua serviços ricos, de alto nível, interconectando uma malha de conceito de troca de mensagens, utilizam protocolos REST
vários tipos de dispositivos, de modo simétrico. (Representational State Transfer) e têm como ponto central a
simplicidade e a facilidade de uso.
Provavelmente, o melhor exemplo desse tipo de serviço de alto nível é
o Xbox Live: os serviços relativos ao jogo são fornecidos entre A programação da Web 2.0 baseia-se no conceito de separação de
dispositivos de hardware especializados, operando de modo ponto a interesses, usando um modelo de baixo acoplamento, baseado na
ponto. Este modelo é o caso de computação baseada em serviço de troca de mensagens, na parte superior de um conjunto padrão de
uso geral, denominado pela Microsoft como modelo de computação protocolos de comunicação baseados em Internet (HTTP) e,
Software + Serviços. freqüentemente, é chamada de programação RESTful (tranqüila ou
Rica experiência do usuário sossegada, em inglês). Implica atos de distribuição e composição pelos
O valor da experiência rica e imersiva do usuário foi bem entendida no quais os serviços são fornecidos sem conhecimento do seu uso. Isso é
mundo do PC desde o advento do Windows e tem sido, há muitos muito diferente de um sistema convencional orientado a objeto,
anos, o enfoque dos aplicativos baseados em navegador, com transacional e fortemente acoplado. Possui um conjunto diferente de
JavaScript e DHTML apresentados como formas leves de fornecimento benefícios como flexibilidade e rapidez na implementação e desafios,
de capacidade de programação do lado do cliente e enriquecendo a como integridade e gerenciamento.
experiência do usuário no que é comumente denominado “ aplicativos As linguagens (como Perl, Python e Ruby) e os frameworks usados na
ricos para a Internet (RIA)”. Web 2.0 são simples e dinâmicos, facilitando a entrada e a reutilização,
A habilidade da Web para fornecer essa funcionalidade RIA foi em alta produtividade. Os frameworks têm suportes internos para
mostrada pela primeira vez pelo Outlook Web Access (OWA) que usava padrões comuns de projeto, como o MVC (Model View Controller) e
JavaScript e DHTML para fornecer interatividade plena no navegador, metodologias como o ágil desenvolvimento de software. São de rápido
tipo Windows. A coleção de tecnologias usada para fornecer esses aprendizado e uso fácil, e possibilitam produtividade imediata.
sistemas baseados em navegador, ricos e dinâmicos, foi denominada
Os aplicativos da Web 2.0 são, em essência, passíveis de composição e
Ajax, acrônimo de Asynchronous JavaScript and XML. O Ajax não é
aceitam elementos compostos, pois são construídos com modelos
uma tecnologia simples, nem mesmo um conjunto de novas
leves de programação e serviços baseados em padrões; novos
tecnologias mas, sim, várias tecnologias usadas em conjunto, de novas
aplicativos podem ser criados por composição ou "agregando"
formas eficientes, para fornecer a funcionalidade RIA. O Ajax inclui:
aplicativos e serviços atuais. Os mashups acontecem nos locais em que
"apresentação baseada em padrões, usando XHTML e CSS;
aplicativos e serviços são compostos na IU; a composição é o caso mais
"exibição e interação dinâmicas, usando o modelo de objeto de
geral de serviços sendo reutilizados, mas ambos são facilmente
documento; suportados na programação da Web 2.0.
"intercâmbio e manipulação de dados usando XML e XSLT;
Fim dos ciclos de lançamento e implantação de software
"recuperação assíncrona de dados, usando o objeto XMLHttpRequest;
Os conceitos que dão suporte à Web 2.0 revelam um novo equilíbrio
"JavaScript como a metáfora de programação. entre controle/facilidade administrativa de sistemas centralizados e
O Ajax é o componente-chave da maioria dos aplicativos Web 2.0 e flexibilidade/capacitação do usuário com relação aos sistemas
está fornecendo a possibilidade de criar aplicativos Web tão ricos e distribuídos. Por natureza, os aplicativos Web são implantados de
dinâmicos como os aplicativos baseados em Windows - na verdade, modo centralizado e, assim, os serviços centralizados podem gerenciar
estamos vendo, agora, o advento dos aplicativos baseados em Ajax que aplicativos e desktops completos, automaticamente. O SaaS baseia-se
podem trabalhar enquanto desconectados da Internet fornecendo, nesse conceito para apresentar a idéia de entrega de software e
assim, funcionalidade offline similar aos clientes baseados em serviços pela Internet. A Web 2.0 baseia-se no SaaS para apresentar
Windows, como o Outlook. serviços sociais e de conteúdo através do mecanismo de SaaS.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 3


Web 2.0 na Empresa

Este uso do Saas pela Web 2.0 como metodologia de implantação e Precisamos entender os vários níveis de metadados e ter padrões para
lançamento proporciona todas as vantagens bastante conhecidas do o que são os metadados para liberar dados na Web e, especialmente,
Saas: implantação simples, gerenciamento e administração para permitir que aplicativos combinem dados. Esta padronização de
minimizados e, provavelmente o mais importante, atualização metadados na Web é o que a organização Microformats está tentando
ininterrupta. Assim, uma das características mais desejadas da Web 2.0 fornecer.
(e do Saas) é o conceito de que o sistema está em constante A Web social e colaborativa
atualização e aprimoramento, quase sempre em tempo real, O terceiro elemento-chave dos sistemas Web 2.0 é o conceito de
respondendo às solicitações do usuário. Obviamente, o problema redes sociais, comunidade, colaboração e discussão. Naturalmente, as
desta condição de "beta perpétuo" que a comunidade da Web 2.0 pessoas desejam se comunicar, compartilhar e discutir; essa
ainda precisa compreender é o que acontece aos aplicativos ou comunicação é uma parte primordial do entendimento, do
serviços de downstream/offline quando os serviços ou dados aprendizado e da criatividade. O elemento original que a Web 2.0 traz
fornecidos por um aplicativo da Web 2.0 dos quais passaram a são as redes de comunicações sociais e comunitárias as quais, de
depender, desaparecem ou sofrem alterações. modo geral, viabilizam-se pelos blogs, grupos de discussão e wikis. Na
A Web que lê e escreve Web 2.0, a escala abrupta e o número de pessoas na Internet criam
uma "arquitetura participativa" na qual a interação entre as pessoas
A segunda área importante da Web 2.0 é o enfoque nos dados e no cria informações e sistemas que ficam melhor na medida em que são
conteúdo, particularmente a capacidade de as pessoas criarem e mais usados e mais pessoas os utilizam. Esta canalização da
interagirem com conteúdo complexo, em lugar de apenas consumi-lo. inteligência coletiva cria sistemas que possuem mais e melhores
Se a Internet original fornecia acesso de leitura de dados, a Web 2.0 informações do que qualquer pessoa poderia gerar: oferece a
trata, sobretudo, de proporcionar acesso de leitura e escrita a dados "sabedoria das multidões".
de qualquer origem. Esta capacidade que permite a qualquer pessoa
Existem vários tipos de colaboração que podem ocorrer nos sistemas
criar material publicável motivou uma explosão de disponibilidade de
Web 2.0:
conteúdo, vindo de todos os lados (com todos os tipos de qualidade)
e, ao mesmo tempo, criou todo um conjunto novo de questões sobre "
baseadas em conteúdo. As pessoas se reúnem e colaboram à volta de
vandalismo, propriedade intelectual e integridade de dados. uma notícia ou conteúdo, tipicamente em um blog ou ambiente tipo
"espaço";
Como a disponibilidade de banda larga para o usuário final aumenta
continuamente, a riqueza de conteúdo que pode ser enviada pela "
baseadas em grupos. As pessoas se reúnem à volta de uma idéia ou
Internet também aumenta. A questão da Internet original era interesse, como um passa-tempo, discutindo-o em fóruns;
sobretudo, texto; A Web 2.0 começou com música e imagens e passou "
baseadas em projetos. As pessoas trabalham juntas em uma tarefa ou
para voz e vídeo. Agora, TV e filmes são as áreas de conteúdo projeto comum, como um projeto de desenvolvimento, um livro ou
investigadas como parte da Web 2.0. até mesmo algo tão grande como uma enciclopédia, utilizando
Nesse tempo em que as pessoas e as organizações fizeram pesquisas, wikis.
uploads e downloads de todos esses dados e conteúdo "explícitos" na Os três tipos de colaboração são compatíveis com sistemas Web 2.0.
Web, criaram, ao mesmo tempo, um vasto volume de dados implícitos
Web 2.0 na empresa
sobre o que fazem e qual será o seu destino. Esses dados implícitos ou
As organizações de todos os tipos e portes, das iniciantes às empresas
de informação de atenção da Web 2.0 podem ser utilizados para
citadas pela Fortune 100 e de todos os setores verticais, têm
prever o comportamento futuro ou fornecer novos recursos baseados
presenciado o crescimento dos sites sociais e comunitários da Web
nessas informações de atenção. Assim é como trabalham os principais
nos espaços de consumidores como MySpace, YouTube e o dilúvio dos
mecanismos de pesquisa: monitoram as consultas feitas pelas pessoas
sites da Web 2.0. As empresas testemunharam os movimentos dos
e utilizam esses dados para prever qual segmento apresentará melhor
principais participantes da Web como Amazon, eBay, Live, Google e
probabilidade no futuro. Por certo, a coleta, o armazenamento e o uso
Yahoo para incluir elementos sociais e comunitários, assim como o
desses dados implícitos levanta questões instigantes sobre
interesse e a demanda que isso criou. No momento, estão ativamente
propriedade, privacidade e propriedade intelectual (IP), as quais ainda
investigando e, em muitos casos, construindo novos portais baseados
precisam ser analisadas de modo satisfatório.
em comunidades e negócios para suas próprias organizações: a Web
Outra questão com o gigantesco volume de dados da Web é como 2.0 está entrando na empresa.
localizar o que se procura e os meios de se navegar pelos dados. Os As organizações estão interessadas em usar as técnicas de Web 2.0 em
mecanismos de busca utilizam dados implícitos (ou avaliações de duas áreas, principalmente: dentro da organização, para aprimorar a
páginas) para localizar dados textuais, mas isso não funciona muito eficiência e a produtividade, e da organização para os clientes, para
bem com imagens ou dados de áudio. Além disso, em muitos casos, o aprimorar a receita e a satisfação do cliente. O uso da Web 2.0 no
mecanismo de busca talvez não tenha informações contextuais âmbito das organizações denomina-se Enterprise 2.0 e,
suficientes para fornecer um resultado válido. Nesses casos, a provavelmente, esta será a primeira área que usará a Web 2.0. O uso
marcação dos dados torna-se uma forma valiosa de ajudar na da Web 2.0 pelas empresas para fazer a interface com seus clientes e
navegação pelos dados. Os aplicativos da Web 2.0 utilizam muito a consumidores é similar à atividade B2C (do negócio para o cliente)
marcação e as nuvens de tags (tag clouds) como forma de localizar e mas com um enfoque social e comunitário e, por isso, denomina-se
navegar através do vasto volume de dados disponível na Web. B2C 2.0 (do negócio para a comunidade). O interesse neste uso da
Os dados de marcação (tag data) tratam de dados sobre dados ou "comunidade como um cliente" cresce rapidamente.
metadados e um dos principais problemas com dados e conteúdo na Enterprise 2.0
Web é aquele causado pela falta de normas para metadados e A Enterprise 2.0 ou Web 2.0 na empresa é um termo cunhado pelo
esquemas. É impossível cortar-colar algo tão simples como um Professor MacAfee da Harvard Business School, em 2006, para
endereço da Web porque não existe um formato-padrão para descrever o uso das técnicas da Web 2.0 no âmbito da organização,
endereços. com o intuito de aprimorar a produtividade e a eficiência.

4 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Web 2.0 na Empresa

Pela adoção das técnicas da Web 2.0, os information workers, como organizações à volta das questões sociais e de valor e não das técnicas;
suas contrapartes consumidoras, podem controlar suas próprias essas barreiras não são abordadas pelas tecnologias da Web 2.0 e,
experiências de usuário com menos orientação do pessoal de TI e assim, não fica claro se a Web 2.0 possibilitará a gestão bem-sucedida
assim, criar para eles mesmos um ambiente de trabalho mais intuitivo do conhecimento nas organizações.
e eficiente. O resultado final é produtividade, moral e satisfação
Concluindo, muitas técnicas da Web 2.0 podem ser usadas nas
aprimorados para a o information worker. Entendidos e implantados
organizações, em áreas como a do desenvolvimento rápido de
de modo adequado, as tecnologias, os métodos e os padrões da Web
aplicativos utilizando mashups e gestão de conhecimento baseado em
2.0 podem ser usados na empresa para um grande efeito, estimulando
toda produtividade e eficiência globais da organização. Nesta seção, blogs e wikis.
analisamos alguns dos elementos da Web 2.0 que possibilitam isso. B2C 2.0 (do negócio para a comunidade)
Rica experiência do usuário Pelas perspectivas organizacional e de receitas, as áreas empresariais
Proporcionar aos usuários uma experiência única para todas as suas que têm o maior impacto em potencial para uso da Web 2.0 são as
necessidades aumenta a produtividade, minimiza os custos de que fazem interface com o cliente; é possível dizer que a totalidade
treinamento e incentiva adoção e uso mais intensos. Isso inclui o dos contatos com o cliente, as vendas e o ciclo CRM estarão
acesso às informações e aos aplicativos, quer conectados ou modificados com o uso das técnicas da Web 2.0. Em marketing, a
desconectados, utilizando um dispositivo móvel ou laptop ou, ainda, oportunidade de fornecer mídia rica e interativa, além da
quer estejam usando um thin ou smart client. O suporte à rica interatividade mais próxima do cliente por meio de wikis e blogs,
experiência do usuário fornecido pelo Ajax e pelos subsistemas oferecerá novas formas de contato e sedução para clientes
gráficos, como o Silverlight, permitem a rica experiência do usuário prospectivos. Em vendas, o uso de dispositivos agentes de formas
esperada pelas pessoas dos sistemas atuais. novas, como celulares, para interagir com o cliente durante todo o
processo de venda é outra área importante para novos
Modelos leves de programação desenvolvimentos. No atendimento ao cliente, o uso de especialistas
Um dos princípios da Web 2.0 é o conceito dos aplicativos criados da comunidade para ajudar na resolução de problemas por meio de
pelo usuário ou “mashups”–de aplicativos gerados pelo usuário, com grupos de discussão, cria modelos de suporte totalmente novos. As
modelos leves de programação. Estes prometem uma mudança razões para tal interesse são:
dramática dos gargalos e restrições associados aos aplicativos gerados
por TI. Com as técnicas da Web 2.0, os usuários podem facilmente
"
receita e crescimento
criar aplicativos específicos para suas próprias necessidades. Novos fluxos de receitas podem ser construídos e esses fluxos
Entretanto, muitas estratégias atuais de aplicativos compostos deixam podem apresentar um aumento por meio da integração social e
a desejar, concentrando-se em aplicativos que apenas fazem o comunitária. Especificamente, o conteúdo do custo dos últimos cinco
refaceamento de uma IU do Ajax e deixando de fornecer a verdadeira anos revelou o interesse do lado do negócio em crescimento e
capacitação do usuário. Para capitalizar a oportunidade do aplicativo receita baseados na inovação. O rápido crescimento e a inovação do
dirigido ao usuário, as empresas precisam fornecer departamentos e espaço da Web 2.0 são vistos como algo que as empresas desejam
usuários com um ambiente gerenciado e ferramentas familiares que imitar;
lhes permitam, facilmente, personalizar ou criar soluções e espaços de
trabalho próprios.
"
economias de escala baseadas na Web
As empresas percebem que podem cortar radicalmente o custo com
Fim dos ciclos de lançamento e implantação de software bens de capital e recursos humanos, utilizando um modelo de
O uso subjacente da Internet como uma plataforma na Web 2.0 entrega baseado na Web para as comunidades e os seus clientes. As
permite a distribuição simples, rápida e flexível de aplicativos e dados empresas B2C 2.0 têm planos para dar suporte a dezenas de milhares
em toda a organização, tirando o usuário dos ciclos de atualização de de clientes, com apenas algumas centenas de funcionários;
TI, fixos e inflexíveis, e permitindo um novo nível de suporte
organizacional e de capacidade de resposta para o usuário.
"
modelos de contratação flexível
O uso de pessoal contratado e temporário para a entrega permite
A Web que lê e escreve flexibilidade e agilidade. O pessoal temporário e o contratado pode
Dados e documentos são críticos para qualquer organização e os ser considerado uma outra comunidade especializada e pode ter o
sistemas baseados em serviços, como a Web 2.0, permitem criar, apoio das técnicas de Web 2.0, da mesma forma que os clientes;
modificar e trocar dados e documentos com complexidade bastante
reduzida e facilidade de uso aprimorada. A provisão de dados, o
"
criação de comunidades como evangelismo e suporte
Os clientes são o que de melhor tem um negócio em organização de
gerenciamento de conteúdo e os sistemas colaborativos que podem
vendas, marketing, suporte e desenvolvimento. A criação de
suportar as técnicas social e de formato do rico conteúdo da Web 2.0
comunidades terceiriza, efetivamente, esses centros de custo, a custo
são críticos para o uso da Web que lê e escreve na empresa.
zero. Na verdade, com a inclusão de publicidade dirigida para a
Web colaborativa comunidade, muitos dos atuais centros de custo podem tornar-se
As empresas com bancos de dados de grande porte de funcionários, centros de lucro;
parceiros e clientes há muito conhecem o valor do conhecimento que "
vantagem do líder da comunidade
reside nas mentes dos funcionários, nos bancos de dados e nos
A dinâmica da comunidade é tal que a primeira, bem-sucedida, será,
documentos não estruturados encontrados em toda a organização. No
de longe, a mais poderosa; e a organização proprietária dessa
passado, tentativas de coletar essas informações nos sistemas de
comunidade controla o espaço. Se os concorrentes da organização
gestão de conhecimento foram feitas, com vários níveis de sucesso,
forem os primeiros no espaço da comunidade, terão vantagem
mas as tecnologias da Web 2.0, como blogs, wikis e o empenho da
competitiva muito significativa.
empresa em descobrir pessoas e dados poderão facilitar a gestão de
conhecimento e fornecer uma nova plataforma de colaboração para Existem cinco áreas nas quais as técnicas da Web 2.0 podem ser
tarefas complexas e criativas. Entretanto, deve-se notar que a utilizadas no trabalho com comunidades de clientes para viabilizar o
verdadeira barreira para a gestão do conhecimento ergue-se nas B2C 2.0, conforme descrito abaixo:

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 5


Web 2.0 na Empresa

Inovação e desenvolvimento de novos produtos mensagens instantâneas e de bate-papo para suporte em tempo real
para os produtos. Depois, o uso de captura de imagem e vídeo para
Um grande percentual de inovações e idéias para novos produtos nas
comunicação e resolução de problemas. O uso de especialistas de
organizações advém de fornecedores e clientes e não de pesquisa
produtos baseados em comunidade e grupos de discussão de auto-
interna e organizações de desenvolvimento. Essas idéias para novos
ajuda é a terceira e mais importante área: a auto-ajuda tem funcionado
produtos geradas pelos clientes têm maior probabilidade de serem
muito bem em comunidades e é um meio de fornecer suporte de alta
bem-sucedidas pois vieram dos usuários finais do produto.
qualidade e de custo muito baixo. Contudo, como acontece com a
Obviamente, as organizações que podem construir um sistema que
maioria dos sistemas baseados em sociedade, a mecânica real desses
extrai essas idéias pode obter benefícios significativos. O uso de
grupos de auto-ajuda não é simples e exige raciocínio e especialização.
comunidades de clientes e fornecedores baseadas na Web 2.0, como
fóruns e grupos de discussão de idéias e incubação de novos produtos, Treinamento e educação
representa uma técnica poderosa para coletar idéias de modo simples Provavelmente, o treinamento e a educação são os usos menos
e econômico. Muitas organizações estão efetivamente estudando o uso explorados da Web 2.0 na empresa. A disponibilidade de imagem e
de fóruns comunitários e grupos de discussão no processo de vídeo de alta qualidade oferece um custo muito baixo e uma forma
desenvolvimento de produtos. simples de proporcionar treinamento e materiais de demonstração.
Um benefício adicional deste desenvolvimento de novos produtos Esse conteúdo rico, quando integrado aos especialistas do tema na
baseado na comunidade é que os clientes conseguem ter um comunidade e nos grupos de discussão ativos oferece um ambiente de
entendimento melhor do produto ou serviço entregue quando estão treinamento e educação poderoso e simples. Embora atualmente tenha
envolvidos nos respectivos processos de gestação e, dessa forma, a sua havido relativamente pouca atividade na área de treinamento e
percepção do produto será significativamente aprimorada. educação, esta sem dúvida crescerá muito no futuro.

Marketing As organizações estão aprendendo a ver seus clientes e funcionários


Certamente, a aplicação mais conhecida das técnicas da Web 2.0 nas como comunidades com as quais mantêm relações online e offline em
organizações está nos departamentos de marketing como marketing um ciclo multifacetado de vendas baseado na comunidade: uma loja
viral. São muitos os exemplos de comunidade e conteúdo complexo, especializada de varejo pode realizar uma palestra, proferida por um
como o vídeo, usado para gerar e disseminar novidades sobre especialista nacional, que cria uma comunidade online à volta de um
produtos e serviços. Existem dois elementos para este marketing viral: tópico de interesse, moderado por esse especialista. Como parte da
geração do interesse inicial e, em seguida, a disseminação viral. A discussão online, os membros da comunidade visitam a loja para
geração do interesse inicial é melhor realizada utilizando imagem, conhecer itens de interesse específico e, em seguida, fazem o pedido
vídeo e filmes inovadores; não é difícil registrar-se milhões de desses itens online, no âmbito de um esquema de prêmios da
downloads de um vídeo criativo após poucas horas ou dias do comunidade.
lançamento e o interesse contínuo em um produto pode ser Conclusão
sustentado pela inclusão de um elemento informativo ou explicativo Resumindo, hoje em dia, as áreas da Web 2.0 de comunidade e
do conteúdo. A disseminação desse material é feita pela comunidade conteúdo complexo estão sendo utilizadas com sucesso pelas
da Internet utilizando, quase sempre, mensagens instantâneas, e-mail organizações, internamente para captura de conhecimento e
ou fóruns comunitários. Novamente, essa disseminação pode ser muito reutilização e, externamente para criar comunidades de clientes.
rápida e abundante. O vídeo cativante de um produto ou serviço novo Embora grande parte do atual interesse esteja na captura de
pode ser transmitido a milhões de pessoas em horas e aparecer em conhecimento e reutilização, ainda há problemas significativos,
mídia comercial, como TV ou jornal, em dias. culturais e sociais, para a implementação bem-sucedida desses
Contudo, existem algumas limitações sobre o marketing viral: em sistemas, os quais não são resolvidos pelas técnicas da Web 2.0. A área
primeiro lugar, o público-alvo precisa ser bem compreendido e, menos explorada do uso das comunidades de clientes traz uma
mesmo assim, o material talvez não desperte o interesse da promessa muito maior para a organização, mas também traz riscos
comunidade. Em segundo lugar, as organizações não podem controlar próprios concomitantes sobre IP e vandalismo, os quais precisam ser
a disseminação ou o uso dos materiais; o uso de técnicas de marketing discutidos.
viral pela comunidade de formas imprevistas é bem documentado e No geral, o uso das técnicas da Web 2.0 na empresa promete ter
pode criar problemas significativos para uma organização. efeitos profundos e extensos sobre como as organizações trabalham,
Vendas interna e externamente, criando formas poderosas e completamente
Em geral, o custo de vendas representa uma parte significativa de todo novas para a movimentação, as vendas e o suporte aos clientes como
o custo de um produto ou serviço. Em uma organização B2C 2.0, a comunidades.
comunidade age como um vendedor e, assim, o custo de vendas fica
acentuadamente reduzido e, em muitos casos, chega a zero. Os
Sobre o autor
próprios clientes agem como representantes e vendedores da
Michael Platt é diretor de estratégia de arquitetura Web do grupo de
organização. Não há necessidade de grande pressão, nem de uma
mesma denominação da Microsoft Corp. em Redmond, EUA. Possui
organização de vendas de alto custo nos negócios baseados na
larga experiência em arquitetura Web e em aplicativos corporativos
comunidade; em muitos casos, é contraproducente e, na verdade, vai
para empresas multinacionais de grande porte, e perto de 30 anos de
obstruir as vendas.
experiência no setor de TI. Michael trabalha na Microsoft há 10 anos e
Suporte já ocupou várias cargos de gerência, estratégia, pré-vendas e
O suporte é a segunda área mais conhecida para o uso das técnicas da consultoria. É licenciado (Honours Degree) em engenharia eletrônica e
Web 2.0. Primeiramente, as organizações usam as técnicas de elétrica e já publicou diversas dissertações e patentes.

6 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Distribuição eficiente de
software por meio de plata-
formas de entrega de serviços
por Gianpaolo Carraro, Fred Chong e Eugenio Pace

Resumo próprio agendador e gerenciador de memória. Mas, estas necessidades


bastante específicas são exatamente as exceções e não a norma.
A distribuição de software como serviço (SaaS) tem
As empresas e os ISVs fatoram continuamente os componentes comuns
ganho muita força. Uma das razões é que o modelo um- de suas soluções em frameworks aplicativos “horizontais”. Esses
para-muitos é atraente pois fomenta novas economias frameworks oferecem componentes (e procedimentos) mais abstraídos,
de escala. Mesmo assim, a economia de escala não comuns, compartilhados, que elevam a reutilização, aumentam a
produtividade e, em geral, proporcionam desenvolvimento e ambiente
acontece automaticamente: precisa ser explicitamente
operacional mais previsíveis.
arquitetada na solução. Um padrão arquitetural típico
“O FLUXO DESCENDENTE DAS CAPACIDADES
que favorece a economia de escala é o tipo "instância
HORIZONTAIS DAQUILO QUE PODEMOS CHAMAR
única, locação múltipla" e, muitos fornecedores de
"ENCANAMENTOS" DOS ISVs PARA FRAMEWORKS
software independente (ISVs) que oferecem SaaS E, EM SEGUIDA, PARA PLATAFORMAS CENTRAIS,
"mudaram-se" para esta arquitetura, obtendo vários PODE SER AINDA MAIS GENERALIZADO, PARA
níveis de sucesso. ABRANGER OS CENÁRIOS DE SOFTWARE
Entretanto, há outros meios de aprimorar a eficiência, DISTRIBUÍDO COMO SERVIÇO. NESSE SENTIDO,
adotados pelos ISVs com o mesmo entusiasmo: usar uma UMA SDP TORNA-SE UM "SISTEMA OPERACIONAL"
plataforma de entrega de serviço (SDP). A adoção tem DE ENTREGA DE SERVIÇO".
sido lenta principalmente porque as plataformas de O problema que existe na construção de frameworks ricos é que,
entrega de serviços, otimizadas para a entrega de quase sempre, eles não contribuem diretamente para o valor do
software em si. Eles são o "mal necessário" pois facilitam a manutenção
aplicativos de linha de negócio, estão ainda nos seus de longo prazo do aplicativo e, assim, os ISVs e as empresas
primórdios. Mas os dois atores do espaço de prefeririam não ser os seus proprietários. Este fato reforça a situação
hospedagem, novos e existentes, estão construindo, de ganho mútuo na qual os "encanadores" podem concentrar e
muito rapidamente, capacidades imprescindíveis. Este vender funcionalidades verticais para que os "especializados em
domínio" possam se concentrar nas funcionalidades "verticais" em que
artigo explora metas, capacidades e motivações que a proposição de valor para o comprador é maior. Sejamos francos,
levam à adoção de uma SDP e descreve a tecnologia e os ninguém compra uma solução só porque ela tem um mecanismo
processos relativos à distribuição eficiente de software melhor para tratar as exceções.
por meio dessa plataforma. Como ilustrado na Figura 1, existe um processo natural e contínuo de
extração e generalização de funcionalidade dos aplicativos para os
Economias de escala e arquitetura do aplicativo
frameworks e, destes, para os componentes da plataforma central. Ao
Os sistemas operacionais evoluíram como uma forma de simplificar o aumentar o volume de elementos compartilhados, este fluxo aprimora
desenvolvimento, as operações e o gerenciamento de aplicativos. Em as economias de escala.
lugar de exigir que cada aplicativo (re)crie toda a pilha de subsistemas
O fluxo descendente das capacidades horizontais vindo daquilo que
necessários para a sua execução, com os níveis de qualidade esperados,
os sistemas operacionais oferecem uma infra-estrutura na qual os podemos chamar "encanamentos" dos ISVs para os frameworks e, em
serviços dos aplicativos comuns, de uso geral, são codificados e seguida, para plataformas centrais, pode ser ainda mais generalizado,
reutilizados. para abranger os cenários de software distribuído como serviço. Neste
sentido, uma SDP torna-se um "sistema operacional" de entrega de
Quase sempre, esses serviços são tecnicamente complexos e exigem o
serviço, especializada nas características e exigências horizontais dos
desenvolvimento de destreza e habilidades especializadas. Os ISVs
aplicativos distribuídos como SaaS.
rapidamente entenderam a proposição de valor de um sistema
operacional e padronizaram o seu desenvolvimento sobre um ou dois Empresas tradicionais de hospedagem são candidatas naturais para
sistemas operacionais. Ao aproveitar a infra-estrutura, comum e implementar e oferecer uma SDP dado o seu histórico, especialização,
subjacente, eles tiveram mais tempo para dedicar à parte específica de conjunto de habilidades e base instalada. Entretanto, outros atores
domínio do aplicativo a qual, afinal, é o que os usuários de software também poderiam analisar a sua entrada nesse espaço emergente. Os
compram. ISVs que hospedam as próprias soluções SaaS poderiam considerar a
Existem casos em que as necessidades específicas de um aplicativo vão monetização desse ambiente de auto-hospedagem que construíram
além do que oferece um sistema operacional de uso geral. Nessa para si, oferecendo-o como um ambiente de distribuição de SaaS de
circunstância, partes do sistema operacional são substituídas por uso geral. Os integradores de sistema que já obtiveram excelência
módulos desenvolvidos especificamente, oferecendo o nível de suporte operacional de classe internacional por meio de suas ofertas tipo
desejado. Por exemplo, os bancos de dados quase sempre escrevem os negócio-processo-terceirização, poderiam aproveitar esse
próprios sistemas de arquivo e, no caso do Microsoft SQL Server, o conhecimento no espaço de SaaS, que cresce a olhos vistos.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 7


Distribuição Eficiente de Software

Figura 1: Fatorando semelhanças em uma plataforma reutilizável

Um “Aplic” Outro “Aplic”

Especialização
da Abstração
Um “Aplic” Outro “Aplic” UI+ Lógica Neg UI+ Lógica Neg
UI+ Lógica Neg
UI+ Lógica Neg UI+ Lógica Neg

Um “Aplic” Infra-estrutura Infra-estrutura


Framework Aplicativo
aplic aplic
Comum
UI+ Lógica Neg+

Plataforma de
Infra-estrutura aplic

USo Geral
SO SO

Armaze- Segurança Armaze- Segurança Armaze- Segurança


namento .... namento .... namento ....

HW HW HW

“O PONTO PRINCIPAL É QUE A EFICIÊNCIA DE UMA a ponta, que cobre cada etapa do ciclo de vida de um típico aplicativo
SDP DEPENDE EXTREMAMENTE DO ARQUÉTIPO distribuído como SaaS (vide Figura 2), apesar de ter cobertura
superficial em algumas capacidades; outra, profunda, que se concentra
SERVIDO. QUANTO MAIS A SDP CONHECER O
apenas em determinados estágios, mas que oferece recursos
APLICATIVO, MAIOR SERÁ A SUA CAPACIDADE DE sofisticados para eles. A mesma pesquisa também indica que o
AUMENTAR A EFICIÊNCIA DE EXECUTÁ-LO E OPERÁ- atributo "facilidade de uso" ainda não está inteiramente incorporado
LO, E MAIOR SERÁ O NÍVEL DE nas ofertas pois, muitas delas, dependem de processos humanos
COMPARTILHAMENTO". intensivos e específicos.
Arquétipo do aplicativo: um tamanho de SDP serve para tudo?
Fatores de sucesso de uma SDP
Os aplicativos de negócio podem ser classificados em arquétipos
O nível de sucesso de uma SDP será determinado pelos seguintes
diferentes, com base em suas características e exigências. Alguns
atributos:
exemplos desses arquétipos são:
1. Capacidades operacionais centrais: habilidade de fornecer
contratos de nível de serviço (SLAs) bem estruturados com relação
"
sistemas OLTP (Online transaction processing ou processamento de
às exigências não funcionais como disponibilidade (tolerância a transações em tempo real): caracterizados pela baixa latência, tempo
falhas e tempo de processamento), escalabilidade e recuperação elevado de resposta, integridade dos dados, workflows de IU
de desastres e, também, recursos de serviços genéricos como predefinidos. As instâncias deste arquétipo são sites de e-commerce,
presença em várias geografias, suporte ao cliente 24x7 e sistemas de e-banking, sistemas CRM.
segurança física multicamada; "
sistemas de análise - OLAP (Online analytic processing ou
2. Profundidade dos serviços: o nível de sofisticação dos serviços processamento analítico em tempo real): caracterizados por sua
que fornece como, por exemplo, suporte ao faturamento para habilidade de produzir consultas analíticas complexas e altamente
várias opções de pagamento; personalizáveis em conjuntos de dados multidimensionais de grande
porte, com respostas de baixa latência. Os sistemas BI são
3. Extensão dos serviços: a completude da plataforma; em outras
classificados nessa categoria.
palavras, o suporte para os diferentes estágios do ciclo de vida de
um aplicativo distribuído como SaaS, por exemplo, serviço de "
sistemas de lote: capazes de executar eficientemente operações em
faturamento, homologação do aplicativo, serviços de conjuntos de dados de grande porte, coordenando trabalhos para
planejamento de capacidade ou métodos para consertar ou maximizar a utilização da CPU com diretivas de recuperação, caso
atualizar aplicativos; ocorram exceções.
4. Facilidade de uso: usabilidade pela perspectiva do ISV; em Essas famílias de aplicativos têm, cada qual, seus próprios limites,
outras palavras, o custo de aprender e usar os serviços fornecidos características e padrões de projeto ideais, que podem ser aplicados
pela SDP. SDPs fáceis de usar não exigem longo aprendizado, têm para resolver os desafios específicos que apresentam.
documentação completa, interfaces e SDKs bem planejados, Com muita freqüência, esses desafios têm metas conflitantes. Por
código de amostragem, modelos, assistentes e conteúdo de exemplo: o OLTP otimizaria a baixa latência, mas latência para sistemas
treinamento. de lote não é importante. O OLTP escala melhor no sentido horizontal
Observe que os quatro atributos acima não se destinam a representar e se beneficia de uma arquitetura stateless (sem estado), enquanto
um modelo de maturidade. Se observarmos as ofertas de SDP que os sistemas de lote escalam verticalmente e tendem a ser stateful
existentes, veremos que atualmente abrangem duas estratégias: uma (estado conversacional). A infra-estrutura e os serviços para dar apoio
ampliada, otimizada para fornecer uma plataforma abrangente, ponta a cada uma delas é, conseqüentemente, bastante diferente.

8 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Distribuição Eficiente de Software

Neste cenário básico, aplicativos de ISVs


Figura 2: Ciclo de vida típico de um aplicativo distribuído como SaaS e atividades associadas
implantados usam os próprios padrões de
arquitetura do aplicativo e muito pouco fica
"O ISV desenvolve, testa, confirma um aplicativo distribuído como SaaS
"O hoster fornece APIs, ferramentas e programadores para que os ISVs
exposto ao hoster ou é por este conhecido.
desenvolvam seus aplicativos de acordo com a SDP Espera-se que os ISVs desenvolvam e forneçam a
Construção
própria infra-estrutura de gerenciamento de
várias locações, infra-estrutura de segurança,
"O ISV desenvolve um novo aplicativo em uma SDP, define SLAs e parâmetros gerenciamento de locatários, etc.
operacionais
"O hoster confirma a compatibilidade com as políticas da SDP Quase sempre, os pedidos de serviços de infra-
"O hoster instala o aplicativo na central de dados
estrutura como, por exemplo, registrar um novo
Implantação "O hoster fornece APIs, ferramentas e programadores para que os ISVs
desenvolvam seus aplicativos de acordo com a SDP domínio, diretório virtual ou site na Web, criar
um novo banco de dados, alocar
"O armazenamento, são realizados manualmente ou
cliente descobre o aplicativo no mercado do hoster
"O cliente conhece o aplicativo automatizados com script personalizado.
"O cliente experimenta e compra o aplicativo do ISV
"O agregador reúne o aplicativo com outros produtos A instalação e a implantação da solução exige
Venda "O revendedor o renomeia como um aplicativo “sem marca” que o ISV forneça ao hoster instruções
detalhadas de configuração e instalação; ajustes
"O cliente usa o aplicativo diversos, não padronizados, também são
"O cliente personaliza um aplicativo necessários (como os arquivos de configuração
"O integrador do sistema personaliza uma solução para o cliente
"O hoster monitora e gerencia o aplicativo para cumprir os termos do SLA para tratamento de XML, chaves de registro,
Uso "O Hoster informa e escala incidentes para o ISV caminhos de arquivo, strings de conexão) pois
pouco da arquitetura do aplicativo é conhecida
ou fica exposta ao hoster. Esses procedimentos
"O ISV atualiza o aplicativo específicos impedem o hoster de escalar seus
"O ISV conserta o aplicativo procedimentos a milhares de aplicativos, porque
Atualização "O hoster atualiza e conserta a SDP
tem de tratar cada um como uma exceção.
do Serviço
Cada aplicativo é uma "caixa preta" de
componentes possivelmente conflitantes,
competindo inadequadamente por recursos
O ponto principal é que a eficiência de uma SDP é dependente compartilhados (e limitados), motivo pelo qual muitos ISVs solicitam
extremamente do arquétipo servido. Quanto mais a SDP conhecer o
servidores dedicados que garantirão o completo isolamento dos
aplicativo, maior será a sua capacidade de aumentar a eficiência de
outros aplicativos. Entretanto, o uso de servidores dedicados vai
executá-lo e operá-lo, e maior será o nível de compartilhamento.
diretamente contra a meta de eficiência através da infra-estrutura
As capacidades de uma plataforma de distribuição de serviço
compartilhada.
A Figura 2 ilustra o ciclo de vida de um típico aplicativo distribuído
O hoster só pode observar e agir sobre indicadores amplos para
como SaaS. Cada estágio do ciclo de vida é caracterizado por um
monitorar a solução. Estes conseguem medir apenas contadores de
número de atividades executado pelo ISV, pelo hoster e por outros
participantes que se tornarão mais relevantes na medida em que desempenho gerais e amplos, como CPU e cargas de trabalho de
aumentar o grau de sofisticação das SDPs (integradores de sistemas, memória, banda larga, contenção de SQL e também alguns
revendedores de valor agregado, por exemplo) contadores de desempenho específico do aplicativo que o ISV fornece
Os quatro cenários abaixo descrevem as capacidades e as experiências "conforme necessário". Existem poucos (ou nenhum) mecanismos-
possibilitadas por SPDs cada vez mais sofisticadas. padrão acordados de gerenciamento refinado do aplicativo.

Cenário A: plataforma básica de distribuição de serviço É muito interessante constatar-se que, mesmo com pouco ou nenhum
As capacidades da SDP mais simples são essencialmente aquelas ora conhecimento do que faz o aplicativo, os hosters, em geral,
oferecidas pela maioria dos hosters tradicionais. Esses serviços conseguem dar informações detalhadas ao ISV sobre o desempenho
concentram-se principalmente em componentes de infra-estrutura do banco de dados. Isso acontece porque os artefatos do banco de
centrais, bastante genéricos, como: CPU, acesso à rede, recursos de dados são comuns a todos os ISVs (os aplicativos possuem tabelas,
segurança de Internet e armazenamento (discos e bancos de dados) procedimentos armazenados, índices, acionadores, visualizações, etc.)
geralmente denominados em inglês "ping, power, and pipe", ou seja, e a plataforma em que esses artefatos são instanciados (o próprio
os itens básicos.
servidor do banco de dados, como o SQL Server) é instrumentada no
Neste cenário, a economia de escala fica limitada ao nível de abstração. Os hosters podem, portanto, fornecer contenção
compartilhamento dos níveis mais baixos da infra-estrutura: a detalhada, bloqueio, relatórios de desempenho e até sugerir
construção da central de dados e da infra-estrutura de TI, como
aprimoramentos sobre esses artefatos.
servidores e equipamentos de rede.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 9


Distribuição Eficiente de Software

Figura 3: Dirigindo economias de escala através de uma infra-estrutura compartilhada maior

Aplic “A” ISV Aplic “A” ISV Aplic “A” ISV Aplic “B” ISV Aplic “C” ISV

ISV
IU + Lógica Neg IU + Lógica Neg IU + Lógica Neg
IU + Lógica Neg IU + Lógica Neg

Gerente Operacional

Gerente Operacional
Serviços do Negócio Serviços do Negócio
Serviços do Negócio
Fatura Medição Fatura Medição
mento mento
ISV

Fatura Medição Mercado Identif


mento marca
Arquitetura Aplic Arquitetura Aplic
Arquitetura de Aplicativos
Cache Cache
Registro Trat. de Vincul. Vincul.
Exceções Perfil Exceções Perfil em log Exceções Dados Dados

SO & Infra-estrutura Central SO & Infra-estrutura Central

incidentes
Incidentes

Hoster
Escal.
Escal.
Tolerância Banco Ferram Monitora- Serviços operacionais Tolerância Banco de Ferram. Monitora-

Serviços operacionais
Falhas de Dados Infra-estr ção Central falhas dados infra-estr. ção central
Hoster

Serviços Armaze- Serviços Armaze- Execução Segurança


Execução Segurança de rede namento
namento

Planej. Capaci//
de rede
Planej. Capaci//

Monitor.
Monitor.

Hardware Hardware

SLA
SLA

Servidores Discos Rede Servidores Discos Rede

Central de dados Central de dados

“MESMO SE HOUVER POUCO OU NENHUM exemplo, você talvez encontre serviços de terminal hospedados e
CONHECIMENTO SOBRE O QUE FAZ O APLICATIVO, distribuídos pelo aplicativo VB6, um aplicativo para a Web que utiliza
vários frameworks e componentes de tempo de execução disponíveis.
OS HOSTERS, EM GERAL, CONSEGUEM FORNECER
Em outras palavras, a exceção é a regra.
AO ISV INFORMAÇÕES DETALHADAS SOBRE O
Este cenário é principalmente caracterizado por um compartilhamento
DESEMPENHO DO BANCO DE DADOS PORQUE OS
de infra-estrutura operacional. Em resumo, as economias de escala
ARTEFATOS DO BANCO DE DADOS SÃO COMUNS A neste cenário ficam limitadas a componentes de nível bem baixo. Um
TODOS OS ISVs E A PLATAFORMA EM QUE ESSES dos principais fatores que afetam a eficiência da SDP refere-se à
ARTEFATOS SÃO INSTANCIADOS É heterogeneidade dos aplicativos hospedados.
INSTRUMENTADA NO NÍVEL DE ABSTRAÇÃO.” Cenário B: aprimorar a eficiência por meio do conhecimento
Destaca-se um ponto: esses artefatos existem em todos os aplicativos mais profundo da arquitetura do aplicativo
baseados em banco de dados, independentemente de o ISV tê-lo Quantidade maior de componentes compartilhados leva a níveis mais
criado. Comparativamente, usando um aplicativo para Web como altos de eficiência e, assim, temos a pergunta: quais são os candidatos
exemplo, o único artefato compartilhado entre vários ISVs é a "página mais naturais a serem "extraídos" dos aplicativos na SDP? Os
Web", identificada pelo URL, elemento de pouca granularidade para candidatos óbvios são aqueles citados nos serviços de infra-estrutura
ser gerenciado de modo eficiente. Questões como qual parte da do aplicativo: configuração do aplicativo, tratamento e emissão de
página demora mais para carregar, quais componentes são relatórios de exceção de tempo de execução, registro em log e
instanciados através de uma página específica ou qual desses auditoria, rastreamento, caching, acesso aos dados. Todos os
componentes dependentes está causando contenção ou problemas de aplicativos precisam deles e, ainda assim, são freqüentemente escritos
tempo de execução (run time), exigem inspeção de código, uso de uma vez e repetidos pelos ISVs.
ferramentas avançadas e/ou profundo conhecimento de como o
Um exemplo de framework de infra-estrutura de aplicativo comum,
aplicativo é construído, procedimentos que, por natureza, não são
padrão, largamente adotado, é o Enterprise Library da Microsoft. Ao
escalados para milhares de aplicativos.
expor esses serviços básicos publicamente, a SDP tem uma habilidade
Atualizar tudo (exceto sistema operacional principal, equipamentos de muito grande de automatizar procedimentos comuns e oferece mais
rede e outras infra-estruturas básicas) exige procedimentos manuais capacidades de gerenciamento operacional avançado. Assim, estão
ou específicos e interações humanas (e-mails, telefonemas) entre os disponíveis ajuste fino, personalização e diagnóstico. Observe-se que o
especialistas do ISV e os hosters. hoster não precisa entender detalhadamente o que faz o aplicativo
Os aplicativos SaaS que operam neste ambiente básico são geralmente mas, em lugar disso, como faz (por exemplo, onde estão armazenados
implementados utilizando uma grande variedade de pilhas e os strings de conexão com o banco de dados? Como são registradas e
bibliotecas de tecnologia, não necessariamente compatíveis. Por notificadas as exceções de tempo de execução?).

10 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Distribuição Eficiente de Software

serviços sofisticados de aplicativo, como


Figura 4: Maior reutilização através de uma infra-estrutura de aplicativo
provisionamento avançado de infra-estrutura, serviços
relativos à segurança (perfis e funções de usuário,
personalização) e novos serviços do negócio como, por
exemplo: eventos de negócio, medição e faturamento de
Aplic. “A” ISV Aplic. “B” ISV Aplic. “C” ISV aplicativo e inteligência de uso.
Como os contratos entre serviços e aplicativos podem
IU + Lógica Neg IU + Lógica Neg IU + Lógica Neg
ser bem definidos, os SLAs podem, agora, ser
ISVs

estabelecidos no nível de serviços. SLAs convencionais no


nível macro (por exemplo, "tempo de processamento",
Infra-estrutura de aplicativo "banda larga" e "utilização de CPU") são necessários mas
Tratamento
não suficientes. SLAs com ajustes muito mais finos
Registro Configuração Validação
em log de exceções podem ser negociados e comercializados. Por exemplo,
um SLA que estabeleça "provisionamento de novo
SO & Infra-estrutura central locatário em menos de X minutos" pode ser definido,
monitorado e aplicado.
Monitoração Ferram. Banco de
Hoster

central infra-estr. Usuários dados O SDP SDK pode ser ainda mais aprimorado para cobrir
os novos serviços fornecidos, com implementações
Serviços Armaze- Execução Segurança Ger. independentes dos serviços que permitem o
de rede namento usuários
desenvolvimento offline. Por exemplo, é bastante
improvável que o hoster compartilhe todo o sistema de
Hardware faturamento com o ISV apenas para fins de
desenvolvimento. O ISV, provavelmente, fará a
Servidores Discos Rede
codificação com base em um "serviço de faturamento
simulado" com interfaces e contratos equivalentes e uma
Central de dados implementação mínima simulada. Aqui, o objetivo é criar
um ambiente de desenvolvimento que imite todas as
capacidades da SDP com dependências mínimas de
Como os ISVs estariam criando produtos com base nessas APIs, o qualquer implementação concreta. Esse procedimento
hoster é obrigado a publicar um kit de desenvolvimento de software também evita a exposição desnecessária dos componentes internos da
da plataforma de entrega de serviço (“SDP SDK”) que inclui SDP e da propriedade intelectual ao público. Para dar suporte a esse
documentação, amostras e até mesmo algumas ferramentas básicas cenário, é preciso haver integração e interação muito mais profundas
para download e uso dos ISVs. Neste cenário, os hosters podem entre o hoster e o próprio ciclo de vida do desenvolvimento de
escalar substancialmente os procedimentos operacionais básicos pois software (SDLC).
todos são comuns e, em casos excepcionais... bem,
tornam-se exceções. Os aplicativos que não
cumprem os padrões podem, sem dúvida, dar Figura 5: Exemplo de ofertas diferenciadas para a mesma função
ocasião a ofertas premium para elevar os fluxos de
receita. Além disso, os hosters podem oferecer
maior gama de serviços diferenciados com outros
esquemas de monetização. Por exemplo, o hoster Um “Aplic” Um “Aplic”
sabe que todos os aplicativos registrarão exceções
de tempo de execução, utilizando políticas e IU + Lógica Neg IU + Lógica Neg
procedimentos idênticos e, assim, o registro e a
emissão de relatórios básicos de exceção de tempo
de execução poderiam ser oferecidos no pacote
básico de hospedagem, e o registro, a notificação e
SDP Registro em log Registro em log
a escalação de exceções de tempo de execução
avançados poderiam tornar-se uma oferta premium.
(Vide Figura 5.) Observe-se que nesta abordagem, o
notificação

aplicativo de ISV não modifica o painel de controle


Análise e

porque toda essa lógica ("encanamentos") fica no


lado da SDP.
Cenário C: a SDP além do gerenciamento Visualizador
operacional de registros
Painel de controle
Nitidamente, o cenário B representa uma melhoria
em relação ao cenário A, mas a SDP pode ser Oferta básica Oferta premium
aprimorada ainda mais, com a adição de outros

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 11


Distribuição Eficiente de Software

Figura 6: A implantação inclui a definição de código e tempo de execução


SLA +
Manisfesto de implantação

Aplic “C” ISV Aplic “C” ISV

IU + Lógica Neg
+ Promoção IU + Lógica Neg
+

Registro Trat. de Registro Trat. de


em log Infra-estrutura aplic. exceções em log Infra-estrutura aplic. exceções

SO & Infra-estrutura central SO & Infra-estrutura central


Monit Ferram. Usuários Banco de Monit Ferram. Usuários Banco de
central infra-estr dados central infra-estr dados
Serviços Armaze- Segurança Ger. Serviços Armaze- Segurança Ger.
Execução Execução
de rede namento usuários de rede namento usuários

Hardware Hardware
Servidores Discos Rede Servidores Discos Rede

Pré-Produção Produção

“CONTROLE DE VERSÕES, GERENCIAMENTO Na produção, devido ao conhecimento mais profundo de como o


aplicativo trabalha, a SDP pode oferecer capacidades e ajustes
INTEGRADO DE INCIDENTES, HOMOLOGAÇÃO E
automáticos para o gerenciamento de recursos. SDPs mais modernas
PROMOÇÃO DE VERSÃO ENTRE AMBIENTES DE podem atribuir novas máquinas de modo dinâmico, adicionar CPUs a
HOMOLOGAÇÃO SÃO OFERECIDOS PELA SDP– um cluster, atribuir maior largura de banda de comunicação e
ESTA INFRA-ESTRUTURA PERMITE A EXECUÇÃO quaisquer outras infra-estruturas necessárias para manter o aplicativo
DE PROGRAMAS COMO “TESTADORES BETA” EM nos termos dos SLAs estabelecidos.

REGIÕES CONTROLADAS DA SDP, COLETANDO Como os aplicativos são totalmente instrumentados, os hosters podem
INFORMAÇÕES, PADRÕES DE USO E RESOLUÇÃO oferecer inteligência sobre padrões de uso e análise muito mais
refinada sobre o desempenho e o funcionamento do aplicativo, e
DE PROBLEMAS, ANTES DE OS RECURSOS essas informações são devolvidas, comentadas, (possivelmente como
SEREM REUNIDOS NA VERSÃO FINAL.” um serviço premium) no pipeline de planejamento de produto do ISV.
Além disso, neste cenário, a implantação de soluções na SDP é feita Em decorrência dos procedimentos de garantia de qualidade e
por meio de procedimentos muito automatizados, com um mínimo de implantação, altamente automatizados, os ISVs têm a oportunidade de
intervenção manual. Estes procedimentos incluem recursos avançados oferecer aprimoramentos de produtos com base na inteligência
para validação e configuração automáticas das necessidades do coletada, quase em tempo real, e de aprimorar seus produtos
aplicativo (pré-requisitos, locais de servidor, strings de conexão, por constantemente, com base em comentários mais precisos do usuário.
exemplo).
Vender, atribuir marca, agrupar e agregar aplicativos são atividades
A implementação na SDP vai além do código e dos scripts de que podem ser executadas por meio de regras de composição bem
configuração e inclui os SLAs negociados, requisitos operacionais
definidas e, portanto, o hoster pode criar ofertas agrupadas com
como gerenciamento automático de capacidade e escalação de
serviços comuns em várias soluções (como SSO ou gerenciamento de
incidentes, parametrização de faturamento.
função comum). Além disso, a atribuição “sem marca” é permitida para
A SDP também pode fornecer ambientes de homologação, nos quais agregadores e terceiros para criar ofertas especializadas e
o aplicativo pode ser executado e confirmado antes de ser levado à personalizadas, com a mesma base de código.
produção. Os ambientes de homologação permitem simulação de
faturamento, criação de locatários, falhas, etc., para permitir Cenário D: a mais moderna SDP
modelagem mais complexa de cenários do mundo real. Estes podem A mais moderna SDP ainda não existe. O texto desta seção traz um
ser vistos como "testes de unidades" para os SLAs firmados entre o pouco de extrapolação e um pouco de especulação. No cenário mais
hoster e o ISV. (Vide Figura 6.) avançado, além de todos os recursos descritos acima, a SDP inclui
Curiosamente, isso resulta em uma nova geração de serviços a serem serviços para gerenciamento completo do ciclo de vida do aplicativo,
oferecidos além do tempo de execução: por exemplo, simulação de permitindo melhor integração entre desenvolvimento, controle de
falhas, testes de carga, análise de desempenho e otimização poderiam versões, implantação, gerenciamento, operações e suporte de uma
estar disponíveis para os ISVs. ISVs de menor porte poderiam ter solução distribuída como SaaS, permitindo que um ecossistema
acesso a recursos temporários, pois a compra destes seria muito cara. estendido contribua e colabore para gerar soluções especializadas.

12 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Distribuição Eficiente de Software

Descoberta, aprendizado, tentativa, desenvolvimento, extensão, Conclusão


controle de versões, ajuste são casos de uso suportados pela SDP. Esta As SDPs representam uma nova e estimulante oportunidade para que
é uma integração completa do ciclo de vida do desenvolvimento de hosters tradicionais criem ofertas diferenciadas, de valor elevado,
software (SDLC) do ISV com o ciclo de vida das operações de software facilitando a entrada de um número maior de ISVs para oferecer
(SOLC) da SDP. Neste cenário, os aspectos do desenvolvimento de
soluções com níveis operacionais de classe internacional. Os pioneiros
software são oferecidos como um serviço em si: rastreamento de
desta nova categoria de mercado atrairão muitos ISVs, especialmente
erros, controle de versões de software, testes de desempenho, etc.
aqueles de nichos ou segmentos de pequeno e médio portes os
(Figura 7.)
quais, por motivos econômicos, não podem hospedar a si mesmos
Todas as capacidades da SDP são expressas em formatos legíveis por devido às suas qualidades ou à viabilidade financeira de seus modelos
máquina. Modelos de componentes de software e as capacidades da de negócio.
SDP são totalmente integrados nas ferramentas. Verificação, análise e
A equipe de estratégia de arquitetura da Microsoft está investindo
simulação desses modelos podem ser executadas por membros
diligentemente no desenvolvimento de um guia arquitetural para
independentes do ecossistema: ISVs, terceiros, agregadores, empresas
ajudar ISVs, hosters e empresas a concretizar os benefícios do
e outros colaboram na criação de sistemas complexos.
software e dos serviços, alavancando a plataforma Microsoft.
Metadados de aplicativos incluem não apenas parâmetros
operacionais, mas também informações necessárias para divulgar o
aplicativo no mercado da SDP (equivalente ao registro de aplicativo Referências
“Adicionar novo software” encontrado no Windows), oferece o MSDN Architecture Development Center
conteúdo para “saber mais”, conteúdo de orientação, documentação, http://msdn.microsoft.com/architecture
treinamento, valor adicional por serviços profissionais agregados, etc.
SaaS Section on MSDN Dev Center
Controle de versões, gerenciamento integrado de incidentes, http://msdn.microsoft.com/architecture/saas
homologação e promoção de versão entre ambientes de
LitwareHR – A sample SaaS-delivered application developed by
homologação são oferecidos pela SDP; esses recursos permitem aos
Microsoft Architecture Strategy Team
ISVs, agregadores, integradores de sistema desenvolver, personalizar e
http://www.codeplex.com/litwarehr
atualizar diferentes ofertas simultâneas. Esta infra-estrutura permite a
execução de programas como "testadores beta" e "early adopters" em
regiões controladas da SDP, coletando comentários, padrões de uso e Sobre os autores
resolução de erros, antes de os recursos serem reunidos na versão Gianpaolo Carraro, diretor de entrega de serviço, estratégia de
final. arquitetura da Microsoft, dirige a liderança de pensamento SaaS e as
O serviço de mercado fornecido pela SDP oferece um mecanismo melhores práticas arquiteturais da Microsoft. Anteriormente à
para descobrir, aprender e tentar novas ofertas, disponível por meio Microsoft, Gianpaolo foi co-fundador e arquiteto-chefe de um grupo
dos metadados que acompanham cada aplicação. de desenvolvimento de SaaS; foi membro da equipe técnica da Bell
Como já mencionado, vai levar algum tempo para que essas SDPs Laboratories. Gianpaolo é autor publicado e palestrante freqüente das
avançadas tornem-se populares. principais conferências internacionais de TI. Para saber mais sobre,
visite o blog do Gianpaolo: http:// blogs.msdn.com/gianpaolo
Fred Chong, arquiteto da equipe de estratégia de arquitetura (AST) da
Microsoft, é reconhecido pelo setor como um especialista no tema de
Figura 7: Integração do SDLC do ISV com o ciclo de vida operacional arquitetura de SaaS. Anteriormente, ele projetou e implementou
do hoster na “mais moderna SDP” protocolos de segurança e componentes de rede para produtos e
soluções de cliente da Microsoft. Fred também realizou pesquisas no
T.J. Watson Research Center da IBM e na Universidade da Califórnia,
em San Diego. O endereço do blog do Fred é
http://blogs.msdn.com/fred_chong
Eugenio Pace, arquiteto da equipe de estratégia de arquitetura (AST)
da Microsoft, é responsável pelo desenvolvimento de um guia
arquitetural no espaço SaaS. Antes de ingressar na equipe AST,
trabalhou como gerente de produto na equipe de padrões e práticas
SLDC SOLC da Microsoft e, nesse período, foi responsável pela elaboração do
guia de arquitetura, lado do cliente, inclusive clientes Web, smart
clients e clientes móveis. Foi nesse período que sua equipe lançou o
Composite UI Application Block e três fábricas de software para smart
clients móveis e de desktop e, também, para o desenvolvimento de
Web. Antes de ingressar na equipe de padrões e práticas, trabalhou
como arquiteto na Microsoft Consulting Services onde liderou o
ISV Hoster desenvolvimento de várias soluções corporativas em todo o mundo.
O endereço do blog do Eugenio é http://blogs.msdn. com/eugeniop

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 13


Comunicação segura na
travessia entre domínios
no navegador
por Danny Thorpe

Resumo ligariam a mínima e declarariam "Não sabemos o que o outro editor


de fotos poderia fazer com os seus dados. Como nós não conhecemos
Um consumidor pode entrar em praticamente qualquer loja nem confiamos nesse outro editor de fotos, você também não deve! E,
e fazer uma compra apresentando apenas um cartão de não, nós não o deixaremos usar as suas fotos com esse editor, porque
plástico e uma identidade com foto. O comprador e o somos nós que lhe fornecemos o espaço de armazenamento e, na
lojista sequer precisam trabalhar com a mesma moeda, falar verdade, as suas fotos são parcialmente nossas".
o mesmo idioma ou ter a mesma nacionalidade. Eles Você não conseguiria nem localizar as suas fotos, a não ser que
realmente precisam compartilhar um sistema global de soubesse, primeiramente, em qual aplicativo elas foram criadas. "Qual
editor de fotos usei para fotografar o aniversário do Stevie? Não
comunicações e uma rede global de bancos que permitam
consigo localizá-las!"
ao comprador carregar consigo, para qualquer lugar, os
E, o que acontece quando aquele editor de fotos de vanguarda,
seus serviços bancários, e que forneçam apoio de infra-
supermoderno, falir e desaparecer? Todas as suas fotos desaparecerão
estrutura ao lojista. E se a Internet pudesse fornecer com ele!
proteções e serviços similares para que usuários e
Já viu esse filme antes? Acontece com todos nós, todos os dias,
administradores de sites da Web pudessem compartilhar usando sites e aplicativos Web. O isolamento de domínio evita que
informações? você use as suas listas de música para comprar canções similares em

D esenvolver aplicativos que residem no navegador da Web é uma loja online independente (desvinculada do fabricante do MP3
muito parecido com olhar as vitrines da Main Street: muitas lojas player) ou em um quiosque de uma loja de varejo.
onde comprar, milhares de coisas lindas para serem admiradas nas O isolamento de domínio também dificulta muito a construção de
vitrines de cada loja, mas impossíveis de adquirir. Frau Browser, a sua aplicativos Web leves de infra-estrutura baixa que “retalham e
cruel madrasta alemã, puxa a sua coleira sempre que você pensa em dividem” dados extraídos dos vários servidores de dados de uma rede
chegar mais perto do vidro. Ela diz que é para o seu próprio bem, mas corporativa. Um subdomínio "foo.bar.com" de sua rede corporativa
você começa a desconfiar que a guia da coleira, assim curta, é mais interna "bar.com" é tão isolado da "bar.com" e "bee.bar.com" como de
para a comodidade dela do que para sua segurança. seus endereços externos, por exemplo, xyz.com.
Os navegadores Web isolam páginas que residem em vários domínios No entanto, ninguém pensa em abrir completamente suas defesas e
para evitar que fiquem espiando as informações, umas das outras, sair distribuindo flores... As ameaças aos dados e à segurança pessoal,
sobre o usuário final. Nos primeiros momentos da Internet, esse que a rígida política de isolamento de domínio do navegador protege,
modelo de isolamento era adequado porque poucos eram os sites que é real e maldosa. Com reflexão e infra-estrutura cuidadosas, pode
adicionavam lógica de aplicativo significativa no cliente do navegador haver um meio bom que proporcione maior benefício ao usuário
e, mesmo aqueles que o faziam estavam apenas acessando dados do mantendo, ao mesmo tempo, as práticas de segurança necessárias. Os
próprio servidor. Cada servidor Web era o seu próprio silo, só com usuários devem ter controle sobre quando, o quê e quanto de suas
vínculos HTML para conteúdo externo. informações estão disponíveis para um determinado site da Web. Não
Isso não é a Internet de hoje. A experiência da Internet evoluiu para se trata de liberar o fluxo das informações em todas as direções, mas
agregar dados de vários domínios. Esta agregação é dirigida pela de dar liberdade aos usuários para usar os próprios dados no local e
personalização de sites pelo usuário, assim como sites que adicionam no momento em que isso atender aos seus objetivos,
valor agrupando as combinações de diversas fontes de dados. Neste independentemente do local de residência dos dados.
mundo, o modelo de isolamento de domínio do navegador Web Precisa-se de um meio para que o navegador suporte o acesso
torna-se um enorme obstáculo, impedindo o desenvolvimento do legítimo aos dados da travessia entre domínios, sem comprometer a
aplicativo Web do lado do cliente. Para evitar esse obstáculo, os segurança e o controle de dados do usuário final.
programadores de aplicativos Web estão, cada vez mais, transferindo Um grande passo nessa direção é a proposta de desenvolvimento de
lógica de aplicativo para os seus servidores Web, sacrificando a padrõesa, organizada por Ian Hickson, com o objetivo de estender o
escalabilidade do servidor, apenas para fazer o que precisa ser feito. xmlHttpRequest para dar suporte às conexões da travessia entre
Enquanto isso, o terminal “burro” de 2GHz e 2GB do usuário está domínios utilizando opt-in/opt-out baseado em domínio pelo servidor
inativo. solicitado no momento. (Vide referências.) Se esse procedimento
Se os PCs fossem construídos como um navegador Web, seria possível sobreviver à revisão dos colegas e for implementado por grande parte
gravar os dados no disco, mas seria impossível usar esses arquivos com dos navegadores, haverá esperança de se diminuir a barreira da
qualquer outro aplicativo da máquina ou na máquina de qualquer travessia entre domínios para usos legítimos e, ainda, oferecer
outra pessoa. Se você decidisse trocar para outro produto editor de proteção contra usos ilegítimos. Realisticamente, todavia, muito tempo
fotos, não poderia editar nenhuma das fotos antigas. Se você passará antes da implementação desta proposta pela maioria dos
reclamasse com os fabricantes do seu editor de fotos anterior, eles não navegadores de todo o setor.

14 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Comunicação Segura na Travessia

conteúdo que o iframe exibe, no momento, mas pode


Figura 1: transferência de dados do iframe URL
fazer com que o iframe exiba outra coisa.
Cada vez que um novo URL é atribuído à propriedade
src do iframe, este passará por todas as etapas normais
Host page (foo.com/main.html) de carregamento de uma página, inclusive disparar o
evento onLoad.
function sendData() { Temos agora todas as peças necessárias para transferir
iframe.src = “http://bar.com/receiver.html#data_here”; dados do host para o iframe no URL. (Vide Figura 1.) A
}
página host do domínio foo.com pode colocar um
pacote de dados codificado em URL ao final de um
Hidden iframe (bar.com/receiver.html)
URL de documento existente no domínio bar.com. Os
dados podem ser carregados no URL como um
window.onLoad = function () { parâmetro de consulta usando o caractere ?
data = window.location.hash; (http://bar.com/receiver.html?datadatadata) ou como
} um marcador, usando o caractere #
(http://bar.com/receiver.html#datadatadata). Existe
uma enorme diferença entre esses dois tipos de URL,
que discutiremos logo a seguir.

“O ISOLAMENTO DE DOMÍNIO
Agora, o que se pode fazer? Existem padrões de comportamento
compatíveis com todos os navegadores que aceitam código JavaScript DIFICULTA MUITO A CONSTRUÇÃO DE
residente em um contexto de domínio de navegador, para observar as APLICATIVOS WEB LEVES E DE INFRA-
alterações feitas pelo JavaScript residente em outro contexto de
domínio, no âmbito da mesma instância de navegador. Por exemplo,
ESTRUTURA BAIXA, QUE RETALHAM E DIVIDEM
as mudanças feitas na propriedade largura ou altura de um iframe são DADOS EXTRAÍDOS DOS VÁRIOS SERVIDORES DE
observáveis nas partes interna e externa do iframe. Outro exemplo é a DADOS DE UMA REDE CORPORATIVA. NO
propriedade iframe.src. O código externo ao iframe não pode ler a
propriedade src URL do iframe, mas pode escrever nela. Dessa forma, ENTANTO, NINGUÉM PENSA EM ABRIR
o código externo ao iframe pode enviar dados para dentro do iframe COMPLETAMENTE SUAS DEFESAS E SAIR
por intermédio do URL do iframe.
DISTRIBUINDO FLORES".
Esta técnica de URL tem sido usada por programadores Web desde a
primeira introdução dos iframes no HTML, mas os usos são A página host atribui este URL à propriedade src do iframe. O iframe
tipicamente primitivos, construídos para um fim específico e carrega a página e dispara a rotina de tratamento do evento onLoad
agrupados sem critério. E o que é pior, transferir dados por iframe src da página. A rotina de tratamento do evento onLoad da página do
URL pode criar um vetor exploit, permitindo que códigos maliciosos iframe pode procurar seu próprio URL, localizar o pacote de dados
corrompam o estado do seu aplicativo Web, jogando lixo no seu integrado e decodificá-lo para decidir o que deve ser feito a seguir.
iframe. Qualquer código, em qualquer contexto do navegador, pode Isto resume a técnica de transferência de dados do URL iframe à sua
escrever na propriedade src do iframe e o iframe receptor não saberá forma mais simples. O host constrói um string URL de um URL de
qual a origem dos dados do URL. Na grande parte das situações, documento conhecido + carga de dados, faz a sua atribuição à
nunca é possível confiar em dados de origem desconhecida. propriedade src do iframe, o iframe "acorda" na rotina de tratamento
Este artigo explorará as questões e as soluções técnicas do canal do evento onLoad e recebe a carga de dados. O que mais você
seguro de dados da travessia entre domínios do lado do cliente, poderia querer?
desenvolvido pelo grupo da Windows Live Developer Platform.
Na verdade, muito mais. Esta técnica simples traz em si muitas
Técnica IFrame URL limitações:
Um iframe é um elemento HTML que encapsula e exibe um "
nenhuma confirmação de recebimento. A página host não sabe se o
documento HTML, completo, dentro de si mesmo, permitindo ao
iframe recebeu os dados, com sucesso;
usuário exibir um documento HTML dentro de outro. Vamos chamar a
página externa ou a página host de pai do iframe e a página interna, "
substituição de mensagens. O host não sabe quando o iframe conclui
de conteúdo do iframe. A página interna do iframe é especificada o processamento da mensagem anterior e, assim, não sabe quando
atribuindo-se uma URL à propriedade src do iframe. é seguro enviar a próxima mensagem;
Quando o URL fonte do iframe tem o mesmo nome de domínio do "
limites de capacidade. O URL não pode ser infinitamente longo e o
externo, página host, o JavaScript da página host pode navegar pelo limite de comprimento varia de acordo com a família do navegador.
DOM interno do iframe e visualizar todo o seu conteúdo.
O Firefox é compatível com URLs de até 40k, mais ou menos, mas o
Inversamente, o iframe pode navegar até sua cadeia pai e visualizar
IE define o limite em menos de 4k. Qualquer ocorrência mais longa
todos os seus irmãos DOM na página host e as respectivas
será truncada ou ignorada;
propriedades. Entretanto, quando o URL fonte do iframe tem um
domínio diferente daquele da página host, o host não pode visualizar "
dados de origem desconhecida. O iframe não sabe quem coloca os
o conteúdo do iframe e este não pode visualizar o conteúdo da dados no seu URL. Os dados podem vir de uma página host
página host. amigável, como no nosso caso, foo.com ou podem ser códigos
Mesmo que o host não possa ler a propriedade src do elemento maliciosos da evil.com na bar.com, esperando que qualquer coisa
iframe, ele ainda poderá escrever nele. A página host não conhece o 'pegue ou estoure';

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 15


Comunicação Segura na Travessia

"
sem respostas. Não é possível ter um script no iframe que devolva COMO OS NAVEGADORES TRATAM OS URLS SE
dados para a página host; FOREM UTILIZADOS PARÂMETROS DE CONSULTA
"
perda de contexto. Como a página é recarregada a cada mensagem, OU URLS COM MARCADORES.
a página interna do iframe não pode atualizar o estado global em
todas as mensagens.
Ocultar dados em marcadores Os URLs http://bar.com/page.html#one, http://bar.com/page,
html#two e http://bar.com/page.html#three são considerados pelo
Devemos usar ? ou # para vincular dados ao final do iframe URL?
Embora bastante inócuas na superfície, existem, de fato, algumas navegador equivalentes ao cache de http://bar.com/page.html. Se
diferenças significativas sobre como os navegadores tratam os URLs se parâmetros de consulta tiverem sido utilizados, o navegador verá três
forem utilizados parâmetros de consulta ou URLs com marcadores. URLs diferentes e três viagens pela rede. Contudo, se usarmos
Dois URLs com o mesmo caminho de base, mas parâmetros de marcadores teremos, no máximo, uma viagem pela rede; as
consulta diferentes são tratados como URLs diferentes. Aparecerão solicitações subseqüentes serão preenchidas a partir do cache local do
separadamente na lista de histórico do navegador, serão entradas
navegador. (Vide Figura 2.)
separadas no cache da página do navegador e gerarão solicitações de
trabalho separadas em toda a rede. Para os casos em que precisamos enviar grande volume de mensagens
Os marcadores URL foram projetados para fazer referência a tags- pelo iframe URL usando o mesmo URL de base, os marcadores são
âncora especialmente marcados em uma página. O navegador perfeitos. As cargas de dados na porção do marcador do URL não
considera dois URLs com o mesmo caminho de base, mas com texto aparecerão no histórico do navegador, nem no cache da sua página. E,
de marcador diferente após o caractere #, como o mesmo URL no que ainda mais: as cargas de dados nunca atravessarão a rede depois que a
se refere ao histórico e aos caches do navegador. Os marcadores carga da página inicial estiver no cache!
diferentes estão apenas apontando para partes diferentes da mesma
Os dados transferidos entre a página host e o iframe não podem ser
página (URL), mas, apesar de tudo, é a mesma página.
visualizados por quaisquer outros elementos DOM da página host
porque o iframe está em um contexto de domínio diferente daquele
“DEVEMOS USAR ? OU # PARA VINCULAR DADOS da página host. Os dados não aparecem no cache do navegador e não
AO FINAL DO IFRAME URL? EMBORA BASTANTE atravessam a rede; assim, faz sentido dizer que os pacotes de dados
INÓCUAS NA SUPERFÍCIE, EXISTEM, DE FATO, são apenas observáveis pelo iframe receptor ou por outras páginas
ALGUMAS DIFERENÇAS SIGNIFICATIVAS SOBRE servidas pelo domínio bar.com.

Figura 2: Equivalência cache de URLs de marcador

Navegador Histórico do Cache do Web Server


Navegador Navegador

Internet
Solicitação Adicionar Cache
http://bar.com/page.html?one histórico fill

Solicitação
http://bar.com/page.html?two
Solicitação
http://bar.com/page.html?three

Solicitação
http://bar.com/page.html#one Cache fill

Solicitação Cache
http://bar.com/page.html#two hit
Solicitação
http://bar.com/page.html#three Cache
hit

16 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Comunicação Segura na Travessia

Identificação do remetente Figura 3: mensagem em uma garrafa de Klein


Talvez o maior problema de segurança com a
simples técnica de transferência de dados para o
iframe URL seja a dúvida sobre a origem dos dados.
Incorporar o nome do remetente ou alguma forma Host page (foo.com/main.html)
de ID do aplicativo não resolve, pois isso pode ser function sendDataToBar() {
facilmente copiado por fraudadores. É preciso ter iframe.src“ = http://bar.com/receiver.html#data_here”;
uma forma para que a mensagem, implicitamente, }
identifique o remetente de modo a não ser
facilmente copiada. Hidden iframe (bar.com/receiver.html)
Para muitas pessoas, a primeira solução que vem à
window.onLoad = function () {
mente seria usar um tipo de criptografia, com chaves
data = window.location.hash;
cuja posse ficasse apenas com o remetente e o }
destinatário. Este procedimento seria eficiente, mas é function sendDataToFoo(){
uma solução extremamente manual, especialmente iframe2.src = “http://foo.com/receiver.html#data_here”;
quando existe o envolvimento do JavaScript.
Existe uma outra forma, que aproveita a importância
iframe2 (foo.com/receiver.html)
crítica da identidade do nome do domínio no
ambiente do navegador. Se eu posso enviar uma window.onLoad = function () {
mensagem secreta para você usando o seu nome de window.parent.parent.receiveFromBar(
domínio e se, mais tarde, eu receber esse segredo window.location.hash);
}
como parte de um pacote de dados, poderei
deduzir, razoavelmente, que o pacote de dados tem
origem no seu domínio.
A única forma do segredo vir de um domínio E então, como o iframe pode voltar a se comunicar com a página
diferente será se o seu domínio ou o navegador do usuário estiverem
host? Não indo para cima, mas para baixo. O iframe não pode atribuir
comprometidos ou se o meu DNS estiver comprometido. Todas as
a nada em seu pai porque os dois residem em contextos de domínio
apostas estarão erradas se o seu domínio ou navegador estiver
comprometido. Se a contaminação do DNS é uma preocupação real, diferentes. Mas o iframe bar.com (A) pode conter outro iframe (B) e 'A'
pode-se usar https para constatar se as solicitações de resposta do pode atribuir um URL à propriedade src de 'B' no domínio da página
servidor para um determinado nome de domínio são, de fato, do host (foo.com). A página host foo.com contém o iframe bar.com (A)
servidor legítimo. que contém o iframe foo.com (B).
Se o remetente fornecer o segredo ao destinatário, o destinatário Ótimo, mas o que aquele iframe interno pode fazer? Não muito com o
fornecer o segredo ao remetente e os dois segredos forem seu pai, o iframe bar.com. Mas, suba um nível e você encontrará ouro:
transportados em todos os pacotes de dados transmitidos pelo canal o pai do pai de 'B' é a página host em foo.com. A página de 'B' está em
de dados do iframe URL, as duas partes poderão ter confiança quanto foo.com, B.parent.parent está em foo.com e, assim, 'B' pode ter acesso
à origem de cada mensagem. Códigos maliciosos incluídos por a tudo na página host e chamar as funções do JavaScript no contexto
evil.com podem ser facilmente reconhecidos e descartados. A troca de da página host.
segredos é inspirada pelo protocolo de três fases SSL/https.
A página host pode transferir dados para o iframe 'A' escrevendo um
Esses segredos não precisam ser complexos, nem criptografados, já
URL em uma propriedade src de 'A'. 'A' pode processar os dados e
que os pacotes de dados enviados pelo canal de dados do iframe URL
enviar uma confirmação para o host escrevendo um URL na
não são visíveis a terceiros. Números randômicos funcionam bem
quando usados como segredos, com um porém: o gerador de número propriedade src de 'B'. 'B' acorda em seu evento onLoad e transfere a
randômico do JavaScript (Math. random()) não é robusto em termos mensagem até o seu pai do pai, a página host. Pronto! Confirmação
de criptografia e, portanto, é um risco na produção de seqüências de de ida e volta de uma série de pipes unidirecionais conectados juntos
números previsíveis. O Firefox fornece um gerador de número de tal forma que, provavelmente, seria muito divertido para Felix Klein,
randômico robusto para esse fim (crypto.random()), mas o IE não. o matemático e faz-tudo.
Assim sendo, em nossa implementação optamos por gerar números
Destinatário stateful
randômicos robustos no servidor Web, enviando-os para o cliente,
conforme necessário. Para manter o estado global no contexto de bar.com em todas as
várias mensagens enviadas para o iframe, use dois iframes com as
Envio para o remetente
páginas de bar.com. Use um dos iframes como um destinatário de
A maioria dos problemas associados à técnica de transferência de
mensagem stateless, recarregando e perdendo o seu estado com
dados do iframe URL fica reduzida na geração de respostas. Confirmar
todas as mensagens recebidas. Coloque a lógica do aplicativo stateful
o recebimento de pacotes exige que o destinatário envie uma resposta
ao remetente. Trocar segredos exige respostas bidirecionais. Controlar do lado bar.com em outro iframe. Reduza a lógica da página iframe do
o fluxo das mensagens e quebrar grandes volumes de dados em várias mensageiro ao essencial exigido para transferir os dados recebidos ao
mensagens menores exige confirmação de recebimento. iframe stateful bar.com.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 17


Comunicação Segura na Travessia

“SE EU POSSO ENVIAR UMA MENSAGEM grande banco, em uma grande cidade, para fazer o câmbio para a
SECRETA PARA VOCÊ USANDO O SEU NOME DE moeda local. Cheques de outra praça eram raramente aceitos e
crédito direto da loja era oferecido apenas aos residentes locais.
DOMÍNIO E SE, MAIS TARDE, EU RECEBER ESSE
Hoje, consumidores e lojistas compartilham sistemas de comunicações
SEGREDO COMO PARTE DE UM PACOTE DE
e redes de bancos globais que permitem ao comprador levar consigo
DADOS, PODEREI DEDUZIR, RAZOAVELMENTE, os serviços bancários aonde quer que vá, e ajuda o lojista a realizar
QUE O PACOTE DE DADOS TEM ORIGEM NO SEU vendas as quais, de outra forma, poderia perder. A rede bancária
DOMÍNIO. SE A CONTAMINAÇÃO DO DNS É UMA também fornece suporte de infra-estrutura ao lojista, ajudando-o com
PREOCUPAÇÃO REAL, PODE-SE USAR HTTPS câmbio, dando cobertura contra o risco de crédito e reduzindo os
prejuízos decorrentes de fraude.
PARA CONSTATAR SE AS SOLICITAÇÕES DE
Agora, por que a Internet não pode fornecer proteções e capacitações
RESPOSTA DO SERVIDOR PARA UM
similares ao usuário itinerante da Web, assim como serviços de infra-
DETERMINADO NOME DE DOMÍNIO SÃO, DE FATO, estrutura para administradores de sites na Web? Levar os dados e a
DO SERVIDOR LEGÍTIMO.” experiência consigo enquanto passa de um site para outro (da mesma
Um iframe não pode enumerar os filhos de seu pai para localizar forma que um cartão de débito oferece os seus serviços de banco a
outros irmãos de bar.com, mas pode procurar um iframe irmão você durante as compras), revelando informações aos administradores
usando window.parent.frames[], se ele souber o nome do iframe de sites apenas a seu critério. A Internet vai chegar lá - é apenas uma
irmão. Cada vez que é recarregado para receber novos dados no URL, questão de tempo e qualidade.
o iframe mensageiro pode procurar o seu iframe irmão stateful
Agradecimentos
bar.com utilizando window.parent.frames[] e chamar uma função do
iframe stateful para transferir os dados da nova mensagem para o Obrigado a Scott Issacs pelo conceito original da transferência de
iframe stateful. Assim, o contexto do domínio bar.com na memória do dados do iframe URL. Meus agradecimentos a Yaron Goland e Bill
navegador pode acumular pedaços de mensagem, de várias Zissimopoulos por suas importantes contribuições às primeiras
mensagens, para reconstruir uma carga de dados superior ao implementações e à depuração do código de canal e a Gabriel
comprimento máximo do URL do navegador. Corverra e Koji Kato pelo trabalho nas iterações mais recentes.
“É absolutamente insano, mas até pode ser que funcione!”
Aplicação de idéias
A equipe da Windows Live Developer Platform desenvolveu essas
idéias em uma biblioteca de "canal" do JavaScript. Esses canais de Referências
travessia entre domínios são usados na implementação dos controles XMLHttpRequest 2, Ian Hickson
Web de Windows Live Contacts e Windows Live Spaces (http://dev.live. http://www.mail-archive.com/public-webapi@w3.org/msg00341.html
com), destinados a residir em páginas Web de terceiros, mas http://lists.w3.org/Archives/Public/public-webapi/2006Jun/0012.html
executados em um iframe seguro no contexto do domínio live.com. Weblog de Anne van Kesteren:
Os controles fornecem aos sites de terceiros acesso controlado de http://annevankesteren.nl/2007/02/xxx
usuários aos dados do Windows Live como, por exemplo, a lista de
contatos do usuário ou álbuns de fotos do Space. O objeto (canal) é
Sobre o autor
compatível com o envio arbitrário de grandes volumes de dados pelas
fronteiras de domínio do iframe com confirmação de recebimento, Danny Thorpe é desenvolvedor da equipe da Windows Live
controle de fluxo de mensagens, partição de mensagens, identificação Developer Platform. Está escrito no seu crachá: Principal SDE, mas ele
do remetente e tudo isso acontece de modo oculto. prefere “Windows Live Quantum Mechanic” já que gasta muito mais
tempo persuadindo com paciência pequenos bits teimosos a migrar
Nossa meta é cuidar para que este código de canal seja uma
por barreiras impenetráveis. Em outras vidas, ele trabalhou com
biblioteca reutilizável, disponível a todos os parceiros internos da
"tecnologia de navegador não divulgada" na Google e, antes disso, era
Microsoft e também de desenvolvedores Web de terceiros. O código
cientista-chefe na Borland e arquiteto-chefe do compilador Delphi. Na
está sendo bem executado em seus contextos atuais mas, ainda assim,
Borland, teve a boa sorte de trabalhar com Anders Hejlsberg, Chuck
temos de executar alguns trabalhos nas áreas de auto-diagnóstico e
Jazdzewski, Eli Boling e muitas outras lendas da Borland como
localização de defeitos - se as pontas deste canal estiverem
mentores. Não se lembra dos acontecimentos anteriores ao ingresso
configuradas corretamente, ele trabalha muito bem, mas pode ser um na Borland, porque era muito jovem. Visite o seu blog no endereço:
grande pesadelo descobrir o que não está muito certo, no momento http://blogs.msdn.com/dthorpe.
em que você for configurá-lo pela primeira vez. O principal obstáculo
é o próprio navegador: tentar ver o que (não) está acontecendo em
diferentes contextos do domínio é um grande desafio, quando o
navegador não mostra o que acontece do outro lado do muro.
Capacitação do usuário
Há pouco menos de 40 anos, um consumidor da Main Street, EUA,
tinha de se esforçar bastante para convencer um lojista a aceitar o
pagamento. Se não tivesse dinheiro vivo (muito!), provavelmente você
estaria sem sorte. Se tivesse outra moeda, precisaria encontrar um

18 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Um modelo orientado a
aplicativo para dados
relacionais
por Michael Pizzo

Resumo aplicativos construídos desde o início como parte de um framework


corporativo maior, a lógica de acesso aos dados é quase sempre
A maior parte dos aplicativos lida com dados de um tipo partida em uma camada separada de abstração de dados, ou DAL
ou de outro e, quase sempre, a fonte é um banco de (Data Abstraction Layer). Quer como parte do aplicativo ou
componente separado, premissas implícitas permanentes sobre
dados. E ainda, por vários motivos, o formato dos dados
esquema, relacionamentos, convenções de uso e padrões de acesso do
do banco de dados, com freqüência, não corresponde ao banco de dados tornam cada vez mais difícil atualizar ou estender esse
aplicativo que deve interagir com eles. Este artigo código de acesso aos dados com o passar do tempo, especialmente
descreve como trabalhar com os dados do banco de devido às mudanças do esquema de base.

dados por meio de um "modelo conceitual" mais Analisemos alguns desses problemas, mais detalhadamente.
adequado ao aplicativo. Normalização do esquema de banco de dados
Os dados de um banco de dados são geralmente apresentados em
uma visão “normalizada” conforme descrito pelo Dr. Codd, com
Modelos de aplicativos vs esquemas de armazenamento
tabelas separadas, homogêneas (retangulares) contendo colunas de
Os aplicativos modernos, particularmente os que se destinam à Web, valores escalares únicos. A redundância fica reduzida para aprimorar a
tratam fundamentalmente de expor e manipular dados de um tipo ou integridade dos dados pela movimentação de valores não específicos
de outro. Os dados podem estar na forma de resultados de pesquisa,
da linha, em outra tabela. Os dados dessas tabelas individuais
catálogo de inventário, perfil de usuário, informações de contas,
combinam-se por meio de associações, com base no conhecimento
financeiras, pessoais, coordenadas de mapas, condições atmosféricas,
etc., mas tudo são dados e, de modo geral, armazenados em um implícito do aplicativo sobre o que representam os diferentes valores
banco de dados, em algum lugar. de cada coluna. Chaves externas podem ou não ser usadas entre
tabelas de informações correlatas como um meio de reforçar ainda
Contudo, os dados armazenados no banco de dados, em geral, não
mais a integridade dos dados; todavia, elas mesmas não definem os
estão no formato mais adequado para o aplicativo manipular ou expor
caminhos de navegação, nem as condições da associação.
ao usuário. O modelo de dados relacionais do esquema de banco de
dados é tipicamente (e com razão) otimizado de acordo com as “OS ATUAIS APLICATIVOS ORIENTADOS A OBJETO,
preocupações de armazenamento e integridade, não para o uso do
SEM MENCIONAR OS USUÁRIOS FINAIS, TENDEM A
aplicativo.
RACIOCINAR SOBRE OS DADOS EM TERMOS MAIS
Como explica Dr. Peter Chen em seu artigo revolucionário que
introduz o modelo entidade/relacionamento (ERM, Entity-Relationship
RICOS DO QUE LINHAS E COLUNAS PLANAS DE UM
Model): “O modelo relacional… pode alcançar um elevado nível de BANCO DE DADOS RELACIONAIS”.
independência dos dados, mas pode perder algumas informações
Vamos analisar este exemplo. Imagine-se administrador uma marina
semânticas importantes sobre o mundo real." Em seu artigo, prossegue
que vende embarcações usadas e deseja controlar os estoques em um
descrevendo um ERM alternativo que "... adota a visão mais natural, ou
seja, o mundo real compreende entidades e relacionamentos". (Vide banco de dados para ser exibido aos clientes por meio de um
referências) aplicativo Web. As informações a serem armazenadas para cada barco
são: Registration (registro), Make (fabricante), Year (ano), Length
Simplificando, os atuais aplicativos orientados a objeto, sem
(comprimento) e Beam (width) [boca (largura)]. Para os barcos a motor,
mencionar os usuários finais, tendem a raciocinar sobre os dados em
você quer ter Make, Model, Year, Horsepower [potência (HP)], Type of
termos mais ricos do que linhas e colunas planas de um banco de
dados relacionais. O "mundo real" inclui uma forte noção do tipo do fuel (tipo de combustível) e SerialNumber (número de série) do(s)
objeto, sua identidade e suas relações com outros objetos. motor(es). Um esquema totalmente normalizado pode desdobrar as
informações sobre o motor em três tabelas separadas: uma com as
Deixando de lado as questões de expressividade por um momento,
informações de um tipo de motor específico (Make, Model,
ainda que todos os conceitos do aplicativo pudessem ser
Horsepower e FuelType, sendo que Make e Model formam uma chave
representados por meio do modelo relacional, o autor do aplicativo,
com grande freqüência, não tem controle sobre o esquema do banco composta), outra para cada motor atual (SerialNumber (número de
de dados. E, ainda pior, o esquema poderia mudar com o tempo para série), Year, Make e Model) e uma terceira que associa barcos e
otimizar vários padrões de uso, invalidando caminhos de acesso motores. O esquema resultante pode ser similar ao da Figura 1.
permanentes, mapeamentos e premissas implícitas. Com o intuito de apresentar uma página de estoque relativamente
Aplicativos pequenos começam, em geral, incorporando diretamente a simples, com o número de registro do barco, ano e fabricante, com as
lógica para mapear o esquema relacional de acordo com os objetos de respectivas informações do motor, para todos os barcos a motor, o seu
dados do aplicativo. Na medida em que o aplicativo cresce, ou para os aplicativo Web pode usar a seguinte consulta:

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 19


Modelo Orientado a Aplicativo para Dados

Figura 1: Esquema totalmente normalizado

Boats EngineTypes

RegNum Year Make Length Beam Make Model HP Fuel


WN123AB 1977 Hunter 25 8 Clinton K990 9.9 Gas
WN234CD 1999 Calabria 23 8’7” Mercruiser 350MagMPI 300 Gas
WN345EF 1962 Del Mar 16 6’ Mercury Mark30 30 Gas
WN456GH 1957 Harvey 13.5 5’10” Tohatsu M50CEPTS 50 Gas
WN567IJ 1997 Seadoo 9 3’10” Rotax 720CC 85 Gas
WN678KL 1996 Bayliner 47 14’11” Hino W06DTA 310 Diesel
… … … … … … … … …

Engines Boat Engines

SerialNum Year Make Model EngineSerialNum BoatID


C1075 1975 Clinton K990 C1075 WN123AB
M30099 1999 Mercruiser 350MagMPI M30099 WN234CD
M3060 1962 Mercury Mark30 M3060 WN345EF
T5090 1990 Tohatsu M50CEPTS T5090 WN456GH
R8596 1997 Rotax 720CC R8596 WN567IJ
H31096A 1996 Hino W06DTA H31096A WN678KL
H31096B 1996 Hino W06DTA H31096B WN678KL
… … … … … …

SELECT Boats.RegNum, Boats.Year AS Boat_Year, dados daquele momento, incluir esse tipo de lógica implícita em
Boats.Make AS Boat_Make, BoatEngine.SerialNumber, consultas, dentro do aplicativo, introduz dependências sutis sobre
BoatEngine.Year AS Engine_Year, BoatEngine.Make
dados e esquema, difíceis de acompanhar e atualizar.
AS Engine_Make, BoatEngine.Model AS Engine_Model,
BoatEngine.HP Evidentemente, ainda que o esquema seja normalizado de modo hábil
FROM Boats pela perspectiva do banco de dados, não está em uma forma muito
INNER JOIN (
conveniente para o aplicativo. E, o que é pior, para recuperar as
SELECT EngineType.Make, BoatEngines.BoatID,
EngineTypes.HP informações desejadas (sem mencionar as atualizações como, por
FROM EngineTypes exemplo, instalar um motor em outro barco), o conhecimento
INNER JOIN (Engines implícito sobre os relacionamentos entre as tabelas deve ser incluído
INNER JOIN BoatEngines no aplicativo. Mudanças do esquema como, por exemplo, combinar as
ON Engines.SerialNumber =
tabelas Engines e BoatEngines (um DBA deve considerar um nível
BoatEngines.EngineSerialNum)
ON EngineTypes.Model = Engines.Model
razoável de desnormalização para melhorar o desempenho) faz com
AND EngineTypes.Make = Engines.Make que o aplicativo pare, dificultando resolver e prever quando isso
) AS BoatEngine acontecerá.
ON Boats.RegNum = BoatEngine.BoatID
Representação da herança
Esta consulta não apenas é bastante complexa, como exige (e Agora, digamos que seja preciso acrescentar outras informações ao
incorpora) um entendimento implícito de como as tabelas se esquema. Primeiramente, deixa-se explícita a diferença entre sailboats
relacionam: as colunas Make e Model da tabela Engines relacionam-se e vários tipos de motorboats com a adição da coluna "Style" (estilo) à
com as colunas Make e Model da tabela EngineTypes e as colunas tabela. Em seguida, para os sailboats, adiciona-se Type of Keel (tipo da
EngineSerialNum e BoadID da tabela BoatEngines relacionam-se com quilha) (fixa, swing ou dagger) e o número de velas. Com relação aos
as colunas SerialNum e RegNum das tabelas Engines e Boats, SkiBoats (barcos para esqui aquático), adiciona-se se há mastro para
respectivamente. esqui e/ou uma torre e, para MotorYachts (iates a motor), se têm ou
Além disso, a consulta tenta produzir um resultado que tenha apenas não um flybridge. Esse procedimento torna-se desafiador como
motorboats (barcos a motor) [e não sailboats (barcos a vela)] pela modelo de dados relacionais porque cada item de informação
associação interna entre barcos e motores. Por certo, esta consulta adicional só se aplica a um subconjunto de linhas dentro da tabela
deixaria de considerar quaisquer barcos a motor vendidos sem o Boats. Estender a tabela base ("Boats"), com membros de cada tipo
motor e, embora a consulta talvez excluísse pequenos barcos a vela, derivado, é uma forma de representar esse procedimento, utilizando a
barcos de grande porte (inclusive o barco a vela Hunter de 25') em notação Nulls nas linhas em que não se aplica. Por exemplo, essas
geral têm motores. Assim, embora a premissa possa estar válida no informações poderiam ser expressas em uma única tabela "Boats"
momento em que o aplicativo é escrito com base no esquema e nos esparsa como mostra a Figura 2.

20 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Modelo Orientado a Aplicativo para Dados

Figura 2: Representação da hierarquia em uma única tabela "Boats" esparsa

Barcos

RegNum Year Make Style Length KeelType Beam NumSails SkiPylon Tower Flybridge
WN123AB 1977 Hunter Sail 25 Fixed 8 3 Null Null Null
WN234CD 1999 Calabria Ski 23 Null 8’7” Null Yes No Null
WN345EF 1962 Del Mar Motor 16 Null 6’ Null Null Null Null
WN456GH 1957 Harvey Motor 13.5 Null 5’10” Null Null Null Null
WN567IJ 1997 Seadoo PWC 9 Null 3’10” Null Null Null Null
WN678KL 1996 Bayliner Yacht 47 Null 14’11” Null Null Null Yes
… … … … … … … … … … …

Como podemos ver, quanto mais propriedades adicionarmos a cada LEFT OUTER JOIN (
tipo derivado, mais cresce o esquema, a tabela no seu todo, e mais SELECT EngineTypes.Make, BoatEngines.BoatID,
campos sem relevância serão preenchidos com valores Null. Uma EngineTypes.HP
forma alternativa de representar essas mesmas informações seria FROM EngineTypes
desmembrar as informações adicionais relativas a Sailboats, SkiBoats e
INNER JOIN (Engines
MotorYachts em tabelas separadas, como ilustrado na Figura 3.
INNER JOIN BoatEngines
Este layout evita a necessidade de adicionar colunas esparsas à tabela ON Engines.SerialNumber =
base de cada propriedade do tipo derivado, mas o processo de
BoatEngines.EngineSerialNum)
consulta torna-se ainda mais complexo, pois cada consulta tem de ser
ON EngineTypes.Model = Engines.Model
associada às tabelas adicionais para incluir informações completas de
AND EngineTypes.Make = Engines.Make
cada um dos tipos derivados. Por exemplo, para trazer as informações
número de registro, ano, fabricante e respectivo motor para todos os ) AS BoatEngine
barcos a motor sem torre, precisamos elaborar uma consulta como a ON Boats.RegNum = BoatEngine.BoatID )
seguinte: LEFT JOIN SkiBoats
ON Boats.RegNum = SkiBoats.RegNum
SELECT Boats.RegNum, Boats.Year AS Boat_Year, WHERE Boats.Style In (“Ski”,”Motor”,”PWC”,”Yacht”)
Boats.Make AS Boat_Make, BoatEngine.SerialNumber, AND (SkiBoats.Tower=False OR SkiBoats.Tower IS NULL)
BoatEngine.Year AS Engine_Year, BoatEngine.Make
Observe-se que a tabela Boats deve ser associada à tabela SkiBoats,
AS Engine_Make, BoatEngine.Model AS Engine_Model, para obter a informação Tower (torre) e precisamos considerar o valor
BoatEngine.HP NULL em nosso predicado para as linhas que não se referem a barcos
FROM (Boats para esqui aquático.

Figura 3: de informações estendidas em tabelas separadas

Boats SailBoats

RegNum Year Make Style Length Beam RegNum KeelType NumSails


WN123AB 1977 Hunter Sail 25 8 WN123AB Fixed 3
WN234CD 1999 Calabria Ski 23 8’7” … … …
WN345EF 1962 Del Mar Motor 16 6’
SkiBoats MotorYachts
WN456GH 1957 Harvey Motor 13.5 5’10”
WN567IJ 1997 Seadoo PWC 9 3’10” RegNum SkiPylon Tower RegNum Flybridge
WN678KL 1996 Bayliner Yacht 47 14’11” WN234CD Yes No WN678KL Yes
… … … … … … … … … … …

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 21


Modelo Orientado a Aplicativo para Dados

Figura 4: Tabelas completamente separadas para cada tipo de barco

MotorBoats
Iates a motor
RegNum Year Make Length Beam
WN345EF 1962 Del Mar 16 6’ RegNum Year Make Length Beam Flybridge
WN456GH 1957 Harvey 13.5 5’10” WN678KL 1996 Bayliner 47 14’11” Yes
… … … … … … … … … … …

PWC
Barcos para esqui aquático
RegNum Year Make Length Beam RegNum Year Make Length Beam SkiPylon Tower
WN567IJ 1997 Seadoo 9 3’10” WN234CD 1999 Calabria 23 8’7” Yes No
… … … … … … … … … … … …

Barcos a vela
RegNum Year Make Length Beam KeelType NumSails
WN123AB 1977 Hunter 25 8’ Fixed 3
… … … … … … …

Mudanças do esquema Entidades ADO.NET


Na medida em que as tabelas crescem, o DBA pode decidir refatorar o Cada um desses exemplos destaca alguns dos desafios hoje
esquema para que todas as informações de um tipo específico de enfrentados pelos desenvolvedores de aplicativos que tentam expor,
barco estejam em evidência, conforme ilustrado pela Figura 4. manipular e manter modelos interessantes do mundo real em um
Este esquema otimiza as consultas de acordo com um único tipo de esquema relacional plano. O fato de que o esquema talvez não seja de
barco, à custa de consultar todos os tipos de barcos. E, logicamente, propriedade do desenvolvedor do aplicativo, e possa mudar com o
isso significa que as consultas no âmbito do aplicativo têm de ser tempo, ajuda a explicar os motivos pelos quais a variabilidade nas
modificadas. Nossa consulta sobre as informações de barcos e formas de acesso pode ocupar uma parcela desproporcional de um
motores transforma-se em: aplicativo ou framework em termos de código, desenvolvimento e
SELECT Boats.RegNum, Boats.Year AS Boat_Year, custo de manutenção.
Boats.Make AS Boat_Make, BoatEngine.SerialNumber,
Conheça o ADO.NET Entity Framework
BoatEngine.Year AS Engine_Year, BoatEngine.Make
AS Engine_Make,BoatEngine.Model AS Engine_Model, O produto ADO.NET Entity Framework será lançado no primeiro
BoatEngine.HP semestre de 2008 como uma extensão do .NET Framework, parte do
FROM (
Visual Studio da Microsoft, cujo codinome é “Orcas”; representa o
(SELECT RegNum, Year, Make, Tower FROM SkiBoats
UNION ALL SELECT RegNum, Year, Make, NULL As primeiro produto de uma nova Entity Data Platform da Microsoft para
Tower FROM MotorBoats trabalhar com dados em termos de um modelo de dados de entidades
UNION ALL SELECT RegNum, Year, Make, Null AS (EMD - Entity Data Model). O ADO.NET Entity Framework é uma
Tower FROM PWC implementação do modelo entidade/relacionamento do Dr. Chen
UNION ALL SELECT RegNum, Year, Make, Null AS
sobre os dados relacionais. Em lugar de deixar a representação de
Tower FROM MotorYachts
) AS Boats armazenamento definir o modelo do aplicativo, gravar em um modelo
LEFT OUTER JOIN ( conceitual comum proporciona aos aplicativos maior expressividade
SELECT EngineTypes.Make, BoatEngines.BoatID, na modelagem dos dados utilizando conceitos do mundo real, os
EngineTypes.HP quais podem ser mapeados de modo flexível, de acordo com uma
FROM EngineTypes
INNER JOIN (Engines variedade de representações de armazenamento. (Para mais
INNER JOIN BoatEngines informações sobre o ADO.NET Entity Framework, consulte
ON Engines.SerialNumber = Referências.)
BoatEngines.EngineSerialNum)
ON EngineTypes.Model = Engines.Model AND O Entity Framework usa o mecanismo visão do cliente (Client View)
EngineTypes.Make = Engines.Make para expandir consultas e atualizações gravadas no modelo conceitual
) AS BoatEngine em consultas, de acordo com o esquema de armazenamento. As
ON Boats.RegNum = BoatEngine.BoatID ) consultas expandidas são avaliadas inteiramente no banco de dados;
WHERE (Boats.Tower=False OR Boats.Tower IS NULL)
não há processamento de consultadas no lado do cliente. Essas visões
do cliente podem ser compiladas no aplicativo para desempenho, ou
Observe-se que, para consultar todos os tipos de barcos, incluindo a geradas no tempo de execução a partir do mapeamento de
coluna Tower, específica de SkiBoats, precisamos projetar metadados fornecido em arquivos XML, permitindo aos aplicativos
explicitamente um valor Null para aquele campo das outras tabelas implantados trabalhar de acordo com esquemas de armazenamento
em UNION ALL. diferentes ou em desenvolvimento, sem recompilação.

22 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Modelo Orientado a Aplicativo para Dados

Figura 5: Um modelo conceitual orientado a aplicativo


O Entity Framework permite expor esse modelo conceitual ao
aplicativo, utilizando conceitos de aplicativo como tipagem forte
(strong typing), herança e relações sobre qualquer um dos esquemas
de banco de dados anteriormente descritos. Como o mapeamento é
feito declarativamente, fora do aplicativo, isso significa que se o
esquema do banco de dados evoluir com o tempo para otimizar vários
padrões de acesso, apenas o mapeamento terá de ser modificado; o
aplicativo pode continuar a usar as mesmas consultas e recuperar os
mesmos resultados nos termos do mesmo modelo conceitual.
Vamos ver como o trabalho com esse modelo conceitual simplifica
nossos padrões de aplicativo.
Consultar o modelo conceitual
Considerando este modelo conceitual, consultar um único conjunto
polimórfico de barcos torna-se muito mais simples. Por exemplo, o
código seguinte usa esse esquema conceitual para consultar o ano de
registro, o fabricante e as informações do motor de todos os barcos a
motor sem torre.
SELECT boat.RegNum, boat.Year, boat.Make,
boat.Engines
FROM Boats AS boat
WHERE boat IS OF (Motorboat)
AND (Boat IS NOT OF (SkiBoat)
OR TREAT(boat AS SkiBoat).Tower = False)
Um modelo de aplicativo
Observe-se que não são necessárias associações na consulta; as
A Figura 5 ilustra um modelo de dados orientado a aplicativo, mais entidades são fortemente tipadas, as relações são transversais às
adequado ao nosso aplicativo Web. Observe-se que, embora eu use propriedades e as coleções podem ser filtradas de acordo com os
uma classe de diagrama para representar o modelo, os objetos são tipos dentro da hierarquia.
apenas um modo de expor o modelo conceitual para o aplicativo no
Entity Framework. O mesmo modelo conceitual poderia ser Resultados aninhados
direcionado diretamente, usando uma gramática SQL estendida e Em cada uma das três consultas gravadas diretamente de acordo com
devolvida como registros polimórficos hierárquicos. o esquema do banco de dados, os resultados teriam uma aparência
O primeiro fato a se notar sobre este modelo é que não se parece similar ao ilustrado pela Figura 6. Observe-se que o último barco
nada com qualquer dos esquemas de armazenamento anteriores. Por (BayLiner 1996) aparece duas vezes. Analisando os dados, vemos que o
exemplo: BayLiner 1996 é um MotorYacht com dois motores Hino 310. Como os
dados relacionais são planos, não há uma boa forma de representar
1. A classe do motor contém informações das tabelas EngineTypes
vários motores em uma única linha de resultado e, por isso, há duas
(Make, HP e Fuel) e Engines (Year e SerialNum).
linhas de resultado para o mesmo barco, uma para cada motor.
2. Em lugar de uma propriedade BoatID, a classe Engine contém
A consulta feita ao modelo conceitual resulta em uma coluna
referência a um barco. "Engines" com uma única linha para cada barco, com uma coleção de
3. Os barcos contêm uma coleção de zero ou mais motores. motores, conforme ilustra a Figura 7.
4. Em lugar de expor uma propriedade Style em Boat, ou de ter Alternativamente, se apenas um subconjunto de dados de cada motor
tabelas diferentes para cada uma delas, utilizamos o conceito mais for desejado (por exemplo, Make e HP), essas informações podem ser
natural de herança para distinguir os tipos de diferentes de barcos. projetadas da seguinte forma:

Figura 6: Resultados aninhados resultantes de uma tabela retangular

RegNum Boat_Year Boat_Make SerialNum Engine_Year Engine_Make Engine_Model HP


WN234CD 1999 Calabria M30099 1999 Mercruiser 350MagMPI 300
WN345EF 1962 Del Mar M3060 1962 Mercury Mark30 30
WN456GH 1957 Harvey T5090 1990 Tohatsu M50CEPTS 50
WN567IJ 1997 Seadoo R8596 1997 Rotax 720CC 85
WN678KL 1996 Bayliner H31096A 1996 Hino W06DTA 310
WN678KL 1996 Bayliner H31096B 1996 Hino W06DTA 310
… … … … … … … …

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 23


Modelo Orientado a Aplicativo para Dados

Figura 7: Resultados em formato de tabela aninhada

RegNum Year Make Engines

WN234CD 1999 Calabria SerialNum Year Make Model HP


M30099 1999 Mercruiser 350MagMPI 300

WN345EF 1962 Del Mar SerialNum Year Make Model HP


M3060 1962 Mercury Mark30 30

WN456GH 1957 Harvey SerialNum Year Make Model HP


T5090 1990 Tohatsu M50CEPTS 50

WN567IJ 1997 Seadoo SerialNum Ye ar Make Model HP


R8596 1997 Rotax 720CC 85

WN678KL 1996 Bayliner SerialNum Year Make Model HP


H31096A 1996 Hino W06DTA 310
H31096B 1996 Hino W06DTA 310

… … … …

SELECT boat.RegNum, boat.Year, boat.Make, navegadas e atualizadas por propriedades tipadas sobre os objetos,
SELECT engine.Make, engine.HP em lugar de manipular valores-chave escalares externos. Os objetos do
FROM boat.Engines AS engine
negócio podem, opcionalmente, ser resolvidos pela identidade e
FROM Boats AS boat
WHERE boat IS OF (Motorboat) rastreados pelas modificações.
AND (Boat IS NOT OF (SkiBoat) O uso do modelo conceitual por meio de objetos do negócio é
OR TREAT(boat AS SkiBoat).Tower = False) ilustrado pelo seguinte exemplo de código. Este exemplo mostra
Observe-se que esta consulta ainda não exige que o desenvolvedor consultas feitas ao modelo conceitual para obtenção do resultado
escreva quaisquer associações; os campos relevantes do motor são barcos como objetos, navegar pelas propriedades até a coleção de
projetados como uma coluna aninhada utilizando 'boat.Engines' como motores e retirar qualquer motor cujo ano de fabricação seja diferente
a origem da subconsulta. daquele do barco. As mudanças são gravadas no banco de dados pelo
Visões diferentes para aplicativos diferentes comando SaveChanges().
Os frameworks de aplicativos Web quase sempre expõem diferentes // Specify query as an eSQL string
visões dos mesmos dados, através de diferentes aplicativos Web. Por string eSql =
exemplo, os dados expostos a clientes Web não autenticados podem “SELECT VALUE boat FROM Boats AS boat “ +
ser um subconjunto dos dados expostos a membros preferenciais, os “WHERE EXISTS(“ +
quais podem ser modelados diferentemente dos dados expostos à “SELECT engine from boat.Engines AS engine “ +
administração interna e aos aplicativos para emissão de relatórios. De “WHERE engine.Year != boat.Year)”;
modo similar, o esquema dos dados com os quais se trabalha dentro
do framework do aplicativo pode diferir significativamente do BoatInventory inventory = new BoatInventory();
esquema dos dados trocados nas transações B2B. O ADO.NET Entity ObjectQuery<Boat> motorizedBoats =
Framework facilita esses tipos de cenários ao permitir que vários inventory.CreateQuery<Boat>(eSql);
modelos conceituais sejam mapeados pelo mesmo esquema de banco // Include Engines in results
e dados. motorizedBoats.Span.Include(“Engines”);
// Loop through Engines for each Boat
Modelagem de resultados como objetos
foreach(Boat boat in motorizedBoats) {
O exemplo anterior mostra os resultados da pesquisa como registros. foreach(Engine engine in boat.Engines) {
No caso do ADO.NET Entity Framework, isto significa produzir if(engine.Year!= boat.Year)
resultados como um leitor de dados (DataReader) o qual foi estendido boat.Engines.Remove(engine);
para dar suporte às informações de tipo, polimorfismo, informações // alternatively
aninhadas e valores complexos. Com as entidades, também é possível // engine.Boat = null;
escrever consultas com base no mesmo modelo conceitual e produzir }
resultados como objetos do negócio fortemente tipados. Ao modelar }
os resultados como objetos do negócio, as relações podem ser inventory.SaveChanges();

24 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Modelo Orientado a Aplicativo para Dados

"O FATO DE QUE O ESQUEMA TALVEZ NÃO SEJA O ADO.NET Entity Framework permite aos aplicativos do usuário ter
como alvo um modelo conceitual utilizando conceitos do aplicativo
DE PROPRIEDADE DO DESENVOLVEDOR DO
como tipagem forte, herança e relações. Este modelo conceitual pode
APLICATIVO, E POSSA MUDAR COM O TEMPO, ser mapeado de acordo com muitos esquemas de armazenamento.
AJUDA A EXPLICAR OS MOTIVOS PELOS QUAIS A Como o mapeamento é feito declarativamente, fora do aplicativo,
VARIABILIDADE NAS FORMAS DE ACESSO PODE mudanças do esquema do banco de dados ao longo do tempo, para
otimizar vários padrões de acesso, apenas o mapeamento terá de ser
OCUPAR UMA PARCELA DESPROPORCIONAL DE
modificado; o aplicativo pode continuar a usar as mesmas consultas,
UM APLICATIVO OU FRAMEWORK EM TERMOS DE recuperar os mesmos resultados e fazer mudanças conforme o mesmo
CÓDIGO, DESENVOLVIMENTO E CUSTO DE modelo conceitual.
MANUTENÇÃO".
Observe-se que, como nos exemplos anteriores de consulta Referências
conceitual, não há necessidade de associações na consulta. Os
Next-Generation Data Access: Making the Conceptual Level Real,
resultados de objeto são fortemente tipados e passíveis de atualização; J. Blakeley, D. Campbell, J. Gray, S. Muralidhar, and A. Nori (MSDN,
a navegação e a modificação das relações entre os vários tipos são Junho 2006)
feitas por meio de propriedades e métodos, em lugar de atualizar http://msdn2.microsoft.com/en-us/library/aa730866(VS.80).aspx
valores-chave escalares.
The ADO.NET Entity Framework Overview (MSDN, Junho 2006)
A mesma consulta poderia ser escrita utilizando as novas extensões http://msdn2.microsoft.com/en-us/library/aa697427(VS.80).aspx
LINQ (Language Integrated Query), as quais serão introduzidas na
The LINQ Project (MSDN, Janeiro 2007)
próxima versão do Visual Studio da Microsoft e no .NET Framework
http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx
(cujo codinome é “Orcas”), conforme abaixo:
BoatInventory inventory = new BoatInventory(); Visual Studio Future Versions (MSDN, Janeiro 2007)
// Include Engines in queries for Boats http://msdn2.microsoft.com/en-us/vstudio/aa700830.aspx
inventory.Boats.Span.Include(“Engines”);
Dr. Peter Chen: Entity Relationship Model - Past, Present and Future,
// Specify query through LINQ Abril 2007 http://channel9.msdn.com/Showpost.aspx?postid=298587
var motorizedBoats =
from boat in inventory.Boats The Entity-Relationship Model – Toward a Unified View of Data,
where boat.Engines.Any(e => e.Year != boat.Year) P.P.S. Chen. ACM Transactions on Database Systems (TODS), 1976.
select boat;
A Relational Model of Data for Large Shared Data Banks, E. Codd.
// Loop through Engines for each Boat Communications of the ACM, 1970.
foreach(Boat boat in motorizedBoats) {
foreach(Engine engine in boat.Engines) {
if(engine.Year != boat.Year) Sobre o autor
boat.Engines.Remove(engine);
// alternatively Michael Pizzo trabalhou mais de 17 anos no projeto e na produção de
// engine.Boat = null; soluções de acesso a dados e APIs na Microsoft. Michael começou a
}
atuar no acesso a dados como gerente de programa do Excel da
}
inventory.SaveChanges(); Microsoft em 1989, esteve envolvido no projeto e na produção de
ODBC e, também, com a ferramenta de consulta baseada em ODBC
da Microsoft, que faz parte do Microsoft Office. Atuou intensamente
Conclusões
em organizações normativas, ocupando o cargo de presidente do SQL
Resumindo, existem pelo menos seis razões pelas quais escrever Access Group, trabalhando com X/Open na especificação CAE do
aplicativos diretamente no esquema de armazenamento do banco de "Data Management: SQL-Call Level Interface (CLI)", servindo como
dados pode ser problemático: representante da Microsoft no ANSI X3H2 Database Committee e
1. Você talvez não tenha controle sobre o modelo de objeto do como um representante eleito do ANSI para as reuniões do comitê da
aplicativo ou sobre o esquema de armazenamento. ISO que definiu e adotou a Parte 3 da especificação ANSI/ISO SQL
2. O grau de normalização do esquema do banco de dados pode para uma Call-Level Interface (SQL/CLI). Michael foi programador e
torná-lo complicado para ser consumido diretamente do administrador principal do OLE DB API da Microsoft e, mais tarde,
aplicativo. proprietário do projeto e da produção do ADO.NET, versão 1.0.
Atualmente, é arquiteto de software da equipe de Data
3. Determinados conceitos de modelagem do mundo real não
Programmability da Microsoft, contribuindo para a arquitetura e o
podem ser diretamente representados em um esquema relacional.
projeto da próxima versão do ADO. NET e do principal bloco de
4. O aplicativo talvez seja forçado a incorporar conhecimento construção da nova Entity Data Platform da Microsoft, o ADO.NET
implícito de como são utilizados os campos do esquema do banco Entity Framework.
de dados, o que é difícil de rastrear e de frágil manutenção.
5. Vários aplicativos podem desejar expor diferentes visões dos
mesmos dados.
6. O esquema do banco de dados poderá modificar com o tempo,
interrompendo aplicativos que escrevem diretamente nesse
esquema.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 25


Perfil do Architecture
Journal: Pat Helland

Recentemente, o Architecture Journal passou pelo mesma forma, um arquiteto de software precisa saber o suficiente
escritório de Pat Helland, arquiteto da Microsoft, para sobre os vários aspectos de um sistema maior, em vias de formação,
para interagir com cada um dos especialistas.
saber as novidades e suas opiniões sobre a arquitetura e
como tornar-se um arquiteto. AJ: Muito disso pode soar familiar às pessoas que já ouviram
falar sobre Metropolis, certo? [Vide referências.]
AJ: Quem é você e onde trabalha?
PH: Sim, e eu ainda estou muito entusiasmado com o tema
PH: Meu nome é Pat Helland e trabalho na equipe do Visual Studio, na
Metropolis. Analise o histórico do desenvolvimento urbano e como as
divisão de programadores. Ingressei na Microsoft em 1994 e ajudei a
cidades se modificaram quando chegaram os trens, na metade do
formar a equipe que construiu o Transaction Server e o Distributed
Transaction Coordinator da Microsoft. Por volta de 1998, comecei a século 19. A rápida movimentação de mercadorias e pessoas permitiu
entender que a computação de N-camadas não conseguia lidar com - e motivou - mudanças nas cidades semelhantes às que
todas as questões trazidas por nossos clientes e, então, me envolvi no testemunhamos agora no universo de TI em que, através da Internet,
que hoje denominamos de arquitetura orientada a serviço (naquela diferentes computadores e aparelhos estão interconectados.
época, era conhecida como "computação autônoma"). Isso me levou a A capacidade de se comunicar e de transportar dados ou transmitir
trabalhar na conexão de serviços com troca confiável de mensagens e, solicitações de funcionalidade do negócio, remotamente, está
assim, ajudei a dar início ao projeto que produziu o SQL Server 2005, pressionando a padronização. Está fazendo com que o trabalho seja
denominado SQL Service Broker. No início de 2003, passei algum desdobrado em partes e, depois, vinculado a padrões. Esses padrões
tempo em DPE, trabalhando para catequizar nossos clientes não servem somente para determinar a movimentação de dados de
corporativos. [Clique na barra lateral para saber mais sobre a longa um lado para outro, mas também para responder perguntas, como: O
carreira e os vários projetos do Pat.] que é um serviço? O que penso sobre a operação que desejo
AJ: Depois de anos de experiência na profissão, qual o conselho fornecer?
você daria a alguém que desejasse se tornar um arquiteto? Mais uma vez, isso se parece muito com o que vimos nas cidades
PH: A arquitetura é uma área muito interessante. Comparo-a à quando o fabricante separou-se do varejista que distribuía as
arquitetura civil. Se você parar e pensar, arquitetos civis precisam, mercadorias. Isso não pode ser feito, a não ser que as SKUs (Stock
antes de mais nada, detectar uma necessidade empresarial e entender Keeping Units - unidades de manutenção de estoque) sejam
como criar um edifício que satisfaça essa necessidade. padronizadas. Quando se fala em decompor o processo de fabricação
Mais do que isso, o edifício precisa ter um apelo. Quando alguém se para construir partes de um todo maior, estamos falando de
aproximar e olhar para a construção, precisa sentir algum tipo de padronização. Muitos aspectos comuns podem ser vistos quando se
emoção. observam as cidades e quando se vê o desenvolvimento largamente
Ao mesmo tempo, temos de lidar com um sem-número de distribuído no universo de TI.
considerações práticas. Como será o fluxo de ar através do edifício? AJ: Concordo plenamente. Trabalhando na divisão de progra-
Como será a movimentação das pessoas nos elevadores? Como pensar madores, estou certo que você precisa manter-se atualizado a
no conforto sem deixar de considerar as questões ambientais? É respeito das últimas tecnologias. Como você faz isso?
preciso que a parte operacional do edifício - o objeto utilitário - esteja PH: Sou uma pessoa relativamente social, e sempre encontro tempo
em harmonia com a satisfação das necessidades do negócio, para trocar duas palavras com os especialistas da área, perguntar-lhes
combinadas com o efeito que essa estrutura específica terá sobre os sobre suas perspectivas e comparar suas visões com as de outros
seres humanos. especialistas com os quais me encontro. Mas, no final das contas, basta
Se considerarmos esses aspectos pelo ponto de vista do software, ler. Precisamos pensar. É realmente um enorme desafio tentar
teremos uma analogia exata. A meta primordial de um arquiteto de equilibrar o tempo que despendemos falando e interagindo com as
software é entender e resolver como atender à necessidade pessoas no local de trabalho (quando ganhamos e ajudamos de tantas
empresarial. Ao mesmo tempo, é preciso que o software tenha formas diferentes) e o tempo para reflexões mais profundas. De novo:
condições de se relacionar com as pessoas e com as impressões que ler, absorver e deixar as coisas sedimentarem em segundo plano e
elas têm ao utilizá-lo. E também, ao mesmo tempo, precisamos tentar equacionar quais mudanças significativas e de grande efeito
resolver todas as questões transcendentes para que o programa que podemos realizar. E, depois, é preciso sair e tentar popularizar
funcione de modo correto e prático. essas mudanças. É incrível a quantidade de trabalho que um arquiteto
Um arquiteto civil que trabalha na construção de um edifício grande precisa dedicar à catequização e à socialização, para que as pessoas
pode não ser um mestre absoluto em elevadores e fluxo de ar. Mas ele comprem um sonho. Às vezes as pessoas me perguntam o que eu faço
tem de saber o suficiente sobre essas áreas para interagir com os e eu respondo: "invento coisas e convenço as pessoas a construí-las".
especialistas e reunir todas as informações em um todo coeso. Da Esse é o trabalho de um arquiteto!

26 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Perfil do Architecture Journal: Pat Helland

AJ: Gostei da definição. Você mencionou convivência e manter-se


Pat Helland tem quase 30 anos de experiência
atualizado fazendo contatos. Qual foi a pessoa mais importante
em sistemas de banco de dados e transações
que você já conheceu e por quê? escaláveis.
PH: Importante no contexto do setor de informática? Diria que foi
Em 1978, Pat trabalhou na BTI Computer
meu caro amigo Jim Gray, que conheço desde 1982, e que
Systems; lá criou produtos, como: linguagem
infelizmente no momento está desaparecido. Um grande sofrimento de implementação, gerador analisador,
para muitas pessoas. A paixão com que ele se dedica às pessoas é a subsistema Btree, recuperação de transação e
razão pela qual eu o admiro e considero um mentor. Para ele não faz Pat Helland ISAM (Indexed Sequential Access Method).
diferença se a pessoa é um figurão ou um simples estudante. Nesse Microsoft
Em 1982, Pat era arquiteto-chefe e
quesito, Jim tem a habilidade extraordinária de olhar para o outro, implementador sênior da TMF (Transaction Monitoring Facility) que
ouvi-lo por um minuto e, rapidamente, passar para a órbita adequada implementou transações distribuídas e registro em log/recuperação
da comunicação para conseguir transmitir o que pensa. Ele não fala de do banco de dados do sistema NonStop Guardian da Tandem. O
modo condescendente, tampouco os oprime com tecnologia e sistema proporcionou acesso escalável e altamente disponível aos
conceitos que podem não ser conhecidos. E eu o vi se comportar dados, com sistema baseado em mensagens, tolerante a falhas,
assim muitas vezes. Eu o observei por 25 anos fazendo isso, e sempre incluindo transações distribuídas e replicação das falhas do
tive muito, muito respeito por esse tipo de atitude. datacenter.
Em 1991, Pat ingressou na HaL Computer Systems e foi lá que
AJ: Sim, isso é maravilhoso, realmente um grande homem.
descobriu que poderia trabalhar com arquitetura de hardware. Ele
PH: Esse tipo de atitude lhe permitiu construir uma vasta rede de
dirigiu o projeto e a implementação de uma 64-MMU (Memory
conhecimentos. Vi Jim ajudar alguém que precisava de alguma coisa e Management Unit) e um multiprocessador CC-NUMA (Cache
logo em seguida bancar o cupido com outra pessoa. A combinação Coherent Non-Uniform Memory Architecture).
decorrente pode ser muito poderosa: resulta em tecnologias
Em meados de 1994, a Microsoft chamou-o e pediu que trabalhasse
magníficas e um desenvolvimento formidável da comunidade na construção de middleware para a empresa. Ele aceitou o convite e
tecnológica. Jim está constantemente trabalhando pelo crescimento dirigiu a arquitetura do MS-DTC (Distributed Transaction Coordinator)
das outras pessoas e, ao mesmo tempo, sempre procurando um meio e do MTS (Microsoft Transaction Server). Mais tarde, Pat interessou-se
para que a tecnologia e o negócio possam crescer juntos. Conseguir pelo que hoje denomina-se SOA (arquitetura orientada a serviço) e
promover essa situação em que indivíduos crescem enquanto realizam iniciou um projeto para fornecer troca de mensagens de alto
as metas empresariais para criar um ótimo software é o grande achado desempenho, exactly-once-in-order, profundamente integrada no
que deu a Jim o tamanho respeito que tem no setor. banco de dados SQL. Esse produto foi entregue no SQL Server 2005,
como SQL Service Broker. Mais tarde, Pat trabalhou no produto WinFS
AJ: Ao analisar sua carreira em retrospecto, do que mais se passou um tempo no DPE catequizando nossos mais importantes
arrepende? clientes corporativos.
PH: Não ter seguido o conselho do Jim de escrever mais. Nem sempre Nos últimos dois anos, Pat tem trabalhado na Amazon, nos setores de
sou tão disciplinado quanto gostaria para forçar-me a escrever tudo o catálogo, capacitação para compras, pesquisa e navegação. Ele
que tenho em mente. Pegar as idéias que ficam orbitando no vazio também iniciou e dirige uma série semanal de seminários internos.
cavernoso acima dos meus ombros e colocá-las no papel é um projeto Está ansioso para voltar para casa, para a Microsoft, e trabalhar na
que voltei a ter um grande anseio de realizar. Jim sempre me disse: equipe do Visual Studio!
você precisa escrever mais; precisa se comunicar mais.
Não sei como é isso para os outros, mas sei que é duro para mim
separar um tempo e criar um documento coeso e comunicativo, a não Agora, também gostaria de, gradualmente, aumentar meu tempo para
ser que eu estabeleça um prazo e me coloque sob pressão. Então, apresentações, cuidar do meu blog, escrever artefatos que ajudem as
preciso parar por alguns dias e me isolar com esta idéia fixa: "Meu pessoas a entender as várias coisas que eu venho pensando.
Deus! Preciso acabar este trabalho ou coisas ruins vão acontecer!" Além disso, simplesmente trabalhar com as pessoas, dentro e fora da
Tenho de me forçar a colocar um ponto final, passar uma fita em volta Microsoft, para ajudá-las a resolver seus problemas é o que me
e entregar, ainda que o meu lado perfeccionista queira reescrever tudo satisfaz: conseguir, de fato, fazer a diferença. Considero a Microsoft
de novo. Isso é algo que eu gostaria de ter feito melhor e continuo muito especial, pois podemos exercer uma grande influência.
querendo que aconteça mais. Agora, veja só, é uma empresa interessante, onde acontecem muitas
AJ: A função de se pressionar: acho que muitas pessoas lutam coisas, e muitas desordens aqui e ali. Algumas vezes as coisas com as
com ela. quais estamos trabalhando não acontecem e nem todos percebem as
PH: Sim. Os arquitetos são humanos. Você só precisa saber o que fazer incríveis emoções vinculadas à engenharia. As pessoas se empenham
para que aconteça. em coisas que podem dar certo, ou não. Estou interessado em saber
como fazer para evitar o sofrimento e enfatizar a satisfação envolvidos.
AJ: Então, como serão os próximos anos? O que você espera
Também estou interessado em ajudar as pessoas a publicar suas idéias.
realizar profissionalmente?
É para isso que me esforço.
PH: Minhas metas são entender como selecionar uma determinada
área de características de produto e elevá-las a um novo patamar.
Agora,exatamente o que será... Voltei há cinco semanas mais ou Referências
menos e portanto ainda não consegui definir exatamente o que Metropolis
pretendo, mas desejo expandir nossos conjuntos de produtos com http://www.pathelland.com/presentation_overview/index.htm
coisas novas, bem legais.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 27


Segurança dos
dados na Web
por Peter Hammond

Resumo com maior rapidez pois não precisava redigitar todas as minhas
entradas, ainda que recebesse a mensagem de erro "Índice
A troca de dados bem-sucedida é a função mais essencial
corrompido" e, rapidamente, percebi que me sobrava tempo. O valor
dos aplicativos hoje e, na verdade, ontem também. Este de ter a tecnologia trabalhando a meu favor, não significou uma perda
artigo destaca algumas experiências, vividas no decorrer para mim, bem ao contrário, gastava essa 'folga' inesperada
dos últimos 10 anos, pelas perspectivas do usuário final, aprendendo mais sobre os produtos do Office da Microsoft.
programador novato, consultor profissional e da equipe de Felizmente, tive a oportunidade de começar a fazer programas de
desenvolvimento. Obtive alguns sucessos fantásticos, treinamento sobre desenvolvimento leve baseados em computador
usando o Power Point da Microsoft, para o curso de operações da
fracassos terríveis e adquiri muitos insights ao longo do
base aérea (Air Base Operations - ABO). Criei apresentações com
caminho. Explicarei como a arquitetura do passado, incorporação de gráficos, som e vídeo, o que transformou o
combinada com a tecnologia atual, resultou na bem- treinamento num grande sucesso. Para saber quem havia feito o
sucedida troca de dados pela Web. treinamento, em lugar de usar uma folha de papel assinada, escrevi

N o segundo semestre de 1994, fui transferido para a base da


Força Aérea de Fairchild, no Estado de Washington-EUA, depois
de uma estada de quatro anos na bela base aérea de Aviano, Itália.
um programa de testes que faria o rastreamento das pessoas que
haviam participado do curso. O Excel da Microsoft foi minha primeira
escolha pois parecia ser o programa mais popular para o
Uma de minhas responsabilidades como sargento plantonista da acompanhamento de dados, de vacinas contra a gripe, registros de
polícia de segurança, um misto de oficial de diligências e atendente de treinamento, notas obtidas nos testes, etc. Usando o Excel, tive
emergências, era documentar as atividades ocorridas durante o meu condições de definir as perguntas em uma planilha e as respostas em
turno. Em Aviano, essa tarefa representava datilografar um relatório outra, rapidamente construí um formulário de testes e pude fazer uma
com mais de 12 páginas e 10 cópias, tiradas com papel carbono, a demonstração bem-sucedida para o meu supervisor.
serem diariamente distribuídas ao comando para controle. Se Tudo parecia bem até surgirem alguns problemas óbvios. Publicamos
qualquer parte do relatório tivesse de ser corrigida, todo o relatório o teste em Excel em um compartilhamento de rede, para que várias
deveria ser datilografado novamente e as cópias-carbono, pessoas pudessem fazer os testes e rapidamente descobrimos que o
redistribuídas. Matamos muitas árvores. Imagine o meu entusiasmo formulário só podia ser aberto, para edição, por uma pessoa de cada
em Fairchild, quando fui apresentado ao novo sistema de automação vez; enquanto isso, as outras pessoas tinham na tela uma cópia no
da polícia de segurança (Security Police Automation System - SPAS) modo 'somente leitura'. Utilizei planilhas ocultas para resolver o
baseado em Windows. Mais tarde, eu aprenderia que acrônimos problema de segurança, por ter armazenado as perguntas e as
podem prognosticar problemas. O aplicativo cliente/servidor em rede, respostas no mesmo arquivo. Essas medidas falharam pois todos
construído em FoxPro, era fantástico: permitia digitar todos os acharam mais rápido imprimir os formulários de teste do que esperar
relatórios, corrigir quaisquer erros e distribuir ao comando, até que o arquivo ficasse disponível e, além disso, alguns usuários
digitalmente. Nenhuma outra árvore morreria em vão. Assim parecia. descobriram como exibir a folha de respostas. Sim, mais árvores
Infelizmente, com o passar do tempo e o crescimento do volume de sofreram.
dados, o SPAS ficou subdimensionado. Depois de horas digitando as Mal sabia eu que o meu batismo de fogo nas dificuldades de se usar
observações detalhadas de um incidente e clicar em Salvar, aparecia acesso à rede para locação multiusuário e garantir segurança efetiva
uma mensagem de erro enigmática: "Índice corrompido". Ainda que o dos dados era só a ponta do iceberg.
seu trabalho estivesse na tela, na verdade já estava perdido, embora Descobri o Access da Microsoft, que prometia resolver esses
você só soubesse disso quando o seu comandante o chamasse em problemas e muito mais, pois oferecia suporte para vários usuários
casa, ao dar pela falta do relatório. simultâneos, segurança baseada em usuário, além da facilidade do
As conseqüências foram imediatas. Todos começaram a duvidar do Excel para definir tabelas, a capacidade de ser compatível com
sistema SPAS. Superstições surgiram sobre o que poderia ter motivado esquema complexo de dados e o avançado editor de formulários.
a deficiência do sistema. Será que era por ter clicado em Salvar mais O novo banco de dados de testes em Access foi um grande sucesso e
de uma vez? Ou pelo tamanho do texto? Ou por ter ficado apoiado consegui espaço no servidor de CD em torre da base, na central de
num pé só enquanto digitava com um olho fechado? Ao certo, redes e, assim, todos podiam fazer o treinamento e os respectivos
ninguém sabia. Ao final, começamos a imprimir todos os relatórios testes obrigatórios, remotamente. Os resultados bem-sucedidos
novamente, só para garantir. Desse modo, comecei a entender a rapidamente surtiram efeito e o treinamento estava indo muito bem -
importância de se ter confiança nos sistemas de dados. Sem confiança infelizmente, bem demais. blocos de construção funcionais do
em sólidas comunicações de dados, os usuários (e as árvores) pagam aplicativo (algumas vezes também chamados de componentes ou
um duro preço. módulos); e serviços de processo, que compõem e orquestram
Comecei a criar meus relatórios no Word da Microsoft para, depois, entidade, capacidade e serviços de atividade para implementar os
copiar e colar no SPAS. Estava conseguindo executar meu trabalho processos do negócio.

30 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Segurança dos Dados na Web

Comecei a perceber que todos obtinham 100% em todos os testes, na e, depois, localizar os registros, terminando todo o meu trabalho de
primeira vez. Durante o projeto, incluí um carimbo de data/hora de uma só vez.
criação e modificação em cada resposta de usuário. Eu sabia que havia As correções funcionaram tão bem que surgiu a dúvida: será que o
algo de errado quando executei um relatório usando a diferença entre cliente realmente precisa de um sistema ARROW substituto? E,
as datas/horas de criação e modificação das respostas. Grande parte rapidamente, fui afastado do projeto para garantir que eu não
dos usuários terminava o teste de 30 perguntas em menos de 27 "corrigisse" mais nada. Independentemente do resultado, fui fisgado. O
segundos. Imaginem minha surpresa quando descobri que todos SQL Server era a resposta que eu procurava e, então, começaram as
estavam colando! Como as perguntas do teste estavam na mesma questões reais.
seqüência, alguém tinha criado uma cola (em papel, sem dúvida).
Enquanto eu progredia com o SQL Server, os sucessos foram
Apresentar as perguntas de modo aleatório ajudou a garantir a
acontecendo. Os aplicativos cliente/servidor eram sólidos, fáceis de se
legitimidade dos testes. Entretanto, agora que as pessoas não estavam
construir, os erros podiam ser rapidamente eliminados e os usuários
colando, tive um problema novo: todos estavam demorando muito
estavam plenamente satisfeitos pois, ao clicar Salvar, o comando era
para terminar o teste e, então, mais pessoas acessavam os testes ao
executado. A segurança dos dados se equiparava ao sucesso dos
mesmo tempo. O banco de dados do Access me fez cair na cruel
realidade do significado da escalabilidade (ou da falta dela). aplicativos.

Aparentemente, o servidor de CD começou a emitir a seguinte Anos depois, fui contratado para trabalhar em um projeto para
mensagem de erro: “Record Lock Timeout Error”. A cada mensagem o acompanhar o treinamento ministrado pela Microsoft como uma
sistema emitia aos administradores da rede um alarme sonoro, irritante, academia intranet. Utilizando o .NET e o SQL Server 2000 da Microsoft,
e eles já estavam muito descontentes com o fato de eu, simples policial rapidamente construímos um aplicativo cliente/servidor que atendia às
de segurança, estar 'brincando de programador'. Assim, desligaram o necessidades dos usuários muito bem. Entretanto, depois de algum
alarme sonoro. Como o número de usuários aumentou e a quantidade tempo, as ocorrências de suporte cresceram muito, na medida em que
de erros de timeout/bloqueio de registros também aumentou, as pessoas tentavam usar o aplicativo remotamente. Como era preciso
aconteceu o inevitável: meu pequeno banco de dados em Access carregar todos os registros do servidor a cada inicialização, o
derrubou o servidor de CD em torre e vários testes em andamento desempenho em uma conexão VPN era terrível. Apesar disso, os
perderam-se, inclusive aqueles de oficiais muito inflexíveis. O fato, em usuários estavam felizes porque sabiam que podiam confiar: suas
si, foi especialmente ruim; entretanto, o impacto foi muito maior pois a mudanças eram imediatamente implantadas e, com todos os registros
base estava no meio de uma enorme implantação (Office e Windows carregados na memória, a IU reagia positivamente. Esse aplicativo foi
95) no servidor de CD. Resolvi o problema limitando o número de usado durante muitos anos.
usuários simultâneos; entretanto, jamais desperdicei as lições de Por fim, as exigências de recursos, questões de conectividade de rede e
simultaneidade multiusuário, integridade de dados, recursos de rede e a explosão da Internet fizeram com que a popularidade da arquitetura
escala. cliente/servidor perdesse a força. As implementações de n-camadas,
Ao final, o curso ABO foi um grande sucesso e o treinamento foi bem com Web Services, foram aclamadas como se fossem o 'santo graal'
recebido. Construí muitos outros programas de banco de dados com o dos aplicativos em rede para a troca de dados online.
Access, aproveitando seus recursos de desenvolvimento rápido, mas Web Services e CyberSavvy
sempre ciente de suas limitações. Entramos nesse barco, sem olhar pra trás. Digo "nós" porque eu tinha
WORMS, ARROW e SQL Server aberto a CyberSavvy, uma empresa prestadora de serviços de
Depois de terminar o meu segundo alistamento, decidi tentar trabalhar consultoria de topo de linha. Contratei os melhores profissionais, por
no setor civil, como consultor profissional. Tive muito trabalho indicação, ou aqueles com quem tive o privilégio de trabalhar durante
consertando e atualizando grande variedade de sistemas baseados em esses anos. Nós nos dedicamos a criar as melhores soluções do
Excel e Access. Parecia que o mundo girava em Excel, e não muito bem. mercado, para os mais difíceis problemas internos da Microsoft.
Ao final, migrei para o Visual Basic, que me permitiu usar o Access Os aplicativos Web eram o máximo, mas as interfaces Web que
como back-end e código para grande parte de seus problemas. perdiam todos os dados quando havia erro na página ou a conexão
Tive a oportunidade de trabalhar no WORMS (Work Order Remote caía, não conseguiam conquistar a confiança dos usuários.
Management System). O WORMS baseava-se no SQL Server 6.5 da Alternativamente, nós nos concentramos em construir aplicativos smart
Microsoft e era um sistema incrível. Sua escala era enorme pois podia client utilizando o .NET da Microsoft. Eles forneciam os ricos recursos
atender centenas de usuários, processando milhares de registros. Mas o necessários para os aplicativos que tratam de problemas complexos do
sistema foi para o espaço. negócio, envolvendo dados relacionais complexos provenientes de
Aparentemente, o WORMS perdia seus registros aleatoriamente. muitas fontes, exigindo resultados instantâneos e a capacidade de
Acontecia em algum ponto entre o banco de dados SQL local e um trabalhar online e offline.
sistema Oracle da matriz. Como medida tapa-buraco, de manhã, todas Nos últimos cinco anos, construímos 15 aplicativos smart client para a
as ordens de trabalho eram impressas; depois, manualmente entradas Microsoft e criamos uma forte relação de trabalho com suas equipes
em um banco de dados Access separado, o qual era diariamente ClickOnce, .NET, ADO e SQL. A maior parte desses aplicativos tinha por
copiado no BD corporativo, para fazer uma conciliação dos registros objetivo resolver questões relativas ao negócio e à força de trabalho da
perdidos. Você adivinhou: nenhuma confiança nos dados e, em um Microsoft.
único dia, mais árvores mortas do que durante toda minha carreira Enterprise Product Roadmap
militar. Uma das soluções mais interessantes que construímos para a Microsoft
Tomei conta do sistema no tempo em que o seu substituto, o ARROW ajuda a manter o setor atualizado com as últimas informações lançadas
(Automatic Remote Routing Of Workorders), era desenvolvido. sobre o produto.
Enquanto localizava a perda de registros, tive uma ótima impressão das Como a força de trabalho quase sempre atua em ambientes separados,
capacidades de diagnóstico do SQL, do rastreamento ao registro de em trânsito ou nas instalações dos clientes, a necessidade de se ter
eventos: eu conseguia rastrear todos os dados, de ponta a ponta. Com capacidade offline impedia o uso de um aplicativo Web ou de uma
esse nível avançado de diagnóstico, podia determinar e reparar a causa solução cliente/servidor típica.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 29


Segurança dos Dados na Web

Tivemos um sucesso extraordinário com isso, em


Figura 1: Um modelo conceitual orientado a aplicativo
muitos aplicativos, ou seja, até que fizemos uma
Ambiente de servidor experiência com o EBT (Emerging Business Team
Tracker).
Web Service
Banco de Emerging Business Team Tracker
Camada do negócio Camada de dados dados
Reúne todo o acesso ao banco Com o respaldo de muitas implementações bem-
Fornece lógica básica para de dados para expor sobrecargas
interação com a camada de sucedidas desta arquitetura, 'atacamos' o EBT com
das várias consultas e métodos
dados incluindo quaisquer de atualização. grande confiança. Tínhamos criado processos de
regras do negócio que
DataSet
exijam a geração de registros
automação para construir de modo dinâmico as
adicionais como, por Esquema de conjunto camadas de dados e Web Service com base em
exemplo, registros de de dados ADO.NET, nossos procedimentos armazenados
segurança. totalmente tipado
padronizados. Nossa segurança integrava-se
Os dados, fornecidos como diffgrams XML ALDO.NET plenamente com o Active Directory, com a
Máquina do cliente para reduzir tráfego e sobrecarga, podem ser uma
atualização completa ou um diffgram de mudanças capacidade de filtrar os dados do usuário no nível
a partir de um determinado movimento. de linha. Construímos robustos aplicativos cliente
Armaz offline
criptografado- .NET 1.0 SQL Server
Smart Client Web utilizando o WinForms com todas as
DatasetXML Services 2005
Beta2 características avançadas dos aplicativos mais
serializado
refinados, pelos quais os usuários deliravam.
Nossas implementações eram consideradas
Usuário Diretório showcases da Microsoft e utilizadas pelo setor
ativo
para ajudar a vender a superioridade tecnológica
da Microsoft. Apesar dos sucessos anteriores, o
Os requiis tos de pesquisa, ordenação e filtragem rápidas de todos os
EBT logo nos mostraria um ponto importante, extremamente óbvio. Em
produtos da Microsoft para apresentações personalizadas exigiam que
retrospecto, é claro que a maioria de nossos projetos tratava de
todos os dados estivessem armazenados localmente e sempre
aplicativos para consultas e emissão de relatórios, basicamente no modo
atualizados. A necessidade adicional de intensa segurança, pois
'somente leitura'. O EBT era totalmente diferente e estava prestes a me
determinadas informações de produto precisavam ser filtradas de
lembrar de uma lição antiga.
acordo com o papel do profissional, exigiam permissões baseadas em
linhas (row-based). O EBT era um programa que capturava dados e emitia relatórios,
composto de três sistemas separados, combinados em uma única
Utilizando SQL Server, Web Services e um smart client distribuído com
solução. A promessa de um único aplicativo que fornecesse acesso
ClickOnce, obtivemos resultados fantásticos, em todos os setores. (Vide
offline e pesquisa avançada era esperada com grande ansiedade pelos
Figura 1.)
usuários. Lançamos o aplicativo com grande alarde, confiantes no
O Enterprise Product Roadmap (EPR, não confundir com ERP) foi sucesso da solução. Estávamos totalmente alheios dos horrores que
rapidamente adotado pelo setor, escalava de modo incrível, era seguro, viriam. No início, tudo foi muito bem. A maioria dos usuários estava
trabalhava online/offline e destacava-se como um showcase da conectada à infra-estrutura corporativa enquanto usava o EBT e
Microsoft. modificava os dados. O volume de mudanças em um único DiffGram
Havia uma desvantagem: tentar criar e manter um projeto de Web publicado no Web Service era muito pequeno. Na medida em que tudo
Service que usasse vários métodos Web para selecionar e publicar dados progrediu, mais usuários trabalhavam offline, por períodos mais longos,
para cada tabela (o EPR tinha mais de 20 tabelas). Padronizamos com e logo começaram a surgir problemas de suporte.
base em procedimentos armazenados Select, Insert, Update e Delete Como acontece com todos os nossos outros aplicativos, o EBT
automatizados, usados para criar um Dataset DiffGram do ADO.NET armazenava seus dados utilizando datasets do ADO.NET in-memory.
dinâmico e serializado para XML, um Web Service que tinha apenas dois Esse processo funcionava relativamente bem para pequenos volumes de
métodos. dados. Entretanto, o dataset do EBT, de cerca de 60+MB, quando
O método Web selecionado consultou todos os dados de todas as serializado para disco, provocava uma inicialização lenta pois era preciso
tabelas EPR às quais o usuário tinha acesso e teve como resultado a desserializar todos os dados na memória a ser carregada. Os problemas
data/hora do servidor anotada no momento em que os dados foram começaram, de fato, quando da serialização de volta para o disco, na
consultados. O uso subseqüente pelo mesmo usuário resultaria em um saída.
dataset DiffGram, contendo XML que representava dados novos ou Utilizamos DiffGrams no cliente, da mesma forma que o servidor para
atualizados, assim como exclusões. comunicar mudanças não confirmadas, pra lá e pra cá. Como os
O método Web subseqüente pegou um DiffGram com mudanças a DiffGrams de mudanças em aberto eram confirmados na saída, se o
serem confirmadas. Essas mudanças foram, depois, ordenadas pelo tipo sistema operacional ou os aplicativos apresentassem uma falha antes do
de mudança e relações da chave externa, para que pudessem ser final, as mudanças gravadas se perderiam. Algumas vezes o sistema
confirmadas no banco de dados SQL na seqüência correta. Dessa forma, travava depois de fechar a IU e, assim, o usuário só saberia do problema
tínhamos métodos Web que não exigiam mudança, caso na próxima vez que inicializasse o sistema e constatasse que as
modificássemos nosso esquema. No entanto, se o esquema fosse alterações não tinham sido feitas. Tentamos compensar isso gravando
revisado, ainda tínhamos de revisar a camada de dados das quais um pouco por vez, enquanto o aplicativo ainda estava sendo executado,
dependiam esses dois métodos Web. Para cada nova coluna ou tabela, mas isso causou vários outros problemas como lentidão no
os procedimentos armazenados, o esquema do dataset e o código da desempenho. Independentemente de nossa eficiência, o sistema não
camada de dados do Web Service precisavam ser revisados para manter conseguiria tratar 100% dos casos.
a correspondência; esse processo foi automatizado com o tempo. Esse Simultaneidade multiusuário.
modelo permitia atualizações rápidas do cache de dados do smart client O próximo problema crucial era a simultaneidade multiusuário. Como
utilizando o ADO.NET para fazer todo o trabalho 'braçal'. os DiffGrams eram basicamente seqüenciais, as ações

30 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Segurança dos Dados na Web

Insert/Update/Delete, caso houvesse falha em qualquer etapa quando que estava com erro e o usuário nem percebia que algo tinha ocorrido.
aplicadas ao servidor, todo o DiffGram falhava. Isso acontecia caso um Com o EBT, a experiência do usuário era catastrófica pois o novo dataset
usuário, trabalhando offline por vários dias, com grande volume de apagava quaisquer alterações não confirmadas que haviam sido feitas.
alterações, quisesse fazer a sincronização dos dados e uma de suas Os incidentes de suporte empilhavam-se e, na maior parte das vezes, o
primeiras mudanças fosse rejeitada devido a uma violação de problema era tão antigo que nem valia a pena tentar corrigir. Os
simultaneidade porque a linha já tinha sido atualizada por outro usuários nos insultavam, literalmente, e o que é pior, começaram a
usuário, enquanto o primeiro estava offline. capturar telas das edições de dados para utilizá-las quando fosse
necessário digitar novamente essas modificações, caso se perdessem.
Isso fazia com que houvesse failback de todas as ações subseqüentes
Nem tão ruim quanto imprimir, mas suficientemente negativo para o
para o cliente. Tentamos resolver a questão automaticamente, mas o
sucesso do sistema.
lado do cliente estava, em geral, tão fora de sincronia com o servidor
que as alterações do usuário misturavam-se em uma série de conflitos Quanto mais corrigíamos e mais formas encontrávamos de contornar o
que corrompiam o DiffGram local. Nessa situação, o usuário forçaria problema, mais evidente ficava que estávamos criando processos
personalizados para tratar os dados para sincronização de Web Service,
uma opção "Full Data Reset" (reinicialização completa dos dados),
o que tínhamos escolhido não fazer ao usar DiffGrams ADO.NET de uso
excluindo o cache e ativando uma nova cópia. Obviamente, isso
geral. Além disso, não podíamos nos concentrar em construir os
também perdia todas as alterações não confirmadas. Construímos mais
recursos restantes do aplicativo exigidos pelo cliente, o que impedia a
e mais diagnósticos para as chamadas e muitas failover retry logic
maior adoção pelo usuário.
(lógicas de tentativa de failover), mas os usuários perderam a confiança
SQL Merge/Replication
de que o seu trabalho estaria realmente gravado.
Procurando respostas, buscamos uma equipe do ADO.NET e fizemos
Mas, o pior ainda estava por vir
análises abrangentes da arquitetura. Por todos os motivos, fizemos
O uso de aplicativos e o volume de alterações aplicadas pelo servidor e exatamente como prescrito. Os elementos básicos da arquitetura
pelo cliente cresceram exponencialmente. O volume de alterações funcionavam para as implementações menores ou para aquelas que
Insert/Update/Delete que precisava ser reconciliado ao mesmo tempo eram de leitura, apenas. Entretanto, usar o ADO.NET com DiffGrams
pelo ADO.NET começou a apresentar alguns problemas muito para transmitir essas alterações estava destinado a ser desaconselhável
conhecidos. Imaginem o meu desespero quando o usuário devido à combinação de porte e complexidade dos dados, exigências
encaminhava um problema de suporte, com uma captura de tela de segurança no nível de linha e modelo offline com a entrada de
mostrando um enorme diálogo de erro do EBT com a detestável dados.
informação "Índice corrompido". Inacreditável pensar que eu era o Enquanto procurávamos novas formas de resolver os problemas
responsável pela recriação do SPAS. encontrados, ficou óbvio que precisávamos de um mecanismo de banco
“NA MEDIDA EM QUE AUMENTAVA A CONFIANÇA DE de dados no lado do cliente para tratar dos dados em nível local e criar
NOSSOS USUÁRIOS NA INTEGRIDADE DOS DADOS, uma camada intermediária sólida para garantir uma comunicação
confiável.
TAMBÉM CRESCIA A DEMANDA DE NOSSA
Examinamos a replicação SQL e vimos que era essencialmente o que
ARQUITETURA. PARA NOSSO GRANDE ALÍVIO, O SQL
estávamos fazendo. A replicação sempre tinha me parecido uma ótima
TINHA ACABADO DE SAIR PARA ATENDER A
idéia, mas uma realidade terrível. Passamos a fazer parte da equipe SQL
QUALQUER NOVO DESAFIO SEM SE COMPROMETER". e a participar do programa Yukon TAP. O SQL Merge/Replication para
Durante quase um ano, dei suporte a uma atividade para corrigir todas sincronizar do SQL Server para uma instância de SQLExpress cliente
as falhas e fazer o EBT funcionar: da criação de backups assíncronos à parecia ótimo, mas será que realmente funcionaria?
identificação de vários bugs obtusos do ADO.NET com DiffGrams de Em dois meses, removemos completamente os vários níveis de camada
escala de grande porte, para construir diagnósticos avançados de de dados, transformações de dados e Web Services do servidor e do
registros em quase todas as etapas do Web Service. aplicativo cliente. Em seguida, reconstruímos o cliente EBT para
Começamos a analisar os mapas de memória e os datasets binários. trabalhar diretamente com base na instância local do SQLExpress e ela
Escrevemos um utilitário administrativo que poderia recarregar cada um dependia apenas do SQL Server Replication para o transporte de dados.
dos vários DiffGrams dos respectivos arquivos XML e recriar todo o Simplicidade cliente/servidor, locação multiusuário, escala verdadeira e
conjunto de alterações na memória. Em seguida, tentamos e capacidade de trabalho offline
trabalhamos com as mudanças do dataset, linha por linha, enviando O sucesso foi imediato. As alterações do usuário eram gravadas
uma por uma ao Web Service para localizar qual, de fato, violou uma diretamente em um banco de dados SQLExpress local, trazendo a
restrição, errou em uma questão de segurança ou simplesmente não mesma confiabilidade ao cliente que a versão completa do SQL traz ao
funcionou por algum motivo indeterminado. Depois de identificada, a(s) servidor. A redução em várias camadas de lógica personalizada e a
mudança(s) poderia(m) ser removida(s) e, então, fazia-se uma tentativa adição de diagnósticos robustos e registro de eventos do SQL nos
de reencaminhar o restante do DiffGram. Em geral, não dava certo pois permitiram resolver rapidamente quase todas as questões de suporte de
as alterações eram independentes devido à estrutura complexa dos dados que recebemos. Na medida em que aumentava a confiança de
dados e da segurança. nossos usuários na integridade dos dados, também crescia a demanda
Ao final, a maioria das tentativas era inútil pois a natureza hierárquica de nossa arquitetura. Para nosso grande alívio, o SQL apresentou-se
dos erros combinada com o aspecto offline das alterações quase que como um boa solução para resolver novos desafios sem restrições".
impossibilitava diagnosticar a causa original dos problemas, sem Recebido em 23/12/2005 de um usuário do EBT:
capturar o estado do cliente e do servidor ao mesmo tempo.
“Peço desculpas pelo comentário mas, neste momento, o mérito deste
Mais tarde descobrimos que esses problemas já ocorriam também com aplicativo é muito baixo e estou pensando se não deveria descarregar
nossos aplicativos anteriores, como o EPR. Mas, como usavam dados no tudo o que faço para documentos do Word”.
modo 'somente leitura', quando acontecia um problema de Recebido do mesmo usuário do EBT, cinco meses depois, em 1/5/2006,
simultaneidade, um novo dataset era automaticamente aplicado sobre o após o lançamento de uma nova versão, utilizando a replicação SQL:

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 31


Segurança dos Dados na Web

Figura 2: Arquitetura DataPlace

Máquina do cliente Ambiente de servidor hospedado


Servidor Web Fábrica de banco de dados
ClickOnce e ponto de Automação de 100%
publicação de auto- Criação e atualização de
atualização banco de dados,
tabelas, procedimentos
Acesso por meio de DataPlace, armazenamentos, visões,
DataProvider ou diretamente na publicações e artigos
Aplicativo V1.0 V1.5 V2.0 V2.5
personalizado instância SQLExpress utilizando Filtragem de artigos
SNAC, OLEDB, etc. Implementação de
segurança sem nível de
linha baseada em
usuário e grupo

DataPlace Web
DataProvider Service
SQL 2005
Web Replication
SQL Todo o
DataPlace Express tráfego por
Editor
SmartClient .NET Replication meio de SSL
Manager via https://

“Por enquanto, tudo bem – trabalhei usando quase todos os tipos de O SQL Server 2005 Replication da Microsoft ofereceu uma resposta
infra-estrutura que, tipicamente, criariam problemas de replicação ou sólida para esses problemas técnicos complexos. Agora, minha equipe e
estabilidade e não tive nenhum problema. Parabéns!” eu podemos finalmente nos concentrar naquilo que nos propusemos a
Segurança dos dados resolver no início: os problemas do negócio de nossos clientes.
Continuamos a encontrar vantagens no novo projeto. Por exemplo, a
substituição de datasets in-memory do ADO.Net por um mecanismo de
consulta verdadeiro nos permitiu desvendar quase todos os códigos de Referências
processamento de dados, extremamente complicados, necessários para Aviano Air Base, Itália
representar as várias visões de dados que o cliente queria com SQL http://www.aviano.af.mil/
padrão. Assim, pudemos otimizar o DBA para a funcionalidade de
Fairchild AirForce Base
cliente e eliminar grande parte do trabalho mais difícil para atualizar o
http://www.wafair.ang.af.mil/
código personalizado. Em alguns casos, o volume de código sofreu
redução de mais de um terço. Configuring and Maintaining Replication
Na medida em que progredimos com a replicação SQL, transferir dados http://msdn2.microsoft.com/en-us/library/ms151247.aspx
de modo seguro por intranet e pela Internet passou a ser uma Microsoft.NET
preocupação. Uma das promessas dos Web Services era a idéia de que http://msdn2.microsoft.com/en-us/netframework/aa663309.aspx
o projeto poderia ser usado para transferir dados pela Web. Mais uma
Smart Client Community
vez, a replicação SQL forneceu a resposta, pois chegou com uma
implementação pronta para usar do componente de replicação Web. http://msdn.microsoft.com/smartclient/community/scfaq/default.aspx
Usar o componente REPLISAPI permite que esquema e dados e a Microsoft Case Study Smart Client Sales Application Saves Time and
atualização de ambos sejam feitos por https, de modo seguro e Cuts Deployment Costs
confiável. http://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=49078
Tivemos tamanho sucesso com a replicação SQL que, agora, estamos CyberSavvy.NET DataPlace (informações e teste grátis)
fornecendo uma linha de produtos SaaS (Software como Serviço)
http://www.cybersavvy.net/dataplace
denominada DataPlace (vide Figura 2). O DataPlace apresenta a
extraordinária superioridade do SQL Server e a replicação para os
usuários finais, programadores novatos, consultores profissionais e Sobre o autor
equipes de desenvolvimento sem as complexidades de terem de fazer Peter Hammond é presidente da CyberSavvy, um fornecedor
as próprias definições. preferencial da Microsoft. Serviu por dois períodos na Força Aérea dos
Fornece uma fábrica de banco de dados para projetar, desenvolver, EUA, durante os quais interessou-se por programação. Após a dispensa,
implantar e usar, de modo dinâmico, a superioridade dos bancos de adquiriu experiência do mundo real, trabalhando em várias funções, de
dados SQL em um ambiente completamente hospedado. É a solução suporte de rede a consultoria de desenvolvimento em várias empresas,
que agora utilizamos para construir todos os nossos mais recentes
inclusive na Microsoft. Em 2002, Peter recrutou uma equipe de
aplicativos smart client.
profissionais excepcionais dedicados a construir soluções tipo showcase,
Este artigo relata nossas experiências durante vários anos e, também, o
com as mais recentes tecnologias da Microsoft. A CyberSavvy já
tempo e o esforço consideráveis que dedicamos tentando resolver
problemas complexos referentes ao trabalho com dados pela Web, de construiu mais de uma dezena de aplicativos corporativos,
modo seguro, escalável, confiante e repetível para multiusuários. Essas especialmente o Enterprise Product Roadmap, usado por mais de
experiências não são incomuns entre os programadores e elas ilustram a 10.000 funcionários da Microsoft, há mais de cinco anos. Para entrar em
necessidade de produtos confiáveis e do conhecimento para utilizá-los. contato com Peter mande uma mensagem para peter@cybersavvy.biz.

32 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Add-ins gerenciados:
controle avançado de versões
e hospedagem confiável
por Jesse Kaplan

Resumo deparam quando adicionam extensibilidade ao aplicativo pela


primeira vez: inclui tarefas comuns como descobrir, ativar, isolar e ter
Arquitetura e recursos novos para um modelo novo de sandbox para os add-ins. Por outro lado, os problemas V.Next
add-ins gerenciados, serão introduzidos no .NET referem-se ao conjunto de problemas enfrentados pelo programador
Framework 3.5 da Microsoft, a ser lançado na medida em que o aplicativo sofre modificações: manter add-ins
simultaneamente com o Visual Studio “Orcas”. A próxima antigos trabalhando em novos hosts, obter novos add-ins para serem
executados em hosts antigos e, até mesmo, ter add-ins construídos
versão do Framework dá seguimento à nossa estratégia
para um host e executá-los em um host diferente. O novo modelo de
de lançar versões suplementares, mais novas e com mais add-in gerenciado e a arquitetura por ele definida, resolve esses
rapidez do que o lançamento de revisões completas do problemas V.Next, e os recursos dos nossos novos assemblies
runtime de base. Como a versão 3.0 representou um System.AddIn facilitam a solução dos problemas Version 1.
conjunto de assemblies adicionais baseado na versão 2.0, Arquitetura e controle de versões do modelo add-in gerenciado
a versão 3.5 será um conjunto de novos assemblies com Depois que um aplicativo é lançado (na verdade, isso quase sempre
base na versão 3.0. acontece antes do lançamento), os programadores começam a mapear
as alterações, os aprimoramentos e acréscimos que desejam incluir no
Os arquitetos de soluções e os programadores de aplicativo, na próxima versão. Os programadores de aplicativos
aplicativos que desejam adicionar extensibilidade extensíveis precisam enfrentar um problema, ou seja, descobrir como
defrontam-se com um conjunto comum de obstáculos fazer essas coisas e, ao mesmo tempo, manter todos os add-ins
técnicos. Os assemblies System.Addln apresentados neste escritos com base nas versões anteriores do host trabalhando nesta
nova versão.
próximo lançamento pretendem resolver duas classes de
Atualmente, isso é feito, no melhor dos casos, definindo-se interfaces
problemas que surgem quando se adiciona
novas que herdem das anteriores e tenham o novo host e os novos
extensibilidade. Neste artigo, detalhamos como o novo add-ins tentando/calculando para ver se os objetos que voltam são, de
modelo de add-in gerenciado e os assemblies resolvem fato, herdeiros das novas interfaces ou apenas das antigas. O problema
cada conjunto de problemas. A seguir, descreveremos é que isso faz com que o host e os add-ins estejam plenamente
como técnicas avançadas de hospedagem podem ser cientes do fato de que essas interfaces mudaram com o tempo e
usadas para garantir flexibilidade e confiabilidade ambos têm de levar adiante a complexidade de estarem cientes e
flexíveis perante as várias versões. No modelo add-in gerenciado,
perante add-ins 'inconvenientes'.
estamos apresentando uma nova arquitetura que aceita hosts e add-
ins para cada programa em relação à suas "visões" do modelo de
A extensibilidade é questão que normalmente interessa arquitetos
de soluções e programadores de aplicativos, por vários motivos.
Um deles, comum, é que os clientes solicitam recursos bastante
objeto e fornece aos programadores de hosts uma forma de colocar a
lógica da adaptação versão-contra-versão em um assembly separado e
específicos que não poderiam ser atendidos pelo aplicativo em si e, isolado.
então, oferecem a extensibilidade para permitir aos clientes Arquitetura de pipeline
satisfazerem as próprias necessidades ou comprarem de terceiros. Um
A Figura 1 ilustra a arquitetura que projetamos para facilitar a
outro motivo para a oferta de extensibilidade, também comum, é a
comunicação das versões entre hosts e add-ins. Temos como meta
construção de um ecossistema comunitário e rico à volta do produto.
fornecer uma "visão" estável do modelo de objeto para hosts e add-ins
Ao oferecer um aplicativo extensível, pode-se envolver a comunidade
com camadas abstraindo a forma com que essa visão é organizada
com o produto, dando-lhe a oportunidade de contribuir na forma
através do limite de isolamento, como é feito o controle de versões e,
dessas extensões. Independentemente das razões para se desejar a
extensibilidade, uma vez que os programadores de aplicativos trilham até mesmo, como é consumida pelo outro lado.
esse caminho, estarão diante de um conjunto comum de obstáculos Cada célula da Figura 1 representa, na verdade, um assembly que
técnicos. contém muitos tipos diferentes. Em geral, para cada tipo de objeto
A partir do próximo lançamento do .NET Framework, a Microsoft personalizado trocado entre o add-in e o host haverá, no mínimo, um
apresenta os assemblies System.AddIn para resolver dois tipos de tipo correspondente em cada componente: visão, adaptador e
problemas com os quais muitos clientes se defrontam quando tentam contrato. O host e o add-in são as entidades que adicionam
adicionar extensibilidade aos seus aplicativos: nós os denominamos funcionalidade real ao sistema, enquanto os outros componentes ali
problemas "Version 1" e "V.Next". Os problemas Version 1 referem-se estão para representar o modelo de objeto, organizá-lo através do
ao conjunto de problemas com os quais os programadores se limite de isolamento e adaptá-lo, se necessário.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 33


Add-ins Gerenciados - Modelo

Figura 1: O pipeline de comunicação host/add-in


mesmo em alguns aplicativos V1, pode ser muito útil ter uma visão
Limite de radicalmente diferente para cada lado. Isso passa a ser o trabalho
isolamento dos outros componentes: garantir que mesmo assemblies de visão
radicalmente diferente possam comunicar-se entre si.

Visão Adap-
Adap-
tador Visão
"
O componente contrato. É o único cujos tipos, atualmente, cruzam o
Host tador Contrato Addln limite de isolamento. Sua função é um pouco diferente já que não é,
host lado Addln
lado host Addln de fato, um contrato entre o host e o add-in: não pode ser porque o
host e o add-in nunca sabem qual componente “contrato” é
realmente usado. Ao contrário, o componente "contrato" representa,
Dependência estática na verdade, um contrato entre os dois adaptadores e facilita a
comunicação entre eles através do limite de isolamento. Como esse
é o único assembly que fica carregado nos dois lados do limite, é
Analisando a Figura 1, várias propriedades muito importantes dessa
importante que o próprio assembly “contrato” mantenha sempre a
arquitetura despontam. Acima de tudo, o fato de que o host/add-in mesma versão: se o adaptador de um lado esperasse a versão de um
depende apenas de sua visão e esta não depende de outros contrato e o adaptador do outro lado esperasse outra, o contrato
componentes do pipeline. Esse fato fornece a barreira de abstração estaria quebrado e a comunicação, interrompida. A Tabela 4 resume
que permite ao host ser completamente agnóstico sobre como o add- as características dos serviços de capacidade.
in -e o mecanismo de comunicação entre eles- são realmente
Embora digamos que contratos não podem mudar de versão, não
implementados, e vice-versa. Na verdade, se observarmos as
estamos afirmando que o host e o add-in devam sempre usar a
dependências estáticas, notaremos que toda a seção central - de
mesma versão. Considerando que o contrato é, de fato, um contrato
adaptador a adaptador - pode ser completamente substituída sem
entre adaptadores e não o host/addin, pode-se alterar o contrato
que o host ou o add-in sequer tenham ciência do fato.
sempre que desejado: basta construir novos adaptadores que possam
Outra face importante desta arquitetura: na verdade, este modelo é lidar com esse contrato novo.
completamente simétrico através do limite de isolamento, conforme
A função especial do contrato em nosso sistema exige restrições sobre
ilustra a Figura 2. Isso significa que, do ponto de vista arquitetural, não
os tipos aceitos internamente. No nível superior, todos os tipos
há diferença entre versões e na forma com que hosts e add-ins se
definidos no assembly "contrato" devem ser interfaces que
comunicam no decorrer do tempo. Na verdade, em nosso modelo, a
implementam o System.AddIn.Contract.IContract ou tipos de valor
única diferença real entre um host e um add-in é que o primeiro ativa
serializável que implementam serialização tolerante a versões. Além
o segundo: depois da ativação, tornam-se parceiros de valor quase
disso, os membros desse tipo, mais visivelmente os parâmetros e os
igual no sistema.
valores de retorno sobre os seus métodos, também devem ser tipos
Agora que descrevemos toda a arquitetura, podemos nos aprofundar que obedeçam as mesmas regras. Essas restrições garantem que todos
nos detalhes de cada tipo de componente do pipeline e nas os tipos de referência que cruzam o limite implementem, no mínimo,
respectivas funções que desempenham no sistema. o conjunto base da funcionalidade de IContract exigida pelo sistema e
"
O componente visão. Representa, quase literalmente, as respectivas
que os tipos de valor sejam serializáveis e possam ser serializados em
todas as versões.
visões do host e do add-in e os tipos trocados entre eles. Esses
componentes contêm as classes de base abstrata e as interfaces que "
O componente adaptador. A função do componente adaptador é
cada lado programará com base no outro e são, em essência, o SDK fazer a adaptação entre os tipos de visão e os tipos de contrato. Na
de cada lado para o outro. Hosts e add-ins estão estatisticamente verdade, existem dois tipos de adaptadores em cada componente
vinculados a uma versão específica desses assemblies de visão e, adaptador: visão-para-contrato e vice-versa. Em quase todos os
portanto, têm capacidade garantida de codificação com base nessa casos, os adaptadores do lado host e aqueles do lado add-in contêm
visão estática, independentemente de como o outro lado foi os dois tipos já que, na maioria dos modelos de objeto, os objetos
implementado. Na V1 de um aplicativo, esses assemblies de visão são transferidos do host para o add-in, e vice-versa. O adaptador
podem ser bastante similares (na verdade, podem ser o mesmo executa sua função implementando o tipo de destino de acordo
assembly) mas, com o tempo, podem se desviar: na verdade, até com o seu tipo de origem.
Adaptadores visão-para-contrato devem fazer a adaptação de um tipo
Figura 2: Simetria do pipeline de comunicação de visão para um tipo de contrato e, assim, transportarão o tipo de
visão para o seu construtor e implementarão a interface de contrato,
Limite de
chamando-a para essa visão. Se os valores de entrada ou retorno para
isolamento os métodos das interfaces de contrato não forem tipos de primitiva
que possam ser diretamente transportados de/para a visão, será então
função do adaptador chamar outros adaptadores para tratar com
esses tipos. O adaptador contrato-para-visão faz exatamente o inverso
do adaptador visão-para-contrato e transporta o contrato para o seu
Host/ construtor, implementando a visão, chamando-a para esse contrato.
Visão Adaptador Contrato
Add-In Novamente, assume a responsabilidade de chamar outros adaptadores
quando há autorização dos tipos de entrada/retorno.
Agora que definimos cada item do pipeline e as respectivas funções,
podemos colocá-los juntos e mostrar como um tipo é transferido de
um lado para o outro:

34 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Add-ins Gerenciados - Modelo

ou nova. Nesses casos, o host está fortemente acoplado à sua visão e o


Figura 3: Caminho de ativação
add-in, da mesma forma, a uma visão diferente mas, ainda assim, o
Limite de controle de versões é possível porque essas visões não estão fortemente
isolamento acopladas entre si.
Host antigo / add-in novo. Será possível escrever um
Visão Adap- Adap- AddInSideAdapter que converta uma AddInView mais nova para os
Host Visão
Host tador IContrato tador Addln contratos antigos. Essas transformações serão muito similares àquelas
Addln
Addln do host Addln
exigidas para ter add-ins antigos executados em hosts mais recentes.
(Vide Figura 5.)
Outros cenários de pipeline. Além desses cenários de compatibilidade
Herança Argumento do construtor
com versões anteriores/posteriores, esta arquitetura propicia outros,
também interessantes. Um deles seria aquele que permitisse ao
"
Comece com a instância do tipo a ser transferido: definido pelo host programador do pipeline construir dois pipelines separados para os
ou add-in; mesmos tipos de visão e otimizá-los para diferentes limites de
" isolamento: por exemplo, construir um pipeline muito rápido, usado
Transfira a instância para o tipo adaptador como sua visão;
para add-ins isolados de AppDomain e usar outro, diferente, para fora
"
Construa um adaptador visão-para-contrato com a instância; do processo, que trate de problemas de segmentação.
"
Transfira o adaptador através do limite de isolamento tipado como o Ou poderia ser ao contrário: em lugar de construir um pipeline para
contrato; conectar a versão de um host a add-ins construídos de acordo com
"
Construa um adaptador contrato-para-visão, usando o contrato; uma versão diferentes, construir um que faça a conexão de add-ins
" construídos para um host com um host completamente diferente. Esse
Traga o adaptador de volta para o outro lado, tipado como a visão.
cenário destaca uma importante propriedade desta arquitetura: o
Esse procedimento pode parecer uma grande sobrecarga mas, na programador do pipeline pode ser independente tanto do host como
verdade, envolve apenas duas instanciações de objeto. No contexto de do add-in, permitindo a terceiros preencher as lacunas. Se o
uma chamada através do limite de isolamento AppDomain ou Process), programador do host decidir interromper o suporte da compatibilidade
a sobrecarga de desempenho é, em geral, muito melhor do que a com add-ins mais antigos, basta parar de construir adaptadores para
margem de erro das medidas. eles; entretanto, um cliente do host novo (ou um terceirizado) ainda
No estado estacionário, todas as etapas acima são tratadas pela cadeia poderia construir e instalar esse adaptador, estendendo a vida do add-
de adaptadores já ativos nas conexões entre o host e o addin. O sistema in original.
em si só intervém para ativar o add-in, devolvê-lo ao host e, assim, Suporte de System.AddIn para hospedagem de add-in gerenciado
formar a primeira conexão. Esta etapa de ativação é apenas um
exemplo de um objeto transferido do lado add-in para o host (Figura Definição de um modelo de objeto para facilitar o desenvolvimento de
3). Observe que este diagrama, na verdade, tem nomes um pouco add-ins
diferentes para algumas das células porque se refere a tipos específicos Quando se pensa em expor pontos de extensibilidade em aplicativos, a
dentro de cada componente do pipeline. Só utilizamos esses nomes primeira preocupação de muitos programadores refere-se à definição
para os tipos usados no caminho de ativação porque esses não são os do modelo de objeto que desejam expor e, ao mesmo tempo, querem
únicos tipos dos assemblies com os quais a infra-estrutura do sistema ter a certeza de que a experiência dos programadores de add-ins seja a
realmente lida, diretamente. mais simples possível.

Cenários interessantes de controle de versões Acreditamos piamente que a implementação do aplicativo host deve ser
Em geral, a visão do host se modifica com o tempo, na medida em que independente do modelo de objeto que expõe aos seus add-ins: esta
novas versões do aplicativo são lançadas. Pode precisar de crença levou naturalmente a um projeto de acordo com o qual o
funcionalidade ou informações adicionais dos seus add-ins ou os tipos modelo de objeto exposto reside em um assembly separado do host
de dados que transfere podem ter mais ou menos campos e funções. (nós o denominamos assembly "visão") e contém um conjunto de classes
Anteriormente, devido ao acoplamento forte entre o host e os add-ins (em geral, classes de base abstrata e interfaces) que representam as
(e respectivos tipos de dados), isso geralmente significava que os add- visões opostas do host e do add-in e dos objetos que trocam entre si.
ins construídos em uma versão do aplicativo não podiam ser usados em Esta definição de um assembly “visão” com classes de base abstrata e
versões mais recentes, e vice-versa. Nossa nova arquitetura foi projetada interfaces leva a um modelo de programação de add-ins fácil e de baixa
de modo ascendente para oferecer as camadas de abstração corretas e sobrecarga: basta adicionar uma referência ao assembly “visão" e,
permitir aos hosts e add-ins falar com modelos de objeto radicalmente
diferentes e, ainda assim, comunicarem-se e conectarem-se entre si.
Host novo / add-in antigo. O primeiro cenário de controle de versões Figura 4: Compatibilidade com versão anterior: addin V1 em host V2
que nos vem à mente é o de um novo host, com um modelo de objeto
revisado, tentando executar add-ins construídos de acordo com versões Adap- Addln
anteriores do host (Figura 4). Com o nosso modelo novo, se a visão do Visão tador Side Addln
host Contract Addln
host se modifica de uma versão para a seguinte, o programador precisa lado Adapter View
V2 V2 V1
host V2 V1->V2 V1
apenas criar um segundo AddInSideAdapter, o qual herda do contrato
novo e os converte para a versão do AddInView. Host V2

A vantagem dessa abordagem é que os add-ins antigos continuarão Adap- Addln


Visão tador Addln
trabalhando, independentemente das novas modificações. O próprio host Contract Side Addln
lado Adapter View
aplicativo não precisa manter registro das diferentes versões dos add- V2 host V2
V2
V2 V2
V2
ins e lida apenas com uma única visão do host; os vários componentes
do pipeline fazem conexão com qualquer das visões do add-in: antiga

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 35


Add-ins Gerenciados - Modelo

depois, herdar/implementar a classe de base abstrata ou interface que


Figura 5: Caminho de ativação
o host definiu para elas. A classe de base ou interface especificada
pelo host/add-in como origem da herança para os add-ins chama-se
“AddInBase”. No caso mais simples, os programadores de add-ins Host Addln
Host Side Contract Side Addln
apenas compilam seus assemblies, colocando-os em um diretório View View Addln
Adapter V1 Adapter V1
consultado pelo host. De modo geral, o programador do add-in V1 V1 V1 V1
também aplicará um atributo personalizado ao add-in para que o host
Host V1
possa identificá-lo, dando informações sobre o add-in ao host, antes
que este decida ativá-lo. Host Addln
Host Side Side Addln
Descoberta e ativação Contract Addln
View Adapter Adapter View
V1 V2
Depois que o programador do aplicativo definiu o modelo de objeto, V1 V1 V2->V1 V2
as próximas etapas são entender a forma de descobrir os add-ins
disponíveis e ativar os necessários. Em geral, os aplicativos farão isso
na inicialização ou em resposta a uma solicitação do usuário e, assim
sendo, o desempenho dessas operações é importante. Outra exigência
comum da descoberta é estar apta a consultar o sistema para saber Se o desempenho na inicialização é ponto crítico, o aplicativo pode
quais add-ins estão disponíveis e obter informações sobre cada um decidir chamar apenas o FindAddIns na inicialização e exigir que os
deles antes de decidir quais serão ativados. programadores de add-ins usem o AddInUtil como parte das
instalações ou dar aos usuários a opção de iniciar uma atualização do
O System.AddIn expõe esta funcionalidade por meio de duas classes
cache para renovar os add-ins disponíveis. Por outro lado, o
principais: AddInStore e AddInToken. O AddInStore contém um
programador do aplicativo pode escolher ter um hit de desempenho,
conjunto de métodos estáticos usados para localizar os add-ins
que acontece apenas quando novos add-ins são instalados, e chamar
disponíveis de acordo com o tipo de add-in solicitado e um conjunto
AddInStore.Update na inicialização.
de locais onde procurá-los. O resultado dessa pesquisa é uma coleção
de AddInTokens que representam os add-ins disponíveis, com Isolamento/colocar em sandbox
informações sobre eles. Depois de decidir quais AddInTokens ativar, Obviamente, descobrir os add-ins e decidir ativá-los representam
basta chamar o método Activate do AddInToken para receber um add- apenas parte da história: também é preciso assegurar que os add-ins
in do tipo solicitado. sejam ativados no "ambiente" desejado. Esse "ambiente" é composto
de vários elementos:
Nas suas formas mais simples, descobrir e ativar podem ser executadas
com algumas linhas, apenas (na verdade, falta uma linha de código Nível de isolamento:
neste exemplo): "
In-AppDomain

IList<AddInToken> tokens = "


Cross-AppDomain
AddInStore.FindAddIns(typeof(AddInType),
addinPath);
"
Cross-Process
foreach (AddInToken token in tokens) Pooling:
{
token.Activate<AddInType>(
"
Em domínio com outro, add-ins especificados pelo host
AddInSecurityLevel.Internet); "
Em seu próprio domínio
}
"
Cross-Process em domínio com outro, add-ins especificados pelo
Em System.AddIn, nós nos certificamos de que os aplicativos podem host
incluir a descoberta e a ativação dos add-ins nos seus caminhos de
inicialização e, ainda assim, ter uma boa experiência de usuário. O
"
Cross-Process em seu próprio domínio com outros domínios no
método FindAddIns é geralmente seguro para ser ativado na processo externo hospedando outros add-ins
inicialização pois, na verdade, não carrega nenhum assembly "
Cross-Process em seu próprio domínio, sem quaisquer outros add-
(tampouco lê no disco): em vez disso, procura em um arquivo cache ins sendo executados nesse processo
qual o diretório especificado. Esse arquivo cache possui informações
sobre todos os addins disponíveis em um diretório específico, assim Nível de segurança:
como o AddInBase de cada add-in. Dessa forma, FindAddIns pode "
Um dos valores padrão do sistema: Internet, Intranet, FullTrust
rapidamente listar todos os add-ins disponíveis de um determinado "
PermissionSet personalizado especificado pelo host.
tipo em cada diretório fornecido, bastando procurar em um único
arquivo cache em lugar de procurar em todos os assemblies de cada Ao analisar as sobrecargas disponíveis em AddInToken.Activate, vê-se
diretório e contar os tipos de cada assembly, procurando add-ins. como é fácil para os hosts especificar o ambiente desejado. No caso
mais simples, basta que o host informe um valor enumerado
Lógico, agora que o FindAddIns garante que só é preciso procurar em
especificando Internet, Intranet ou FullTrust e nós criaremos um
um arquivo cache, temos a seguinte pergunta: quando esse arquivo
AppDomain com esse nível de confiança, ativaremos o add-in que há
cache é gerado? É aqui que entra a linha que faltava:
nele, devolvendo-o. O nível de dificuldade depende do nível de
AddInStore.Update(addinPath);
controle desejado pelo host: no nível máximo, ele pode criar um
AddInStore.Update determinará, em primeiro lugar, se o cache do AppDomain próprio, ajustá-lo às suas necessidades e, depois, informá-
local informado está atualizado. Em caso positivo, a resposta do lo para fazermos a sua ativação.
método será bem rápida; caso contrário, será preciso reconstruir o
Técnicas de hospedagem confiável
cache. Como parte do framework (AddInUtil.exe), fornecemos também
uma ferramenta que facilita a atualização do cache como parte de um Hospedagem confiável
programa de instalação. Ao separar FindAddIns e Update e acrescentar Uma questão de primordial importância para muitos programadores
uma ferramenta de linha de comando que executa a mesma ação, de aplicativos extensíveis é a capacidade de manter a confiabilidade
proporcionamos aos aplicativos grande flexibilidade. do host na presença de add-ins defeituosos. Em alguns casos, isto é

36 THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net


Add-ins Gerenciados - Modelo

importante porque o próprio aplicativo host tem missão crítica e não Esgotamento dos recursos da máquina
pode aceitar a possibilidade de ficar inativo por força de um add-in; Nesta última categoria de problemas, o host precisa saber quando o
em outros casos, o programador do host não pode absorver o custo add-in esgota os recursos do sistema: pode acontecer no uso de
de dar suporte a clientes que procurem ajuda devido a problemas em volumes excessivos de memória ou até mesmo em ciclos da CPU.
extensões de terceiros. Alguns hosts precisam, simplesmente, estarem Dentro de um processo, não há forma de limitar os recursos dos add-
em condições de identificar e desativar o add-in que causou o ins executados em diferentes AppDomains, mas assim que estes são
travamento; já, outros, precisam certificar-se de que o host continuará transferidos para outro processo, é possível usar o sistema operacional
operacional, independentemente do que fazem seus add-ins. É preciso para controlar o seu fluxo. Depois de ativar o add-in fora-de-processo,
avaliar as exigências de confiabilidade de cada host. algumas poucas linhas adicionais de código são necessárias para
Quando se trata de confiabilidade, as preocupações dos alcançar esse controle de fluxo:
programadores se dividem em três categorias: corrupção do estado da AddInProcess addInProcess = new AddInProcess();
máquina, exceções não tratadas (travamentos) e esgotamento dos AddInType addIn =
recursos da máquina. Cada categoria apresenta problemas exclusivos e token.Activate<AddIntype>(addInProcess,
exige que diferentes providências sejam tomadas. AddInSecurityLevel.FullTrust);
Process tmpAddInProcess =
Corrupção do estado da máquina
Process.GetProcessById(addInProcess.ProcessId);
De certa forma, a corrupção do estado da máquina pode ser o
//Lower the priority of the add-in process below that
problema mais fácil de resolver porque o próprio sistema tem
of the host
condições de evitar. Em geral, tudo o que o host precisa é dar aos seus
tmpAddInProcess.PriorityClass =
add-ins um PermissionSet de segurança tão limitado quanto possível e
ProcessPriorityClass.BelowNormal;
o sistema CAS (Code-Access-Security) do .NET Frameworks garantirá //Limit the add-in process to 50mb of physical memory
que o add-in permaneça circunscrito nesses limites. Os APIs do tmpAddInProcess.MaxWorkingSet = (IntPtr)50000000;
System.AddIn facilitam isso ainda mais, deixando os hosts usar um dos
níveis de segurança definidos pelo sistema (Internet, Intranet ou Os hosts podem ir além e usar o sistema operacional para monitorar
FullTrust) ou permitindo-lhes definir seus próprios PermissionSet tudo: do tempo total da CPU consumido pelo processo até a
personalizados. Quanto maior for o número de recursos do sistema a quantidade de solicitações de E/S que o disco está fazendo por
ser protegido dos add-ins, menos permissões esses add-ins terão na segundo e, então, tomar as providências adequadas.
execução.
Conclusão
Exceções não tratadas Com a adição dos assemblies System.AddIn e da arquitetura à qual
As exceções não tratadas começam a ficar mais interessantes pois, na dão suporte, o .NET Framework 3.5 da Microsoft fornece um modelo
verdade, existem apenas dois tipos de exceções não tratadas com as
completo de add-in gerenciado, como prometido pela primeira vez no
quais o host deve se preocupar. O primeiro tipo inclui as exceções que
chegam ao host durante uma chamada do host no add-in e no PDC 2005. Os usuários podem esperar ver algumas adições em nosso
mesmo segmento. Para lidar com essas exceções, o host precisa conjunto de recursos nos próximos betas e, ainda mais, nas versões
adicionar um bloco de tentativa/captura de todas as suas chamadas futuras, mas tudo o que é preciso para construir hosts totalmente
no add-in e reagir adequadamente quando acontece uma exceção. extensíveis, com controle de versão e confiáveis, já está disponível e
Lidar com as outras exceções é muito mais difícil pois são realmente pronto para uso. Para saber mais sobre os tópicos cobertos neste
impossíveis de serem capturadas por um host: essas exceções ocorrem artigo ou para informações gerais sobre este modelo de add-in, visite
em segmentos cuja origem é o add-in ou em segmentos nos quais o
o blog da equipe de add-in no MSDN (vide Referências).
host não está em posição inferior na pilha.
A partir da versão 2.0 do CLR (Common Language Runtime), essas
exceções não tratadas serão sempre fatais para o processo; assim, se Referências
houver descuido, fica muito fácil para um add-in defeituoso derrubar CLR Add-In Team Blog
o host com ele. Se a exigência de confiabilidade do host exige http://blogs.msdn.com/clraddins/
simplesmente desativar os add-ins problemáticos (quase sempre uma
solução perfeitamente aceitável para aplicativos cliente), o host pode “CLR InsideOut: .Net Application Extensibility,” Jack Gudenkauf e
aproveitar um recurso da classe AppDomain denominado evento de Jesse Kaplan, MSDN Magazine, fevereiro e março, 2007
UnhandledException. Esse evento é acionado quando um segmento Parte 1,
cuja origem é o AppDomain-alvo emite uma exceção não tratada, http://msdn.microsoft.com/msdnmag/issues/07/02/CLRInsideOut/
prestes a derrubar o processo. Se o host quiser simplesmente Parte 2,
identificar os add-ins 'inconvenientes' para desativá-los, ele pode http://msdn.microsoft.com/msdnmag/issues/07/03/CLRInsideOut/
endossar esses eventos nos AppDomains em que seus add-ins são
executados; quando o evento é acionado, será possível registrar qual Visual Studio Code Name “Orcas”
add-in estava sendo executado naquele AppDomain. O host não pode http://msdn.microsoft.com/vstudio/future
evitar a desativação do processo, mas ele terá condições de
acrescentar o add-in em uma lista de 'desativados' e, então, reiniciar o
Sobre o autor
host.
Jesse Kaplan é gerente de programa de extensibilidade de aplicativo e
Se for preciso garantir que um add-in com condições de travar o controle de versões de runtime da equipe CLR (Common Language
sistema não derrube o host, este precisará tomar outras medidas para
isolar seus add-ins em um processo diferente. Existe um hit de Runtime). Entre as áreas pelas quais foi anteriormente responsável,
desempenho associado, mas o isolamento garante que apenas o destacam-se a interoperabilidade nativa gerenciada (COM) e
processo de add-in seja interrompido, em caso de falha. metadados.

THE ARCHITECTURE JOURNAL • Journal 12 • www.architecturejournal.net 37


ARC THE
ARCHITECTURE
JOURNAL
Inscreva-se no endereço: www.architecturejournal.net