segunda-feira, 25 de abril de 2011

Aula 4 - Arquitetura em n Camadas

Arquitetura em n camadas

Na arquitetura com n camadas para sistemas distribuídos, aparecem as figuras Cliente e Servidor. Cliente é qualquer equipamento (processo) que depende de outro para executar seu trabalho. Servidor é este outro equipamento (processo) que atende o cliente.

Para que esta relação de solicitação e atendimento aconteça, é necessária a existência de meios de conexão entre ambas as partes (meios públicos, privados ou mistos). Qualquer equipamento (processo) pode atuar como cliente ou servidor, dependendo do momento, devido à troca de informações.

Arquitetura Centralizada

Dominantes até a década de 80 como arquitetura corporativa e sua interface não é amigável

Arquitetura em 2 camadas (ou 2-tier)
  • Sistemas em camadas surgiram para:
  • Melhor aproveitar os PCs da empresa
  • Oferecer sistemas com interfaces gráficas amigáveis
  • Integrar o desktop e os dados corporativos
  • Em outras palavras, permitiram aumentar a escalabilidade de uso de Sistemas de Informação.
  • Os primeiros sistemas cliente-servidor eram de duas camadas:
  • Camada cliente trata da lógica de negócio e da UI
  • Camada servidor trata dos dados (SGBD)
No início da utilização do modelo cliente/servidor, as aplicações foram desenvolvidas utilizando-se um modelo de desenvolvimento em duas camadas. Neste modelo, um programa é desenvolvido em uma linguagem e instalado no cliente. Este programa acessa dados em um servidor de banco de dados.

Funções da aplicação Cliente

Apresentação: O código que gera interface visível do programa, todos os formulários, menus e demais elementos visuais estão contidos no código da aplicação Cliente. Caso seja necessário qualquer alteração na interface do programa, deve-se gerar uma nova versão do mesmo e todos os computadores que possuem a versão anterior deverão atualizar para a nova para que o usuário possa ter acesso as alterações da interface.

Lógica do Negócio: Aqui estão as regras que definem a maneira como os dados serão acessados e processados. Fazem parte das regras do negócio, desde funções simples de validação de entrada de dados, como o cálculo do digito verificador de um CPF, até as funções mais complexas como descontos escalonados para os maiores clientes, de acordo com o volume da compra. Qualquer mudança nas regras do negócio implica em uma nova versão da aplicação que deverá ser atualizado em todos os computadores do cliente.

Banco de Dados: Camada a qual fica armazenado em servidor da rede. Uma aplicação desenvolvida a qual acessa um Banco de Dados em um servidor é um típico exemplo de uma aplicação em 2 camadas.
 Com mudanças constantes nas regras de negócio, o modelo 2 camadas demonstrou-se de difícil manutenção e gerenciamento além de apresentar um custo de propriedade elevado

DLL Hell

Diferentes aplicativos instalam diferentes versões da mesma DLL e um conflito é gerado. É o caso em que a instalação de um programa faz com que um ou mais programas instalados anteriormente deixem de funcionar. Problema para os usuário, que não tem os programas funcionam como deveriam; Problema para a equipe de desenvolvimento que não tem o seu trabalho reconhecido e normalmente tem que trabalhar apenas “apagando incêndios”; e problema para a gerência da rede que não consegue gerar os resultados esperados pela administração da empresa, apesar dos elevados valores já investidos.
Em busca de soluções para os problemas de 2 camadas, é que surge a proposta do modelo de 3 camadas.

Arquitetura em 3 camadas (3-tier)

A idéia básica do modelo de 3 camadas é retirar as Regras do Negócio do cliente e centralizá-las em um determinado ponto, o qual á chamado de Servidor de Aplicações. O acesso ao Banco de Dados é feito através das regras contidas no Servidor de Aplicações. Ao centralizar as Regras do Negócio em um único ponto fica muito mais fácil a atualização destas Regras do Negócio em um único ponto, fica mais fácil a atualização destas regras.
Todo o acesso do Cliente ao Banco de Dados, é feito de acordo com as regras contidas no servidor de aplicações. O Cliente não tem acesso direto ao Banco de Dados sem antes passar pelo servidor de aplicações. Com isso as três camadas são as seguintes:
Apresentação: Alteração na interface do programa gera necessidade de atualizar aplicações em todos os computadores. Vale ressaltar que alterações na interface são menos freqüentes do que alterações nas regras de negócio.
Lógica: Quando uma regra de negócio é alterada, basta atualizá-la no servidor de aplicações. Após a atualização, todos os usuários passarão a ter acesso a nova versão, sem que seja necessário reinstalar o programa em cada um dos computadores da rede. Ao centralizar as regras do negócio em um Servidor de aplicações, estamos facilitando a tarefa de manter a aplicação atualizada.
Dados: Os dados somente são acessados através do Servidor de aplicação , cada vez que forem necessárias mudanças na interface. Por isso que surgiram os modelos de n camadas.

