sexta-feira, 12 de setembro de 2008

Escalabilidade

Escalabilidade Permitir que o sistema cresça sem grande perda de desempenho Dimensões de crescimento Tamanho: quantidade de usuários e recursos Geografia: acesso a distâncias maiores
Problemas de escalabilidade Centralização de serviços ou dados Um único servidor é responsável por prover um tipo de serviço ou dados Quando o sistema cresce, o servidor não suporta a carga de trabalho
Técnicas de escalabilidade Distribuição: Distribuir entre vários computadores os serviços e os dados,nenhum servidor prestará todos os serviços nem possuirá todos os dados.Se um servidor falhar, nem tudo está perdido.Não é fácil definir um método de distribuição Replicação.Vários servidores com os mesmos serviços e/ou dados,aumenta disponibilidade e desempenho do sistema. Problema Consistência: nem sempre é fácil tratá-la da maneira adequada ou necessária
Espaços de Tuplas

Um blackboard pode ser visto como uma área de memória compartilhada que pode ser acessada por diferentes agentes. Os agentes são capazes de escrever, ler e apagar dados desta área, que pode então ser utilizada como uma interface de comunicação entre pos agentes. Além da comunicação explícita entre os agentes um blackboard pode ser utilizado para armazenar informações relativas ao ambiente onde o agente executa. O blackboard pode ser utilizado ainda como área de armazenamento de código e estado de agentes persistentes.
Existem implementações específicas de blackboards denominadas espaços de tuplas à la Linda, também denominados blackboards associativos ou simplesmente espaços de tuplas. Existem dois elementos básicos em um espaço de tuplas: as Tuplas e o próprio Espaço. Ao contrário de mensagens tradicionais, uma tupla é um objeto propriamente dito, composta de uma série de outros objetos. O espaço funciona como um repositório de tuplas e nele podem ser executadas diferentes operações como, por exemplo, leitura e escrita de tuplas.
Tuplas são lidas de um espaço através da utilização de buscas associativas onde coringas2 podem ser utilizados. Por exemplo, a tupla (“mensagem” , “agente1” , “Olá!”) pode ser lida através de uma busca utilizando padrão (“mensagem” , “agente1”, String), onde o String representa um coringa para qualquer conjunto de caracteres.
Espaços de tuplas devem no mínimo implementar as operações básicas de leitura, escrita e retirada de tuplas, mas dependendo da implementação outras operações derivadas destas podem existir, como por exemplo, leitura de um conjunto de tuplas ou o bloqueio do agente que deseja ler uma tupla que ainda não se encontra espaço.
Ao contrário da troca de mensagens tradicional entre agentes, a utilização de espaços de tuplas oferece um estilo de programação desacoplado. Isto pode ser dito porque uma vez que um agente cria e escreve uma tupla em um espaço ele não precisa saber especificamente qual outro agente a lerá nem em que momento isto irá acontecer [9]. Na verdade a existência de uma tupla em um espaço é independente do agente que a criou e dos agentes que possam vir a realizar alguma operação sobre ela.
Existem diversas implementações comerciais de espaços de tuplas. Dentre estas as duas mais conhecidas são IBM TSpaces [35] e Java Spaces [14]. Estas implementações oferecem suporte para as operações básicas de espaços de tuplas (leitura, escrita e retirada de tuplas), além de outras derivadas destas. Também é disponibilizado o controle de transações no acesso aos espaços, e a opção de manter espaços persistentes. Os espaços utilizados nestas implementações também podem ser acessados a partir de clientes remotos.


www2.dbd.puc-rio.br/pergamum/tesesabertas/0115636_02_cap_02.pdf
Escalabilidade
Capacidade de todo sistema de manipular uma porção crescente de trabalho de forma uniforme ou estar preparado para o crescimento do mesmo.

Técnicas de escalabilidade
Distribuição
 Distribuir entre vários computadores os serviços e os dados
 Nenhum servidor prestará todos os serviços nem possuirá todos os dados
 Se um servidor falhar, nem tudo está perdido
 Não é fácil definir um método de distribuição

