• Nenhum resultado encontrado

los proveem o código da aplicação, implementando uma ou mais interfaces. Por outro lado, a configuração é usada para unir os componentes, conectando interfaces usadas pelos componentes com interfaces providas por outros. Cada aplicação é descrita por uma configuração num nível mais abstrato que une todos os componentes usados.

2.3

Middleware

Os principais fatores que contribuíram para que as organizações levassem a ter uma grande variedade de aplicações com heterogeneidade de hardware, sistemas operacionais e de linguagens de programação foram o desenvolvimento acelerado nas tecnologias de hardware, software, telecomunicações e as facilidades encontradas no uso de sistemas corporativos. Isso significa que esses sistemas legados adquiridos ao longo dos anos devem trabalhar em conjunto

com outros novos sistemas (VINOSKI,2002). Como resultado, a integração dessas aplicações

torna-se uma tarefa não trivial e complexa. Visando resolver esses problemas, foram desenvol- vidos serviços distribuídos tais como comunicação, segurança, gerenciamento de informações, dentre outros, que possuem protocolos e interfaces de programação padrões. Esses serviços são

chamados serviços de middleware (BERNSTEIN,1996).

Os componentes de middleware, localizados entre o sistema operacional e a aplicação, têm várias propriedades que, em conjunto, geralmente deixam claro que o componente não é um aplicativo ou serviço específico da plataforma. Eles são genéricos através de aplicações, são executados em múltiplas plataformas, são distribuídos, possuem protocolos e interfaces de

programação padrões e abstraem a complexidade e heterogeneidade dos ambientes (VINOSKI,

2002;BERNSTEIN,1993).

O middleware deve prover primitivas de alto nível que simplifiquem a construção de aplicações distribuídas. Ele implementa as camadas de sessão e apresentação do Modelo de Referência ISO/OSI, e assim como a pilha de protocolo de redes, ele pode ser decomposto em

múltiplas camadas (SCHMIDT; BUSCHMANN,2003), como apresentado na Figura 2.8:

 Camada de Infraestrutura - Esta camada abstrai as peculiaridades dos sistemas

operacionais, facilitando o desenvolvimento de aplicações em rede. Além disso, encapsula e melhora os mecanismos nativos dos sistemas operacionais;

 Camada de Distribuição - Permite o desenvolvimento e integração de aplicações

remotas de forma transparente, abstraindo de sua localização, linguagens de pro- gramação, sistema operacional, protocolos de comunicação e também o hardware utilizado. Ela define modelos de programação de alto nível cujo reuso de APIs e obje- tos otimizam e estendem os mecanismos nativos do sistema operacional encapsulados pela camada de infraestrutura;

Figura 2.8: Visão Geral do Middleware

 Camada de Serviços - A camada de serviços pode ser dividida em Serviços Co-

munse Serviços Específicos. Os Serviços Comuns definem serviços reusáveis de

alto nível e independentes do domínio da aplicação. Esses serviços permitem aos desenvolvedores de aplicações focarem apenas na lógica do negócio. Serviços Co-

munsde middleware fornecem, por exemplo, serviços de transação, segurança, pool

de conexão com banco de dados e reuso de componentes com múltiplas threads.

Serviços Específicos usados em determinados domínios de aplicações, como por

exemplo, telecomunicações, comércio eletrônico, computação móvel, etc. Visto que os serviços oferecidos por essa camada incorporam conhecimento de um domínio, eles possibilitam incrementar a qualidade e reduzir o esforço necessários para o desenvolvimento de particulares tipos de aplicações.

Como mencionado anteriormente, o middleware é uma camada de software entre a aplicação e o sistema operacional que oferece serviços e abstrai a complexidade da distribuição. Seus serviços devem atender a uma grande variedade de aplicações, ser implementados de forma a possibilitar a execução em múltiplas plataformas, possibilitar o acesso remoto a outros serviços e aplicações, suportar um protocolo padrão, por exemplo, TCP, suportar uma API padrão, dentre outros.

2.3.1

Requisitos para o Desenvolvimento de um Middleware

Devido à natureza das aplicações distribuídas, um sistema de middleware deve abstrair dos desenvolvedores de aplicações detalhes de baixo nível, tais como: comunicação, controle de concorrência, gerenciamento de transações, dentre outros. O suporte a estes requisitos varia