Arquitetura ¾ Camadas Web-Service
  • Instalação dos programas no desktop é cara;
  • Problema de manutenção ainda persiste quando há mudanças à camada de apresentação;
  • Não se pode instalar software facilmente num desktop que não está sob seu controle administrativo;
  • Então usamos o browser com Cliente Universal:
  • Conceito de Intranet;
  • Camada de aplicação se quebra em duas: Web e Aplicação;
  • Evitamos instalar qualquer software no desktop, portanto problemas de manutenção;
  • Evitar instalação em computadores de clientes, parceiros, fornecedores, etc;

As vezes continua-se a chamar isso de 3 camadas porque as camadas Web e Aplicação podem rodar na mesma máquina para pequenos volumes.
Para acessar a aplicação o cliente acessa o endereço da aplicação por uma URL, utilizando o seu navegador. Todo o acesso do cliente ao Banco de Dados, é feito de acordo com as regras contidas no Servidor de Aplicações. O cliente não tem acesso direto ao Banco de Dados, sem antes passar pelo servidor de aplicações .Com isso as quatro camadas são as seguintes:

Cliente: Navegador usado pelo cliente. (Mozilla, Internet Explorer, etc.)

Apresentação: Acesso ao Banco de dados é feito através do Servidor de aplicações, então todas as alterações na interface da aplicação são feitas diretamente no Servidor Web sendo que estas alterações estarão, automaticamente, disponíveis para todos os Clientes. A única coisa que o cliente terá que instalar em sua máquina é o navegador, o acesso ao Banco de Dados é através do servidor de aplicações.

Lógica: São as regras do negócio que se encontram no servidor de aplicações. O usuário recebe as atualizações sem precisar instalar uma nova versão

Dados: Servidor de banco de dados no qual reside todas as informações necessárias para o funcionamento da aplicação.

Problemas de Arquiteturas em n Camadas
  • Não suporta thin clients (PDAs, Celulares, smart cards, quiosques, etc)
  • Dificuldade em se fazer aplicações distribuídas multicamadas.

Os principais requisitos para se implementar aplicações distribuídas multicamadas são:
  • Persistencia
  • Tolerância a falhas
  • Gerência de transações distribuídas 
  • Balanceamento de carga
  • Resource pooling

As camadas podem ter vários nomes:
  • Apresentação, interface, cliente
  • Web
  • Aplicação, Business
  • Dados, Enterprise Information System (EIS)
Vantagens de Arquitetura Cliente/Servidor em n Camadas
  • Oferece maior estruturação no processamento distribuído, baseada no conceito serviços
  • Permite compartilhamento de recursos eficiente
  • Oferece transferência de localização
  • Permite comunicação entre processos através de troca de mensagens, o que torna a arquitetura fracamente acoplada
  • Oferece encapsulamento de serviços

Desvantagens de Arquitetura Cliente/Servidor em n Camadas
  • Maior complexidade
  • Dependência de comunicação
  • Custos mais altos que em soluções centralizadas
Service-Oriented Architecture (SOA)

Utilizamos SOA quando queremos que um programa acesse uma aplicação remota distribuída. Além disso, queremos cruzar domínios administrativos. Deve-se ter uma forma de expor a funcionalidade de um programa para outro programa. Atualmente a tecnologia empregada é "Web Services"

Características da arquitetura SOA
  • Promove integração fácil
  • Acesso a sistemas por outros sistemas e não somente por usuários
  • Pode misturar linguagem de programação (java com .net)
  • Composição de serviços para criar serviços maiores usando outros serviços
  • Serviços podem ser descobertos
  • Comunicação frequentemente assíncrona

Aula 3 - Sistemas Distribuídos

Sistemas Distribuídos - Sincronização

Sistemas distribuídos em geral contém muitos processos que colaboram para alcançar uma meta comum. Eventos em um nodo do sistema distribuído depende de eventos de outros nodos. Determinar a ordem em que estes eventos ocorrem é muito difícil devido aos atrasos imprevisíveis que ocorrem em uma rede distribuída.
Os fatores que contribuem para que este atraso ocorra são:
  • Número de processadores desconhecido;
  • Topologia de rede desconhecida;
  • Entradas independentes em diferentes locais;
  • Vários programas executados de uma só vez, começando em tempo diferente e operando a velocidade diferente;