Replicação
 Vários servidores com os mesmos serviços e/ou dados
 Aumenta disponibilidade e desempenho do sistema
 Problema
 Consistência: nem sempre é fácil tratá-la da maneira adequada ou necessária

Caching
 Permitir processos clientes acessar cópias locais

www.eraldoluis.pro.br/downloads/disciplinas/2008.1.ngr/aula06.pdf

SISTEMAS PERVASIVOS

Consciência do contexto do aprendiz em um ambiente de educação pervasiva


Nos sistemas pervasivos, os equipamentos costumam a ser caracterizados por seu pequeno tamanho, pela alimentação por bateria, por sua mobilidade e por terem somente uma conexão sem fio, se bem que nem todas essas características se aplicam a todos dispositivos.
Segundo Ogata 2003, o conhecimento está presente no dia – a – dia em diferentes formas e locais. A essência da educação pervasiva consiste em perceber este conhecimento e relacionar os processos educacionais com o contexto do aprendiz, levando em consideração seu modelo de mobilidade. Alguns novos elementos computacionais para suporte à educação em ambientes pervasivos são necessários, tais como:
Mobilidade: os sistemas educacionais devem dar suporte à mobilidade do aprendiz e o acesso aos recursos educacionais. Esses devem estar disponíveis em vários formatos, distribuídos em uma rede educacional, e não mais localizados em um único local;
Adaptação: a mobilidade e a capacidade do aprendiz de acesso aos recursos educacionais utilizando diferentes recursos computacionais trazem a necessidade de adaptação a estes recursos. Os objetivos, preferências, modelos de aprendizagem, de mobilidade e de contexto do aprendiz devem ser considerados;
Consciência do contexto: a mobilidade do aprendiz traz a possibilidade do mesmo aprender em diferentes cenários e situações, onde diferentes recursos e oportunidades de aprender podem estar disponíveis. É importante pró – ativamente sugerir e indicar ao aprendiz elementos presentes no contexto virtual e não-virtual e que são de interesse dele. Com isto, as informações sobre o local onde se encontra o aprendiz (por exemplo, um evento que está ocorrendo ou vai ocorrer) podem ser relacionadas com seus objetivos educacionais (o aprendiz pode estar interessado no tópico do evento).


O GlobalEdu (Barbosa, 2005), (Barbosa, 2006) é uma infra-estrutura para suporte aos processos de ensino e aprendizagem em um cenário pervasivo de acesso em larga escala.
No GlobalEdu, contexto é definido como toda informação relevante para o aprendiz e que pode ser obtida para suporte ao seu processo educacional, levando em consideração seu modelo.
O Contexto Social do aprendiz refere-se as informações sobre uma determinada localização. Essa pode ser a localização de uma Região geográfica ou de uma Sub região. Assim, o Contexto Social descreve características associadas a Pessoas, Eventos e Recursos da localização onde se encontra o aprendiz. As informações de Contexto Social são armazenadas em um Repositório de Contexto Social.
O Contexto Físico manipula informações de interesse da execução do A3P e dos recursos educacionais acessados pelo aprendiz, quais sejam: tipo e banda da rede que o aprendiz está acessando dentro do contexto, sua localização, o tipo e autonomia do dispositivo em uso no momento. Além dessas informações, é percebida a presença de outros A3Ps no contexto. Essa informação identifica outros aprendizes com os mesmos objetivos, competências e preferências que o aprendiz na mesma localização. Assim, o A3P tem a capacidade de relacionar aprendizes dentro de um mesmo contexto.
A estratégia de adaptação ao contexto permite ao SE Gerência de Contexto do GlobalEdu relacionar as informações do modelo do aprendiz com o contexto. Havendo restrições dos elementos de contexto físico (como um dispositivo com recursos limitado), o serviço orienta o processo educacional levando em consideração as preferências do aprendiz. Sempre que a localização é alterada, o serviço adapta e sugere ao aprendiz acesso às informações de Contexto Social que são relevantes para ele.
O MeetAgent consiste em uma versão simplificada do A3P. Tem como objetivo permitir a interação entre aprendizes que tenham interesses e objetivos em comum e que estão presentes em um mesmo contexto. Assim, foram implementadas funcionalidades do sistema que permitem a identificação e o relacionamento de aprendizes no contexto, sendo a identificação responsabilidade do SE Modelo de Aprendiz e o relacionamento do SE Gerência de Contexto.
A aplicação MeetAgent relaciona aprendizes em um mesmo contexto, auxiliando a identificar afinidades entre eles, permitindo assim um processo de interação mútua. O modelo de consciência do contexto proposto foi validado com dois aprendizes no âmbito de um campus universitário.

