sexta-feira, 5 de setembro de 2008

Trabalho de Sistemas Pervasivos

Cada grupo deve resumir o artigo escolhido e publicar o resumo no blog. Os alunos embarcados devem entrar em contato comigo até segunda de preferecia em izalmo@ucam-campos.br para que possa passar um trabalho diferenciado.

1 - Orientação a objetos aplicada a computação pervasiva
http://www.inf.unisinos.br/~barbosa/pipca/consipro1/a9.pdf
Grupo: Everton, Felipe, Edilson

2 - Em Direção a um Modelo para Desenvolvimento de Sistemas
Computacionais de Qualidade para Aplicac¸ ˜oes Onivalentes
www.sbc.org.br/bibliotecadigital/download.php?paper=682
Grupo: Bruno, Maycon, Miguel

3 - Uma Proposta de Cenarios e Servi?os de Suporte paraJogos Multiusuario Multiplataforma Pervasivos
http://www.cin.ufpe.br/~famt/docs/cientific_production/webmedia2006_enxuto.pdf
Grupo: Thiago, Marcos

4 - Consciência do contexto do aprendiz em umambiente de educação pervasiva
http://www.cinted.ufrgs.br/renote/jul2006/artigosrenote/a41_21219.pdf
Grupo: Caio, Marcio

5 - Solar: uma proposta de middleware pervasivo
https://saloon.inf.ufrgs.br/twiki/viewfile/Disciplinas/Old/CMP167/TF041DartMouthSolar?rev=1.1;filename=TF041DartMouthSolar.doc
Grupo: Cassius, Ivonei, Clébio

Espaço de Tuplas (conceito e implementações: JavaSpaces, Linda e Lime)

CONCEITO
Um espaço de tuplas tem como função criar uma abstração de memória compartilhada sobre um sistema distribuído, onde todos podem ler e escrever no mesmo. Porém, na realidade os objetos estão dispostos nas memórias dos nós de cada sistema distribuído.
IMPLEMENTAÇÕES
• JavaSpaces
O espaço de tuplas JavaSpaces é um dos mais populares espaços de tuplas para a linguagem Java. As instruções abaixo descrevem como criar programas que compartilhem memória utilizando o JavaSpaces. Será utilizada a implementação do JavaSpaces do JINI e uma classe auxiliar para conectar ao serviço JavaSpace.

Código:
// Definindo o Formato das Mensagens

import net.jini.core.entry.Entry;
public class Message implements Entry {
public String content;
public Message() { } }

// Escrevendo no Espaço de Tuplas

import net.jini.space.JavaSpace;
import java.util.Scanner;
public class WriteMessage {
public static void main(String[] args) {
try {
System.out.println("Procurando pelo serviço JavaSpace...");
Lookup finder = new Lookup(JavaSpace.class);
JavaSpace space = (JavaSpace) finder.getService();
if (space == null) {
System.out.println("O serviço JavaSpace não foi encontrado. Encerrando...");
System.exit(-1); }
System.out.println("O serviço JavaSpace foi encontrado.");
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Entre com o texto da mensagem (ENTER para sair): ");
String message = scanner.nextLine();
if (message == null || message.equals("")) {
System.exit(0); }
Message msg = new Message();
msg.content = message;
space.write(msg, null, 60 * 1000); }
} catch (Exception e) { e.printStackTrace(); } } }
// Lendo Mensagens do Espaço de Tuplas
import net.jini.space.JavaSpace;
public class ReadMessage {
public static void main(String[] args) {
try {
System.out.println("Procurando pelo serviço JavaSpace...");
Lookup finder = new Lookup(JavaSpace.class);
JavaSpace space = (JavaSpace) finder.getService();
if (space == null) {
System.out.println("O serviço JavaSpace não foi encontrado. Encerrando...");
System.exit(-1); }
System.out.println("O serviço JavaSpace foi encontrado.");
while (true) {
Message template = new Message();
Message msg = (Message) space.take(template, null, 60 * 1000);
if (msg == null) {
System.out.println("Tempo de espera esgotado. Encerrando...");
System.exit(0); }
System.out.println("Mensagem recebida: "+ msg.content) }
} catch (Exception e) {
e.printStackTrace(); } } }

• Linda