Fatores que dificultam a sincronização:
  • Não determinismo dos processadores;
  • Tempos de envio de mensagem incertos;
  • Desconhecimento da ordenação das mensagens;
  • Falhas de processadores e comunicação;

Exclusão Mutua em Sistemas Distribuídos

Um processo é escolhido como coordenador, ele é responsável por controlar entrada de processos em regiões críticas. Quando um processo deseja acessar uma região crítica, ele envia uma mensagem ao coordenador, que por sua vez, irá verificar se a região está desocupada e pode ser acessada.
Se a região crítica está ocupada com outro processo, o coordenador não responde ao pedido. Caso o contrário o coordenador permite o acesso a região crítica.

Características
  • Garante exclusão mútua;
  • Nenhum processo espera indefinidamente (Não há starvation – situação a qual alguns processos são repetidamente preteridos, enquanto outros ficam com acesso ao recurso desejado)
  • É fácil de ser implementado;
  • Coordenador é um ponto único de falha;
  • Coordenador pode representar um gargalo em termos de desempenho.

Algoritmo distribuído para Exclusão Mútua

Para evitar os gargalos de um coordenador temos o algoritmo de exclusão mútua que funciona da seguinte forma:
Quando um processo quer entrar em uma região crítica, ele constrói uma mensagem contendo o nome da região crítica que ele quer acessar, seu número de processo e o tempo corrente. Ele envia essa mensagem para todos os outros processos.
Quando a mensagem chega ao destino processo destino ele pode tomar uma das seguintes decisões
Se o receptor não está na região crítica e não quer acessá-la, ele devolve a mensagem OK para o emissor.
Se o receptor está na região crítica, ele não responde e enfileira o pedido.

Características
  • Garante exclusão mútua;
  • Não há Starvation;
  • Gera mais tráfego na rede;
  • Não há um ponto único de falha e sim N pontos de falha ( onde N é o número de processos);
  • Gerência do grupo é mais difícil;
  • Todos os processos estão envolvidos em todas as decisões e cada processo representa um gargalo em potencial;

Algoritmo de Exclusão Mútua – Anel

Através de software, um anel lógico é construído onde a cada processo é atribuído um número no anel, onde cada processo conhece o processo sucessor.
Quando a rede é inicializada, o processo 0 recebe um token. Este token circula pela rede onde é passado de um processo ao outro em mensagens ponto a ponto.
Quando um processo recebe o token, ele verifica se está querendo acessar alguma região crítica. Se ele necessita, ele acessa e passa o token para o processo vizinho assim que ele finalizar o acesso a região crítica.
Se um processo recebe um token mas ele não deseja acessar nenhuma região crítica, ele libera o token imediatamente ao processo vizinho.

Problema com este algoritmo

Falha dos processos: Se um dos componentes do anel falhar causa sua quebra.

Perda do token: O tempo entre os aparecimentos do token é limitado, sendo difícil determinar sua perda.


 
Deadlock

“Um conjunto de processos está em Deadlock se cada processo no conjunto  está esperando por um evento que apenas outro processo do conjunto pode gerar” (Tanenbaum)

Um conjunto de processos fica bloqueado, cada um a espera de um recurso que o outro detém.
Nos sistemas distribuídos podem ocorrer dois tipos de Deadlocks:

Deadlock de comunicação: Quando um processo A está tentando acessar uma mensagem para o processo B que está tentando uma mensagem para o processo C que está tentando uma mensagem para o processo A.

Deadlock de Recursos: Ocorre quando os processos estão lutando para uso exclusivo de dispositivos de I/O, arquivos ou outros recursos.

Condição de Exclusão Mútua: Para os recursos e processos envolvidos, apenas um processo pode acessar um determinado recurso em um dado momento.

Condição de Obtenção e Espera: Para os recursos e processos envolvidos, cada vez que um processo tenta acessar um recurso, ele, ou obtém o recurso ou entra em estado de espera até que o mesmo seja liberado pelo processo que obteve anteriormente.

Condição de Recursos Não Preemptivos: Para os recursos e processos envolvidos, quando um processo requisita um recurso já possuído por outro processo, o processo que o possui não pode perder a posse do recurso para aquele que requisitou o recurso sem que ele o libere espontaneamente.

Condição de Espera Circular: Para um conjunto de processos, cada processo no conjunto está esperando por um evento que apenas outro processo do conjunto pode gerar.

As quatro estratégias para tratamento de Deadlock