de um middleware para outro de acordo com a sua complexidade e abrangência (EMMERICH,

2.3. MIDDLEWARE 37

 Comunicação em Rede: Diversos componentes de um sistema distribuído podem

residir em diferentes hosts. Para que um sistema distribuído apresente vantagens computacionais, esses componentes devem se comunicar uns com os outros. Esta comunicação apenas pode ser conseguida através da utilização de protocolos de rede. Sistemas distribuídos são geralmente construídos em cima de camadas mais baixas providas pelos sistemas operacionais, como a camada de transporte, por exemplo. Se a comunicação entre sistemas distribuídos é realizada neste nível de abstração, os desenvolvedores de aplicação precisam implementar a camada de sessão e apre- sentação da pilha de protocolos da rede. Entretanto, essa tarefa requer tempo e pode promover o aparecimento de erros. Ao invés disso, os desenvolvedores de aplicação deveriam ser capazes de solicitar serviços parametrizados dos componentes remotos de modo a executá-los como transações atômicas e isoladas, deixando a implementação das camadas de sessão e apresentação para o middleware.

Assim, os sistemas de middleware normalmente usam a camada de transporte para implementar a troca de dados via rede. Cabe aos sistemas de middleware proverem complexos mecanismos de conversão de estruturas de dados de alto nível, recebidas dos aplicativos, em bytes a serem enviados através da rede para um outro aplicativo.

 Coordenação: Os sistemas distribuídos têm múltiplos pontos de controle, em virtude

dos componentes residirem em diferentes hosts. Componentes localizados no mesmo

host executam tarefas concorrentemente, levando à necessidade de sincronização

quando esses componentes comunicam-se uns com os outros. Essa sincronização precisa ser implementada na camada de sessão pelo middleware.

O middleware deve prover aos desenvolvedores de aplicações mecanismos básicos para dar suporte aos vários tipos de sincronização entre componentes remotos. Além disso, mais de um componente pode estar envolvido em uma requisição. Isto fre- quentemente acontece quando vários componentes estão interessados em eventos que ocorrem em algum outro componente.

Adicionalmente, o middleware deve fornecer mecanismos que permitam aos pro- gramadores determinar políticas de ativação e desativação de componentes como forma de gerenciar os recursos dos hosts, gerenciar o armazenamento do estado dos componentes anterior a sua desativação e, posteriormente, restaurar esse estado durante sua ativação.

Dado que componentes executam concorrentemente em hosts distribuídos, um com- ponente servidor pode ser requisitado por diferentes componentes clientes ao mesmo tempo. Dessa forma, o middleware deve suportar diferentes mecanismos para definir como os componentes devem reagir a tais requisições concorrentes.

Entretanto, não necessariamente existe a garantia de que todo pacote transmitido é entregue ao receptor e nem mesmo a ordem em que são enviados é preservada. Dessa forma, a implementação de um sistema distribuído deve prever mecanismos para detecção e correção de erros, mesmo que isso cause uma perda de desempenho. Logo, diferentes níveis de serviços de confiabilidade são necessários para permitir uma negociação entre esses requisitos.

 Escalabilidade: Este requisito define a capacidade de uma solução se adaptar a

um aumento de carga de forma uniforme ou estar preparado para um crescimento futuro de carga, sem causar grandes impactos na solução. O desafio da escalabilidade quando se trata da construção de um sistema distribuído é oferecer suporte à alocação de componentes sem alterações na arquitetura do sistema ou no projeto e código de algum componente.

 Heterogeneidade - Um sistema distribuído pode ser constituído de componentes

legados e novos, implementados em diferentes tecnologias. Como resultado, esses componentes são geralmente heterogêneos. Esta heterogeneidade existe em diferen- tes dimensões: hardware, sistemas operacionais, linguagens de programação e no

middlewareem si.

2.3.2

Middleware para Rede de Sensores Sem Fio

Apesar das pesquisas em middleware estarem bem estabelecidas em sistemas de compu- tação distribuída, as RSSFs adicionaram novos desafios de pesquisa para a área. Os sistemas de

middlewaretradicionais requerem muita memória e grande poder de processamento do hardware,

o que os torna inadequados para o uso em RSSF (GUIMARAES et al.,2006; SOUTO et al.,

2004). Portanto, uma solução de middleware para RSSF deve considerar características próprias

a essa nova classe de aplicações, a fim de prolongar o tempo de vida dessas redes. Dessa

forma, um projeto de middleware para RSSF tem como desafios os seguintes itens (HADIM;

MOHAMED,2006b,a):

 Gerenciamento de energia e recursos limitados: Uma RSSF consiste de um con-

junto de nós com pouca memória, reduzido poder computacional e severas restrições de energia, normalmente instalados em lugares de difícil acesso, o que inviabiliza a substituição ou manutenção dos dispositivos. Então, o middleware deve prover mecanismos para o uso eficiente da memória e bateria e ao mesmo tempo baixo consumo de energia durante a comunicação.

 Heterogeneidade: O middleware deve prover um modelo de programação de baixo

nível que permita a integração entre diferentes tecnologias de hardware e redes, aplicações escritas em diversas linguagens de programação e sistemas operacionais.