Linda possui seis operações apenas, duas de escrita (out e eval) e quatro de leitura (in, inp, rd e rdp). Nesta seção, a apresentação das operações é acompanhada por exemplos escritos em C-Linda.
• Operação para colocar tuplas no TS (Espaço de tuplas – Tuplas Spaces)
- OUT (expr1, expr2,..., exprn) -> tupla adicionada ao espaço de tuplas
• Operação para retirar tuplas de TS
- IN (c1, c2,..., cn) -> tupla satisfazendo template é retirada do espaço de tuplas
• Exemplo:
Tupla em TS: ("sinal",5,3)
Código:
INT A, B
A=5
IN ("sinal", 5, ?B) ou IN ("sinal", A, ?B)
Depois da execução: B=3 e tupla não existe mais.
• Operação para consultar tupla em TS
- RD (c1, c2,..., cn) -> tupla é lida, mas permanece no espaço de tuplas
• Exemplo:
Tupla em TS: ("sinal",5,3)
Código:
INT A, B
A=5
RD("sinal",5,?B) ou RD("sinal",A,?B)
Depois da execução: B=3 e tupla permanece em TS
• Tanto o IN como o RD são “bloqueantes” os processos ficam bloqueados até que apareça no espaço de tuplas, uma tupla que case com a pedida.
• Operação para criar um novo processo: Concorrência
- EVAL (c1, c2,..., cn) -> funciona como out, mas um novo processo é criado para associar a tupla.
• Exemplo:
Tupla em TS: ("sinal",5,3)
Código:
EVAL ("novoproc", x, f(x))
Depois da execução: Um novo processo é criado para executar f(x).

• Lime
Lime (Linda in a Mobile Environment) é um middleware projetado para possibilitar o desenvolvimento rápido de aplicações que apresentam mobilidade física (hosts) e/ou lógica (agentes). Ele adapta o espaço de tuplas do Linda para ambientes móveis através da quebra da noção de um espaço de tuplas global, ou seja, o conteúdo encontra-se distribuído através dos múltiplos componentes móveis.

Em Lime, cada agente possui espaços de tuplas próprios, que ele leva consigo a tiracolo, chamados ITS (interface tuplespace). Quando o agente se fixa em um host, seus ITSs são fundidos a um espaço de tuplas local e as tuplas passam a ficar visíveis para os demais agentes acoplados ao host. Ao deixar o host, o agente leva consigo os ITSs com as tuplas.

• Links

http://www.teses.usp.br/teses/disponiveis/55/55134/tde-08032003-012015/ (espaços de tuplas)
http://www.inf.ufsc.br/~frank/INE6514/JavaSpaces/ (javaspaces)
http://www.inf.puc-rio.br/~noemi/victal/linda.html (linda)
http://www.cin.ufpe.br/~vvs/cows/cowsPaper.pdf (Lime)

Implementação de espaços de tuplas do tipo JavaSpaces

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. Processos distintos do sistema podem executar uma tarefa comum, usando o espaço de tuplas como meio de comunicação, coordenação e sincronização.
A união do modelo de espaço de tuplas com a linguagem Java trouxe benefícios sensíveis.
A linguagem Java tem características que favorecem o desenvolvimento de aplicações distribuídas, dentre elas a portabilidade, o suporte natural à movimentação de código e a segurança. Não é à toa que Java vem sendo a linguagem de escolha em algumas categorias de aplicações distribuídas tais como agentes móveis.
JavaSpaces é uma especificação. Isso quer dizer que pode haver mais de uma implementação para JavaSpaces.
A especificação JavaSpaces está fortemente vinculada ao sistema Jini, também de autoria da Sun. O Jini consiste em uma infra-estrutura que pretende simplificar o desenvolvimento, instalação e administração de sistemas distribuídos. O Jini é baseado na linguagem Java.
Jini é uma das mais concretas propostas no sentido de se implementar sistemas computacionais que possam ser mantidos com pouca ou quase nenhuma intervenção humana.
É difícil encontrar uma implementação satisfatória de JavaSpaces. As implementações atuais oferecem funcionalidades especiais, cada uma a seu modo, mas mesmo assim, ainda requerem a infra-estrutura Jini. Outra restrição que atinge a todos, é que, como produtos de software, esses espaços de tuplas possuem licenças proprietárias. Atualmente é possível adquirir cópias gratuitas pela Internet, mas não há garantias que isso permanecerá assim indefinidamente.


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

Francino Neto 103041061

quinta-feira, 4 de setembro de 2008

Espaços de Tuplas

RESUMO
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.
O primeiro espaço de tuplas recebeu o nome de Linda [Gelernter, 1985]. Ele trabalha em associação com diversas linguagens de programação, em especial, com as linguagens C e Fortran, as mais usadas em análise numérica e computação paralela. Não tardou, surgiram outros espaços de tuplas, quase sempre acrescentando alguma variante ao modelo básico implementado em Linda.

Lime (Linda in a Mobile Environment) [Picco et al, 1998] é um espaço de tuplas voltado para agentes e computação móvel. Esse é um nicho de aplicação propício para os espaços de tuplas. Lime mostra como o conceito básico de espaço de tuplas pode ser adaptado criativamente para aplicações com demandas específicas. Em Lime, cada agente possui espaços de tuplas próprios, que ele leva consigo a tiracolo, chamados ITS (interface tuple
space). Quando o agente se fixa em um host, seus ITSs são fundidos a um espaço de tuplas local e as tuplas passam a ficar visíveis para os demais agentes acoplados ao host. Ao deixar o host, o agente leva consigo os ITSs com as tuplas.