http://www.cinted.ufrgs.br/renote/jul2006/artigosrenote/a41_21219.pdf

TÉCNICAS DE ESCALABILIDADE

Há discussões sobre alguns problemas da escalabilidade, problemas que podem ser geralmente solucionados. Porque os problemas nos sistemas distribuídos aparecem como problemas de desempenho causado por capacidade limitada de servidores e rede, há basicamente, três técnicas de escalabilidade: latência de comunicação, distribuição e replicação.
Latência de comunicação: é aplicada no caso da escalabilidade geográfica. Constrói a aplicação de forma a utilizar somente comunicação assíncrona, em aplicações batch e paralelas normalmente é bem aceita mas o mesmo não ocorre em aplicações interativas, neste caso, uma solução é diminuir a necessidade de comunicação movendo parte da computação do servidor para o cliente.
Distribuição: um componente é dividido em partes menores, distribuindo essas partes no sistema. Um bom exemplo de distribuição é a “Internet Domain Name System (DNS)”. O DNS é hierarquicamente, organizado em uma árvore de domínios, que são divididos entre zonas.
Replicação: a replicação não somente aumenta a disponibilidade, mas também ajuda a equilibrar a carga entre componentes, o que resulta em melhor desempenho. Em sistemas de ampla dispersão geográfica, ter uma copia por perto pode ocultar grande parte dos problemas de latência de comunicação.

http://www1.fatecsp.br/aguiar/sistemasdistribuidos.htm

Espaço de Tuplas

Existem dois elementos básicos em um espaço de tuplas: As Tuplas e o próprio Espaço. Ao contrário de mensagens tradicionais, uma tupla é um objeto propriamente dito, composta de uma série de outros objetos.
O espaço funciona como um repositório de tuplas e nele podem ser executadas diferentes operações como, por exemplo, leitura e escrita de tuplas.
Tuplas são lidas de um espaço através da utilização de buscas associativas onde coringas podem ser utilizados. Por exemplo, a tupla ("mensagem" , "agente1" , "Olá!"), pode ser lida através de uma busca utilizando padrão ("mensagem" , "agente1" , String), onde o String representa um coringa para qualquer conjunto de caracteres.
Espaços de tuplas devem no mínimo implementar as operações básicas de leitura, escrita e retirada de tuplas, mas dependendo da implementação outras operações derivadas destas podem existir, como por exemplo, leitura de um conjunto de tuplas ou o bloqueio do agente que deseja ler uma tupla que ainda não se encontra espaço.
Ao contrário da troca de mensagens tradicional entre agentes, a utilização de espaços de tuplas oferece um estilo de programação desacoplado. Isto pode ser dito porque uma vez que um agente cria e escreve uma tupla em um espaço ele não precisa saber especificamente qual outro agente a lerá nem em que momento isto irá acontecer. Na verdade a existência de uma tupla em um espaço é independente do agente que a criou e dos agentes que possam vir a realizar alguma operação sobre ela.
Existem diversas implementações comerciais de espaços de tuplas. Dentre estas as duas mais conhecidas são IBM TSpaces [35] e Java Spaces [14]. Estas implementações oferecem suporte para as operações básicas de espaços de tuplas (leitura, escrita e retirada de tuplas), além de outras derivadas destas. Também é disponibilizado o controle de transações no acesso aos espaços, e a opção de manter espaços persistentes.
Os espaços utilizados nestas implementações também podem ser acessados a partir de clientes remotos.

Link : http://www2.dbd.puc-rio.br/pergamum/tesesabertas/0115636_02_cap_02.pdf

Espaço de tuplas