Quanto a escolha das estratégias deve ser feita baseada nos requisitos do sistema, isto é, naquele que o sistema suporta em termos de custos ou restrições.
As estratégias são as seguintes:

Ignorar o problema: Como em alguns sistemas a ocorrência de Deadlocks acarreta apenas problemas toleráveis, ou a freqüência em que este evento ocorre torna mais barato uma recuperação manual do sistema a um estado funcional. Estratégia utilizada na maioria dos Sistemas Operacionais, incluindo UNIX.

Detectar e Recuperar: Esta estratégia consiste em detectar a ocorrência de um Deadlock e uma vez que se tenha atingido este estado, tomar alguma medida para recuperar o sistema.
Tipicamente a solução de recuperação do sistema é matar um dos processos pertencentes ao conjunto ao conjunto de processos Deadlock.
Muitas vezes essa solução não é muito desejável e a detecção dos Deadlocks pode envolver um custo adicional considerável ao sistema.

Evitar: Detectar dinamicamente se algum conjunto de requisições por recursos levará a um Deadlock, e caso isso venha a ocorrer, mudar a ordem das requisições de forma que não ocorra o Deadlock.

Prevenção: Construir um sistema de forma que não seja possível atingir o estado de Deadlock.
A maneira mais simples de fazer isso é obrigar que cada processo adquira todos os recursos necessários antes de iniciar o processamento, assim eliminando a condição de espera circular. Outra forma de evitar o Deadlock é causar a preempção de recursos, de forma a quebrar o requisito de não preempção.

domingo, 24 de abril de 2011

Aula 2 - Sistemas Distribuidos

Comunicação em Sistemas Distribuídos

Em sistemas centralizados, onde as máquinas utilizam memória compartilhada, a comunicação é feita através de variáveis de memória compartilhada.
Nos sistemas distribuídos é necessário organizar a comunicação, já que as máquinas não usam memória compartilhada. A comunicação Cliente-Servidor é a mais utilizada pelas aplicações distribuídas que fazem uso da internet como infra-estrutura de comunicação

Modelo Cliente-Servidor

O modelo Cliente-Servidor gerencia a descentralização de dados e recursos de processamento.
Neste modelo, existe uma ou mais máquinas que atuam como Servidores disponibilizando recursos para as demais máquinas Cliente. Todas as máquinas estão conectadas através de uma infra-estrutura de rede.

Principais vantagens do modelo Cliente-Servidor
  • Simplicidade;
  • Não há necessidade de estabelecer conexão quando usamos UDP/IP;
  • Eficiência da organização e do processamento;
  • Aumenta o poder dos computadores pessoais;
  • Permite o processamento continuar próximo ao dado processado, reduzindo o tráfego na rede;
  • Encoraja aceitação de sistemas abertos por executarem em diferentes plataformas de hardware e software;

Formas de endereçamento
Existem diversas formas de endereçar serviços em uma chamada remota. Abordaremos as 3 principais para o uso de Cliente-Servidor:
  1. Endereçamento Máquina, Processo (IP,PORTA) - Sockets:Este é um modelo não transparente sendo necessário adicionar ao código do cliente a localização dos serviços. Em caso de indisponibilidade do serviço ou migração da máquina, provavelmente será necessário alterar o código da aplicação cliente e re-compilar o programa.
  2. Endereçamento Randômico: O processo cliente envia mensagem na rede perguntando qual é a máquina que está disponibilizando determinado serviço. A máquina responsável pelo serviço responde e fica aguardando a solicitação do cliente. Este modelo gera uma quantidade de mensagens extra no sistema, o que diminui o desempenho das aplicações. Por outro lado o grau de transparência de localização dos serviços é alto.
  3. Servidor de Nomes (DNS): Nesse modelo existe a presença de uma entidade para intermediar as solicitações realizadas pelos clientes. Um servidor de nomes é adicionado ao sistema para mapear a localização dos serviços disponíveis no sistema distribuído. O DNS utiliza tabela para referenciar IP e PORTA de cada um dos serviços cadastrados.

Aula 1 - Sistemas Distribuidos


"Um sistema distribuido é uma coleção de computadores independentes que aparece para os usuários do sistema como um único computador" (Tanenbaum)

Levando em consideração a definição dada pelo Tanenbaum, sistema distribuido é aquele que roda em um conjunto de máquinas sem memória compartilhada e mesmo assim aparece para os usuários como se fosse um único computador.

Sistemas Centralizados X Sistemas Distribuídos

A principal diferença entre os sistemas centralizados dos distibuídos está na forma de comunicação e sincronismo entre os processos.
Os sistemas centralizados realizam a sincronização por áreas compartilhadas de memória, já nos sistemas distribuídos a sincronização é obtida através da troca de mensagem.