Ruple [Rogue Wave, 2001] é um espaço de tuplas voltado para a troca de documentos pela Internet. A grande inovação de Ruple é a definição de tupla, que não possui campos como uma tupla de Linda. As tuplas de Ruple são documentos em XML. No entanto, a recuperação das tuplas permanece sendo feita por conteúdo, usando consultas expressas na linguagem XQL. Outras características interessantes são: o protocolo SOAP para comunicação por rede, o uso de leasing para automanutenção e certificação X.509 para segurança.
Em resumo, o modelo de espaço de tuplas é um mecanismo com semântica de memória compartilhada que pode ser acessado concorrentemente por processos espalhados em um sistema distribuído. O modelo implementa um esquema de memória associativa. Duas propriedades do modelo de espaço de tuplas destacam-se: a simplicidade e o baixo acoplamento entre os processos. Juntas, elas dão ao modelo uma vantagem em termos de facilidade de desenvolvimento e manutenção das aplicações.

quarta-feira, 3 de setembro de 2008

Espaço de Tuplas

Um espaço de tuplas é um espaço de memória compartilhado globalmente e distribuído por todos os processos e hosts participantes. Os processos que usam este modelo se comunicam gerando tuplas e antituplas que são submetidas ao espaço de tuplas. Tuplas são dados estruturados tipados, como por exemplo, objetos em C++ e Java, onde cada tupla é formada por uma coleção de campos de dados tipados e representa uma parte coesa da informação. Em um sistema baseado em espaço de tuplas, todas as comunicações interprocesso são exclusivamente realizadas utilizando o espaço de tuplas e qualquer processo que usa um espaço de tuplas possui a habilidade para acessar todas as tuplas que o espaço contém, inserir dinamicamente novas tuplas gerando antituplas destrutivas associadas. Sistemas baseados em espaços de tuplas provaram sua habilidade para facilitar a comunicação em configurações sem fio. Esta forma de comunicação é bastante adequada às configurações móveis onde estão envolvidas a mobilidade lógica e a física.

Fonte:
http://www.maxwell.lambda.ele.puc-rio.br/cgi - bin/PRG_0599.EXE/9181_3.PDF?NrOcoSis=28128&CdLinPrg=pt

Maicon N. de Souza 104170132

segunda-feira, 1 de setembro de 2008

Técnicas de Escalabilidade

ESCONDER A LATÊNCIA NA COMUNICAÇÃO:

Contruir a aplicação de forma a utilizar somente comunicação assícrona,
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 cliente.

REPLICAÇÃO:

Aumenta a disponibilidade e ajuda a balancear a carga de trabalho entre componentes
levando a um melhor desenpenho.

Caching é uma forma especial de replicação na qual a decisão de trazer o objeto é de
seu cliente e não de seu proprietário.

Pode levar a ploblemas de consistência.

Escalabilidade

A escalabilidade incorpora os limites físicos à questão do desempenho. Como se comporta o desempenho quando atingimos os limites físicos das máquinas, e que estratégias devemos utilizar para aumentar a quantidade de processamento disponível.
Duas são as linhas mestras para atingir maior escalabilidade: o incremento com novos hardwares ou a substituição por novos hardwares de maior desempenho.
O primeiro é denominado escalabilidade horizontal. O exemplo típico é um farm Web, onde podemos incorporar novas máquinas ao farm para dar conta do aumento da demanda pelos usuários finais.
O segundo é a escalabilidade vertical, onde uma nova máquina mais possante substitui a antiga.

http://msdn.microsoft.com/pt-br/library/cc518051.aspx

domingo, 31 de agosto de 2008

Espaço de tuplas - Thiago Rodrigues 104170032

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 cria uma “ilusão” de que existe um espaço compartilhado entre os objetos no sistema distribuídos.
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.
É baseado no padrão blackboard onde todos podem ler, escrever e apagar o quadro-negro.


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


Thiago Rodrigues
104170032

Técnicas de escalabilidade - Thiago Rodrigues 104170032

Escalabilidade significa adicionar hardware para manter e melhorar a performance de uma solução.
A escalabilidade garante a qualidade de serviço desejada à medida que a demanda de uso aumenta.

Quando um sistema não consegue atender a sua demanda num determinado tempo, significa que ele ultrapassou o seu limite de escalabilidade, sendo necessário adicionar mais hardware no sistema, onde entra as técnicas e escalabilidade:

Escalabilidade Vertical: Adicionar hardware as máquinas já existentes. Menor custo, porém não tão eficiente.

Escalabilidade horizontal: Adicionar computadores ao sistema. Maior custo e eficiente.

Escalabilidade Diagonal: Aplica-se as duas técnicas acima.


http://msdn.microsoft.com/pt-br/library/cc518051.aspx
http://ladoservidor.com/node/12

Thiago Rodrigues
104170032