Um espaço de tuplas tem como função criar uma abstração de memória compartilhada sobre um sistema distribuído. Por propiciar modelos de programação muito simples e com baixo acoplamento entre os elementos do sistema, espaços de tuplas têm sido empregados na construção de sistemas distribuídos complexos. O espaço de tuplas JavaSpaces é um dos mais populares espaços de tuplas para a linguagem Java. Ele tem como características relevantes a conformidade a objetos, a persistência e o emprego de transações. As atuais implementações de JavaSpaces apresentam restrições como: complexidade de configuração, limitação de alcance e não serem abertas. Por “complexidade de configuração” entende-se ter que usar boa parte da infra-estrutura Jini (feita para facilitar o desenvolvimento e administração de sistemas distribuídos) e o Remote Method Invocation (mecanismo de chamadas remotas padrão no ambiente Java), mesmo quando eles seriam dispensáveis. Por "limitação de alcance", entende-se não poder usar as implementações sobre redes amplas, como a Internet. Por “não ser aberto” entende-se que: ou o código fonte não está disponível ou o código fonte e o aplicativo são distribuídos por licenças de software proprietárias ou o uso do software requer algum componente proprietário. Um projeto de espaço de tuplas em conformidade com a especificação JavaSpaces e que busca contornar as restrições acima é apresentado neste trabalho. São destaques do projeto proposto: 1. Dispensar o Remote Method Invocation pois utiliza sockets diretamente; 2. Implementar a persistência sobre bases de dados relacionais; 3. Suscitar o emprego de um mecanismo direto para obtenção de proxies Jini. As características 1 e 3 simplificam a configuração do espaço de tuplas e viabilizam o seu emprego da Internet. A característica 2 viabiliza uma implementação baseada em software aberto.

http://www.teses.usp.br/teses/disponiveis/55/55134/tde-08032003-012015/

Técnicas de Escalabilidade

O desempenho do sistema não deve ser degradado na medida que o número de nós cresce.
Um sistema distribuído que opera bem com 10 máquinas também deve funcionar bem com 10.000 máquinas.
Escalabilidade pode ser definida em 3 níveis:
Tamanho : Facilidade de adicionar usuários e recursos.
Termos Geográficos: Usuários e recursos estão podem estar geograficamente distribuídos.
Termos Administrativos: Facilidade de gerenciar, mesmo com várias áreas administrativas.

Link do trabalho: http://ftpredesesistemas.fatern.edu.br/isaniolopes/Requisitos%20de%20Software%20para%20Sistemas%20Distribu%C3%ADdos.pdf

Espaço de Tuplas

Um espaço de tuplas tem como função criar uma abstração de memória compartilhada sobre um sistema distribuído. Por propiciar modelos de programação muito simples e com baixo acoplamento entre os elementos do sistema, espaços de tuplas têm sido empregados na construção de sistemas distribuídos complexos. O espaço de tuplas JavaSpaces é um dos mais populares espaços de tuplas para a linguagem Java. Ele tem como características relevantes a conformidade a objetos, a persistência e o emprego de transações. As atuais implementações de JavaSpaces apresentam restrições como: complexidade de configuração, limitação de alcance e não serem abertas. Por “complexidade de configuração” entende-se ter que usar boa parte da infra-estrutura Jini (feita para facilitar o desenvolvimento e administração de sistemas distribuídos) e o Remote Method Invocation (mecanismo de chamadas remotas padrão no ambiente Java), mesmo quando eles seriam dispensáveis. Por "limitação de alcance", entende-se não poder usar as implementações sobre redes amplas, como a Internet. Por “não ser aberto” entende-se que: ou o código fonte não está disponível ou o código fonte e o aplicativo são distribuídos por licenças de software proprietárias ou o uso do software requer algum componente proprietário. Um projeto de espaço de tuplas em conformidade com a especificação JavaSpaces e que busca contornar as restrições acima é apresentado neste trabalho. São destaques do projeto proposto: 1. Dispensar o Remote Method Invocation pois utiliza sockets diretamente; 2. Implementar a persistência sobre bases de dados relacionais; 3. Suscitar o emprego de um mecanismo direto para obtenção de proxies Jini. As características 1 e 3 simplificam a configuração do espaço de tuplas e viabilizam o seu emprego da Internet. A característica 2 viabiliza uma implementação baseada em software aberto. Um protótipo foi implementado para verificar as idéias propostas.
http://www.teses.usp.br/teses/disponiveis/55/55134/tde-08032003-012015/