Características desejáveis nos Sistemas Distribuídos:

  • Compartilhamento otimizado dos recursos: São hardware (impressora, scanners, e outros equipamentos) e aplicativos, dados ou arquivos que são gerenciados por softwares servidores;
  • Estrutural: Sistemas distribuídos devem refletir a estrutura organizacional distribuída a qual eles servem.
  • Transparência: Um software gerencial esconde dos usuários os componentes que formam o sistema todo, fazendo com que o usuário enchergue apenas o que lhe interessa, que é a aplicação como se fosse um sistema único. O processo do usuário pode ser executado de qualquer máquina da rede, sendo escolhida pelo sistema, conforme a disponibilidade do momento.
    Alguns tipos de tranparências que podem ser encontradas:
  1. Transparência de Acesso: As operações de acesso à determinados dados, recursos ou dispositivos devem estar localizadas em um único sistema, independentemente se as operações encontram-se na mesma máquina onde foram solicitadas ou em um equipamento remoto.
  2. Transparência de Localização: Os recursos, dados ou dispositivos que serão compartilhados e acessados não devem fornecer aos usuários informações relevantes referente a sua localização.
  3. Tranparência de Migração: Os recursos podem ser transferidos de um servidor à outro do sistema e isso não deve interferir na forma de referência dos usuários a esses recursos.
  4. Transparência de Replicação: O sistema distribuído deve ser capaz de gerenciar a replicação de informações de forma transparente aos usuários
  5. Tranparência em relação à falhas: O sistema distribuído deve gerenciar as falhas tornando assim um problema isolado e não compartilhar um determinado problema com todo o sistema de compartilhamento.
  • Confiabilidade: Não se pode de maneira alguma sofrer perda ou adulteração nos dados. Deve-se manter a integridade total dos dados. E também deve-se manter:
    • Disponibilidade: Deve estar sempre apto a ser utilizado;
    • Segurança: Proteger os recursos de acessos não autorizados;
    • Tolerância a falhas: Redundância no hardware e software (Backup's)
  • Desempenho: Compartilhamento de recursos com melhor utilização da carga de processamento entre todas as máquinas do sistema.
  • Escalabilidade: Agregar novos valores de recursos sem afetar o desempenho do sistema. Apesar de não haver limitação em número de máquinas e nem distância e diversidade das mesmas, aumenta-se o nível de complexidade no gerenciamento do sistema. Portanto deve-se introduzir softwares e máquinas conforme a necessidade facilitando a manutenção do sistema e o isolamento de falhas.
  • Flexibilidade: O sistema deve ser flexível para permitir mudanças, caso haja necessidade de acomodar um novo recurso.
  •  
    Vantagens dos Sistemas Distribuídos

    •  Compartilhamento dos recursos: Usuários de um site pode compartilhar com outros sites arquivos e dispositivos (impressora, scanner, etc)
    • Velocidade de computação: Um processamento pode ser dividido entre as máquinas que compõem o sistema distribuído, assim aumentando a velocidade de processamento de determinada operação.
    • Confiabilidade: Em um sistema distribuído, se um site falhar os sites restantes poderão continuar operando. Uma ação deve ser tomada para recuperar o site que ocorre a falha, enquanto isso, outro site deve assumir a funcionalidade do site em manutenção. Quando o site que contém a falha for recuperado o sistema trata de integrá-lo novamente.
    • Comunicação: Troca de informação em longa distância entre os computadores conectados na rede.
    Todas essas vantagens resultam em um downsizing (redução radical) onde as empresas e instituições obtêm mais retorno do investimento, mais flexibilidade na localização de recursos e expansão das instalações e melhores interfaces de usuários.

    Problemas ou Desafios de um Sistema Distribuído:
     
    • Problemas com software: Os Sistemas operacionais, linguagem e aplicativos para este ambiente são relativamente novos e não estão plenamente consolidados.
    • Problemas de rede: Seja rede local ou longa distancia, não existe confiabilidade total para interligação, logo pode ocorrer perda de link ou saturação devido a sobrecarga na banda disponível.
    • Problema de segurança - Acesso indevído: Uma vez que os dados existentes no sistema podem ser facilmente acessados, fica fácil um usuário acessar dados os quais ele não deveria ter acesso.

    Exemplos e Aplicabilidade de Sistemas Distribuídos:
     
    - Internet (World Wide Web): Maior sistema distribuido;
    - Sistemas Bancários;
    - Sistemas de Hipermercados;
    - etc;