Espaço de Tuplas

Modelo de Memória com operações de escrita e leitura.
Sistemas distribuídos tem no espaço de tuplas uma memória comum onde todos podem ler e escrever no mesmo.
O espaço de tuplas cria uma "ilusão" de que existe um espaço compartilhado entre os objetos no sistema disttribuido, mas na realidade os objetos estão dispostos nas memórias dos nós de cada sistema distribuido.
Um espaço de tuplas é dito com segurança de funcionamento se ele provê os atributos
de segurança de funcionamento. Os atributos relevantes neste caso são: Confiabilidade:
as operações realizadas no espaço de tuplas fazem com que seu estado se modifique de acordo com sua especificação;
Disponibilidade: o espaço de tuplas sempre está pronto para executar as perações requisitadas por partes autorizadas;
Integridade: nenhuma alteração imprópria no estado de um espaço de tuplas pode ocorrer, i.e. o estado de um espaço de tuplas só pode ser alterado através da execução das operações suportadas por ele;
Confidencialidade: o conteúdo de (alguns) campos de uma tupla não podem ser
revelados a partes não autorizadas.
A dificuldade em garantir estes atributos advém da ocorrência de faltas, de natureza
acidental (um bug no software ou uma parada no servidor) ou maliciosa(um invasor que modifica uma tupla no servidor).
O objetivo é evitar que estas faltas causem uma falha no espaço de tuplas, i.e. que um ou mais destes atributos sejam violados. Deste modo, é garantido que o espaço de tuplas se comportará de acordo com sua especificação, mesmo na presença de alguns servidores faltosos.
link:
http://homepages.di.fc.ul.pt/~mpc/pubs/confidencialidade.pdf

Técnicas de Escalabilidade - Sistemas Distribuidos

Escalabilidade
Escalabilidade é uma característica em todo o sistema, onde sua função é manipular uma porção crescente de trabalho de forma uniforme ou estar preparado para o crescimento do mesmo.
Técnicas de Escalabilidade
Existem técnicas de escalabilidade onde a aplicação pode ajudar a esconder a Latência da Comunicação, construindo uma aplicação de forma a utilizar somente comunicação assíncrona.
Em aplicações batch e paralelas normalmente é bem aceita, mas o mesmo não ocorre em aplicações interativas, neste caso uma solução é diminuir a necessidade de comunicação movendo parte da computação do servidor para o cliente.
Outra técnica muito usada é a Distribuição, onde é realizado uma divisão do espaço de nomes DNS em Zonas. Podendo assim vários clientes realizar uma comunicação em paralelo.
Uma outra técnica muito usada é a Replicação, com ela podemos aumentar a disponibilidade e ajudar a balancear a carga de trabalho entre componentes, mas com isso pode ocorrer problemas de inconsistência.

link:
http://www.deinf.ufma.br/~fssilva/graduacao/sd/aulas/caracterizacao.pdf
http://pt.wikipedia.org/wiki/Escalabilidade

|| Escabilidade - Sistemas Distribuidos ||

Escalabilidade
A escalabilidade pode ser medida em três dimensões:
1. em relação ao tamanho – pode-se acrescentar mais
utilizadores e recursos ao sistema;
2. em relação à distância geográfica – os componentes
podem estar distantes geograficamente;
3. em relação à facilidade de administração – o sistema
continua gerível mesmo incluindo muitas organizações
independentes.

Problemas de escalabilidade
1. em relação ao tamanho
Servidores centralizados
Dados centralizados
Algoritmos centralizados
1.1 Uma máquina tem informação completa sobre
o estado do sistema, ou
1.2 As máquinas tomam decisões baseadas em
informações de outros nós, ou
1.3 Uma falha de um nó pode arruinar o
algoritmo, ou
1.4 Assume-se que existe um relógio global.
Mas por vezes é inevitável ter centralização (dados
confidenciais de bancos, etc.) …

2. em relação à distância geográfica
Em LANs é comum usar comunicação síncrona – o cliente
envia o pedido e fica bloqueado à espera de uma resposta.
Numa WAN:
a comunicação pode durar três ordens de grandeza
mais (centenas de milisegundos);
a comunicação é pouco fiável – tem de se lidar com
erros.
Não se pode usar técnicas de difusão para localizar serviços – é necessário recorrer a serviços de directórios ou de nomes.
Se uma aplicação tem componentes centralizados fica também
limitada em termos geográficos.
3. em relação à facilidade de administração
Problemas de conciliação de políticas de utilização e
pagamento de recursos, administração e segurança.
São necessários dois tipos de medidas de segurança quando o
sistema distribuído se expande para um novo domínio:
o sistema tem de se proteger de ataques vindos do novo
domínio;
o domínio tem de se proteger de ataques vindos do
sistema distribuído.
Técnicas de certificação e de controlo de acessos.

Técnicas de escalabilidade
Três técnicas principais:
1. Esconder latência na comunicação
2. Distribuição
3. Replicação.
1. Esconder latência na comunicação
Usar comunicação assíncrona para evitar bloquear processos à
espera de receber respostas.
a) Tratamento de respostas como eventos;
b) Usar várias tarefas em paralelo para continuar
processamento.
Passar parte do processamento do servidor para o cliente.

2. Distribuição
Decompor os componentes em partes mais pequenas, que são
distribuídas por todo o sistema distribuído.
Exemplos: DNS e Web
Vários clientes podem aceder a diferentes partes em paralelo.
3. Replicação
Aumenta a disponibilidade dos serviços e melhora o
balanceamento de carga no sistema.
Aumenta a disponibilidade do serviço nas zonas da rede onde
há réplicas.


link: http://tele1.dee.fct.unl.pt/rit2_2007_2008/teo/4_sist_dist.pdf

Espaço de Tuplas

Um espaço de tuplas tem como função criar uma abstração de memória compartilhada sobre um sistema distribuído. Por propiciar modelos de programação muito simples e com baixo acoplamento entre os elementos do sistema, espaços de tuplas têm sido empregados na construção de sistemas distribuídos complexos. O espaço de tuplas JavaSpaces é um dos mais populares espaços de tuplas para a linguagem Java. Ele tem como características relevantes a conformidade a objetos, a persistência e o emprego de transações. As atuais implementações de JavaSpaces apresentam restrições como: complexidade de configuração, limitação de alcance e não serem abertas. Por “complexidade de configuração” entende-se ter que usar boa parte da infra-estrutura Jini (feita para facilitar o desenvolvimento e administração de sistemas distribuídos) e o Remote Method Invocation (mecanismo de chamadas remotas padrão no ambiente Java), mesmo quando eles seriam dispensáveis. Por "limitação de alcance", entende-se não poder usar as implementações sobre redes amplas, como a Internet. Por “não ser aberto” entende-se que: ou o código fonte não está disponível ou o código fonte e o aplicativo são distribuídos por licenças de software proprietárias ou o uso do software requer algum componente proprietário.

Linda é um espaço de tuplas constituído de um conjunto de seis operações e um sistema de run-time( que é composto por daemons em execução nos diversos nós do sistema).
As operações de Linda são usadas ao longo do código-fonte de um programa que se quer executar e que é escrito em alguma linguagem de programação associada ao Linda( mais comumente C ou Fortran). Um pré-compilador transforma as operações de Linda em instruções de mais baixo nível dirigidas para o sistema run-time. Essas instruções são escritas na linguagem associada e são inseridas diretamente no código-fonte. Durante a execução do programa o sistema de run-time responde às requisições devidamente construídas pelo pré-processador.
O pré-compilador Linda possui, a priori, informações sobre os componentes, as características e a configuração do sistema distribuído sobre o qual o programa será executado. Desta forma, o pré-compilador pode otimizar alguns parâmetros de execução do sistema run-time, como, por exemplo, a distribuição das tuplas. Portanto, Linda é um espaço de tuplas voltado para sistemas distribuídos fechados.