quarta-feira, 29 de agosto de 2012

[*]Project CAJO

O Que é?

O projeto CAJO é uma biblioteca livre para permitir a interação espontânea e transparente entre Java Virtual Machines simplificando o uso de RMI (Método de Invocação Remota). Ele abstrai todo o clichê relacionado à rede, permitindo que aplicações multi-JVM consistir em objetos comuns. Nenhum arquivo de configuração XML é usado, ou ​​seja tudo é 100% puro Java.
Ele é licenciado sob os termos da GNU Lesser General Public License (LGPL) da versão 3, publicada pela Free Software Foundation.
O projeto CAJO é um subprojeto do Distributed e iniciou em dezembro de 2010. Possui 319 membros e seu administrador é John Catherino.
Ele fornece quatro capacidades fundamentais:
·         Um objeto pode se tornar um serviço remotamente exigível;
·         Um objeto pode fornecer um objeto controlador, para descarregar o processamento para um cliente remoto;
·         Um objeto pode fornecer um componente de interface gráfica com o usuário para clientes remotos, browsers e através do Webstart;
·         Um objeto pode enviar objetos agentes inteligentes para interagir com objetos remotos em seu nome.
Seu pequeno tamanho, flexibilidade e alto desempenho são inigualáveis.

Características

Prioridades: A consideração mais importante na concepção do projeto CAJO é a necessidade de trabalhar em todos os ambientes com JRE 1.2 ou superior. Não há simplesmente uma base instalada para fazer esta prática. No entanto, isso não significa que as suas aplicações sejam de algum modo restrito. Por exemplo, enquanto CAJO permite que todos os dispositivos como telefones móveis e workstations trabalhem juntos. Você é livre para usar toda a linguagem mais recente, e as características de tempo de execução, desde que os seus dispositivos cooperantes sejam compatíveis.
Características: Uma das características mais importantes do framework é que os aplicativos não têm de ser estruturados em torno dele. Isto torna extremamente fácil de incorporar o framework em aplicativos existentes. Projetos simples orientados a objeto são o necessário. Seus dois principais pontos fortes são a facilidade com que ele permite que máquinas virtuais se juntem dinamicamente para criar um computador virtual e sua capacidade de interfaces remotas sejam ricas aos usuários de modo muito simples.
Limitações: Tendo o RMI como base, o CAJO só funciona entre as aplicações Java. Para aplicações pré-Java isso pode implicar em um esforço significativo para à portabilidade. No entanto, isso é mais do que compensado pela magia do código móvel. Ser capaz de enviar um objeto para outra máquina virtual, incluindo suas definições de classe, é um recurso poderoso que só é fornecido através de Java.
Desempenho: O CAJO é uma camada pequena, altamente eficiente construída em cima de RMI, seu desempenho definitivamente não é pior do que outras tecnologias Java como Jini, ou J2EE, na verdade, é geralmente muito melhor! Ele faz implicar a sobrecarga um pouco mais do que usando protocolos de socket básicos, no entanto o poder e transparência que o RMI fornece, vale bem a pena o custo, e acabaria por ter que ser recriado manualmente, para fornecer todas as funcionalidades do framework.
Persistência: O mecanismo de armazenamento principal utilizado no projeto CAJO é o zedmob. Esta é uma contração de duas palavras: Object comprimidos e Marshalled. Ele permite que referências a objetos mesmo remotamente carregados, serão salvos no disco ou enviados a outras máquinas virtuais remotas. O zedmob persistente no que sua existência é totalmente independente do tempo de vida da máquina virtual usando.
Escalabilidade: A escalabilidade do quadro vem em duas formas, estático e dinâmico. Escalabilidade estática significa que uma única aplicação pode facilmente migrar seus objetos entre várias máquinas virtuais, para acomodar aumento de carga, ou preocupações com a confiabilidade. Na escalabilidade dinâmica, os objetos podem facilmente se juntam, para criar funcionalidades emergentes. Esta segunda tecnologia é muito emocionante, e ainda está na sua infância.
Segurança: Para a confiabilidade do servidor; hospedagem de objetos proxy poderia convidar a possibilidade de um ataque de negação de serviço. Um objeto proxy poderia solicitar mais recursos do que o host proporcionando uma redução de potencial de sua máquina virtual. Alternativamente, a segurança na comunicação pode ser proporcionada de várias maneiras. Por exemplo, a comunicação pode ser efetuada através de SSL, no entanto, a manta de sobrecarga deve ser tomada em consideração. Para contrariar isto, há também uma forma transparente para cifrar individualmente objetos sensíveis, o que pode revelar ambos significativamente mais rápidos, e ainda mais seguro!
Simplicidade: A estrutura do núcleo é muito pequena, e pode ser rapidamente entendido por completo. Apesar de toda a simplicidade, ele oferece ainda mais flexibilidade e poder do que outras estruturas pesadas que são maiores e mais complexas.
Flexibilidade: A estrutura fornece capacidade sem precedentes com RMI convencional: Os clientes podem usar objetos remotos, sem saber de sua interface funcional em tempo de compilação. Para projetos dinamicamente adaptáveis, este é um recurso extremamente valioso, disponível na grande maioria de outras estruturas. (Se não todos).

O que faz?

O projeto CAJO é focado principalmente na criação de aplicações distribuídas robustas, dinâmicas e tolerantes a falhas. Ele é projetado para tornar o desenvolvimento o mais fácil possível. Abaixo estão os conceitos gerais de como isso é feito:
·         Cliente anuncia a disponibilidade de recursos através de Multicast;
·         Os hosts disponíveis escutam e invocam cliente com auto-referência;
·         O cliente pede os recursos necessários;
·         Cliente usa os recursos de referências;
·         Cliente libera todas as referências remotas.
Se a opção multicast não estiver disponível, então os primeiros dois passos são como se segue:
·         Cliente contata um ou mais registros de recursos centrais.
·         Cliente solicita referências aos hosts dos recursos necessários a partir dos registos.
Os passos restantes são os mesmos.
Em ambos os casos, os clientes devem estar preparados para qualquer fornecer recursos remotos que podem falhar de forma imprevisível. Os clientes também devem estar preparados para reiniciar as operações perdidas com outros recursos.
Um recurso do servidor normalmente fornece qualquer, ou todos, de três tipos gerais de funcionalidade:
·         É uma utilidade funcional específica.
·         É um host para um proxy de objeto de um cliente, para offload e computação paralela.
·         É um proxy que fornece ao cliente a funcionalidade local.
A etapa final do cliente na liberação de recursos é essencial. Como um paradigma geral, os clientes devem assumir que os servidores irão instanciar o objeto do recurso, a pedido, e não manter a sua referência localmente. Quando os clientes forem nulos sua referência remota para o recurso, pode então, ser recuperado automaticamente no servidor, através da DGC RMI. (Coletor de lixo distribuído)
Agora, uma definição clara e geral de computação Grid e Cluster podem ser declarados:
Grid: hardware do nó heterogêneo, proximidade distante, em curto prazo membros da confederação.
Cluster: hardware do nó homogêneo, proximidade, em longo prazo a adesão confederação.

Como faz?

As seis classes fundamentais do projeto CAJO são a chave para entender completamente o framework. Três são do pacote gnu.CAJO.invoke, e três são de gnu.CAJO.utils.

Pacote gnu.CAJO.invoke:

Invoke: Uma interface de método único, e a essência do framework. O método de um:
Object invoke (String method, Object args) throws Exception;
Define como um objeto chama outro objeto. O nome do método e os argumentos, se houver, são fornecidos. O resultado do método, ou a Exceções, se houver, é devolvido. Ela representa a invocação reflexiva dinâmica, para eliminar a necessidade de criar stubs individuais RMI para cada tipo de objeto, e para que os clientes tenham todas essas stubs também.
RemoteInvoke: uma interface sem corpo. Sua finalidade é a de determinar se uma referência a um objeto é local ou remoto. O teste é simples:
if (object instanceof RemoteInvoke) {
   ... // the object reference is remote
} else {
   ... // the object reference is local
}
Remote: Seu objetivo principal é fazer com que qualquer objeto possa ser chamado remotamente. O objeto controlado remotamente no passado usando o construtor de argumento único, e a referência remota pode ser passado para máquinas virtuais remotas como argumentos de método, ou retornos. Ele implementa a interface Invoke, para permitir que qualquer método público sobre o objeto empacotado possa ser chamado. A única restrição é que não pode lidar com tipos primitivos, os argumentos e tipos de retorno ambos devem ser objetos.
Ele também permite que o método estático invoke ofereça transparência local ou remota completa. Sua assinatura é:
Object invoke (Object objeto, String method, Object args) throws Exception;
Permite a invocação de método em qualquer objeto, local ou remoto! Isso permite que aplicativos para usar um objeto localmente, e depois migrarem para um objeto remoto, sem impacto na fonte. Isto pode criar a necessidade de testes de localização de referência, tal como se explica na descrição da classe RemoteInvoke acima.
É também a casa para o método de configuração crítica estática, utilizada para configurar os parâmetros de rede para operação remota. Ele é geralmente chamado uma vez após a inicialização do aplicativo. Ele também fornece alguns outros métodos utilitários úteis. O stub RMI apenas utilizada por qualquer aplicação para este objeto.

Pacote gnu.CAJO.utils:

ItemServer: Esta classe é usada para ligar objetos remotos, usando nomes de aplicativos específicos, para que suas referências possam ser solicitadas por outras máquinas virtuais. Isso é chamado de ligação estática. Máquinas virtuais remotas geralmente usam o método estático getItem utilitário da classe Remote, para especificar o nome da máquina, e o nome da String sob o qual a referência do objeto remoto é vinculado. Ele também pode ser usado para ligar objetos contidos no jar separados. Isso ajuda muito na funcionalidade do aplicativo modularizada.
Abriga também o método acceptProxies. Quando chamado, vai permitir que máquinas virtuais remotas enviem objetos personalizados, que existem em seu espaço de endereçamento local. Mais sobre isso será mostrado no CodebaseServer.
Multicast: Essa classe é usada para transmitir referências a objetos remotos através da rede. Máquinas virtuais remotas também pode usar essa classe para receber esses anúncios. Isso é chamado de ligação dinâmica. Máquinas virtuais remotas usam o método announce para iniciar sua transmissão de suas referências de objetos remotos, e o método listen, para receber estas transmissões. Ele permite que referências a objetos remotos obtenham de forma espontânea, sem ter que saber o endereço TCP do host que serve.
CodebaseServer: Esta classe auxiliar tem dois propósitos fundamentais. Primeiro, ele é usado para fornecer definições de classe para máquinas virtuais remotas. Isso permite que uma máquina de envio passe objetos definidos localmente, como argumentos de método de retornos ou exceções. E para os objetos que exista localmente no espaço de endereço do receptor como mencionado anteriormente, o receptor deve ter chamado o método acceptProxies, já que esta funcionalidade está desativado por padrão.
A segunda função importante desta classe é de agir como um servidor de aplicação especializada. Ele irá pedir navegadores do cliente visualizador genérico visuais proxy, como um applet ou como um aplicativo via WebStart. Estritamente falando, se essa funcionalidade servidor de aplicação não for necessário, qualquer servidor http ou ftp padrão poderá ser usado em seu lugar. Neste caso, o servidor de arquivos não necessita estar funcionando na mesma máquina, como o servidor CAJO.

Quem utiliza?

Como o projeto CAJO é bastante fundamental em seu propósito - ou seja, distribuição de objetos entre a Máquina Virtual Java transparente - ele está sendo usado por grupos de todos os tamanhos: estudantes universitários, pequenas e grandes empresas, e até governos. Suas principais aplicações são: aplicações de escala, distribuindo usuário interfaces, e controle remoto.

Referencias


--
At.
Helder Narcizo

RMI: Uma Visão Conceitual

[Contribuição de Helder Narcizo]

Pessoal segue o link para um PDF com conteúdo abrangendo uma visão sobre o que é RMI
esse artigo foi escrito por Márcio Castro, Mateus Raeder e Thiago Nunes

sexta-feira, 24 de agosto de 2012

BOINC = computação + voluntarismo

Sabem como é ...

Gostei muito do BOINC (Berkeley Open Infra Structure for Network Computing), não apenas pela solução tecnológica que apresenta para constituir um enorme ambiente de processamento distribuído, mas também, e principalmente, pelo fato desta infra-estrutura global de computação ser utilizada por um grande número de projetos científicos e comunitários.

Por isso me filiei ao projeto World Community Grid, patrocinado pela IBM, no qual posso doar processamento para projetos que objetivam o combate a malária, câncer infantil, leishmaniose, malária e outros igualmente importantes, como exibido no meu banner pessoal.


Acho que sempre vale a pena contribuir por algo melhor!

segunda-feira, 20 de agosto de 2012

[*]AmoebaOS, Cluster e Virtualização

-->
Diferença entre Amoeba, Cluster e Virtualização?

AmoebaOS
O AmoebaOS  é um sistema operacional distribuído projetado para que um conjunto de computadores independentes se apresentam a seus usuários como um único sistema de compartilhamento de tempo.


Cluster
Conjunto de servidores agrupados com intenção de ganho de desempenho, disponibilidade, ou facilidade no gerenciamento, onde é composto por máquinas convencionais ligadas a uma rede de alto desempenho fornecendo abstração ao usuário de uma única máquina.
Virtualização

É criação de um ambiente virtual que simula um ambiente real, propiciando a utilização de diversos sistemas e aplicativos sem a necessidade de acesso físico à máquina na qual estão hospedados.

[*]Outros Sistemas Operacionais Distribuídos

[*]AMOEBA::sistema operacional distribuído

O que é Amoeba?

O Amoeba é um sistema operacional que teve sua origem de um projeto de pesquisa na área de computação paralela e distribuída.

Foi desenvolvida na universidade Vrije Holanda por Andrew Stuart Tanenbaum juntamente com mais três alunos de doutorado. A princípio o desenvolvimento do Amoeba era alcançar um sistema operacional livre de qualquer plataforma. O primeiro protótipo teve versão Amoeba 1.0 em 1983 e ao longo do tempo evolui adquiriu por conveniência algumas características de um pacote de emulação UNIX.

Segundo os projetistas, o Amoeba atualmente visa os seguintes objetivos:
  • distribuição: conectar diversas máquinas, remotamente localizadas
  • paralelismo: permitir que tarefas individuais sejam executadas por mais de um processador.
  • transparência: Fazendo parecer ao usuário final, que existe apenas um computador por traz de todo o trabalho.
  • performance: Atingir todos os objetivos descritos acima, de uma maneira eficiente
Como é Amoeba?

O Amoeba foi projetado com duas asserções em mente:
1) Os sistemas terão um grande número de CPUs.
2) Cada CPU terá  dezenas de megabytes de memória.

A ideia da arquitetura do sistema é suportar a necessidade de incorporar um grande número de CPUs de uma forma não complexa. Suponha que você possa prover para cada usuário um sistema multiprocessador com 10 ou 100 processadores.

Provavelmente a solução seria dar um destes sistemas para cada usuário. Entretanto, talvez esta não fosse a melhor forma e nem efetiva de gastar o orçamento, principalmente porque a maior parte do tempo os processadores estariam ociosos para a maioria dos usuários, enquanto que alguns precisariam executar programas necessitando um grande poder computacional.

Todo o poder computacional está localizado em um ou mais conjuntos de processadores. Um conjunto de processadores é composto por um número de CPUs sendo que cada uma com a sua memória local e conexão em rede. As CPUs podem ser de qualquer tipo, diferentes arquiteturas. Quando o usuário entra com um comando, o sistema operacional escolhe dinamicamente um ou mais processadores para executar o comando.

Quando o comando é terminado, os processos são terminados e os recursos devolvidos para o conjunto de processadores. Os processadores por sua vez podem ser compartilhados, executando mais de um processo por vez.

Um segundo elemento na arquitetura do Amoeba é o terminal, é através dele que o usuário acessa o sistema (típico: terminal X, monitor, teclado e mouse). A ideia aqui é usar terminais baratos e concentrar o poder computacional no conjunto de processadores, embora seja possível executar programas no terminal. Por exemplo, ao invés de comprar 100 estações de alto desempenho para 100 usuários, poderíamos comprar 50 processadores de alto desempenho, que compõe o conjunto de processadores, e 100 terminais X pelo mesmo preço. Uma vez que o conjunto de processadores são alocados só quando necessário, um usuário ocioso bloqueia apenas um terminal  X e não uma estação.

Outro componente importante são os servidores. Na maioria das vezes estes servidores, por características específicas, executam em processadores determinados. Os servidores fornecem serviços. Um serviço é uma definição abstrata daquilo que o servidor está preparado para fazer para os seus clientes.

O microkernel Amoeba. O modelo de software adotado pelo Amoeba apresenta duas partes fundamentais: o microkernel, que executa em cada processador e uma coleção de servidores que fornecem a maioria das funções tradicionais de um sistema operacional.
O microkernel Amoeba executa em todas as máquinas do sistema (conjunto de processadores, terminal ou servidor). As funções básicas do microkernel são:
 1. Gerenciamento de processos e threads.
 2. Fornecer suporte para gerenciamento de memória (alocação/lib segmentos)
 3. Suporte a comunicação (ponto a ponto, em grupo).
 4. Tratamento de I/O de baixo nível (device driver).

Os servidores Amoeba.

Tudo que não é feito pelo kernel é feito pelos servidores. Desta forma, é possível minimizar o tamanho do kernel e melhorar a flexibilidade. O Amoeba é baseado no modelo cliente-servidor. Um conceito central no projeto de software é o conceito de objeto, que é visto como um tipo de dados abstrato. Os objetos são gerenciados por servidores, arquivos, diretórios, segmentos de memória, janelas, processadores, discos e fitas são exemplos de objetos. Quando um processo cria um objeto (arquivo), o servidor que gerencia o objeto (servidor de arquivos) retorna para o cliente uma capacidade (criptografada) para aquele objeto. Para usar o objeto, a capacidade associada ao mesmo deve ser apresentada. Todos os objetos no sistema, software e hardware, são protegidos, tem nome e são gerenciados por capacidades.

A maioria dos serviços do sistema operacional no Amoeba são implementados como processos servidores. Os servidores seguem um modelo único com o objetivo de conseguir uniformidade e simplicidade. O modelo e alguns exemplos de servidores são descritos nesta seção. Todos os servidores padrão no Amoeba são definidos por um conjunto de procedimentos stub. Servidores novos são definidos em AIL (Amoeba Definition Language). Os procedimentos stub são gerados por um compilador AIL a partir da definição dos stubs e colocados em bibliotecas para utilização por parte dos clientes. 

Tipos de Servidores:

Servidor Bullet (arquivos) / Servidor de diretório / Servidor de replicação / Servidor de execução / Servidor de boot / Servidor TCP/IP.

Para que serve?

O Amoeba é um sistema operacional projetado para que um conjunto de computadores independentes se apresentem a seus usuários como um único sistema de compartilhamento de tempo.

O principal objetivo, era a construção de um sistema operacional distribuído, totalmente transparente [TAN95][TAN98]. Após efetuar o seu login no sistema, ele pode editar e compilar, mover arquivos, e por aí vai. A diferença é que cada uma dessas ações utiliza diversas máquinas da rede, incluindo servidores de processos, servidores de arquivo, de diretório, etc, sem que o usuário tenha de se preocupar. Uma diferença importante entre o Amoeba e a maioria dos demais sistemas operacionais distribuídos reside no fato de o Amoeba não suportar o conceito de "máquina hospedeira".

O objetivo secundário do Amoeba é fornecer um ambiente de teste para experiências em programação paralela e em programação distribuída.

Quem usa?

O Amoeba aceita dois tipos de usuários. Os que utilizam o sistema da mesma forma que fariam com um sistema tradicional de compartilhamento de tempo, e outros interessados sem experiências com algoritmos distribuídos e algoritmos paralelos (TANENBAUM,1995).

quarta-feira, 15 de agosto de 2012

BOINC::algumas curiosidades

Site oficial do BOINC



Quantos projetos de BOINC existem?

Atualmente existem aproximadamente 140 projetos que podem ser consultados no link: http://www.allprojectstats.com/index.php


Quantas pessoas utilizam?

No site do BOINC há uma estimativa de 264,337 voluntarios.
No projeto SETI@Home é possivel acompanhar em tempo real a quantidade de participantes deste projeto atraves do link: http://www.setibr.org/2008/10/participantes.html


Top 100 dos voluntarios do BOINC: - http://boinc.berkeley.edu/chart_list.php

BOINC no Brasil: - http://www.setibr.org/


Como colocar um projeto no BOINC?

Atraves dos links a seguir é possivel fazer o download dos softwares para desenvolvimento e participação para elaboração de projetos utilizando o BOINC:



O que é grid computer?

A ideia de Grid Computing é muito parecida com a ideia de Cluster, utilizar o poder de processamento de vários computadores ligados por uma rede para conseguir executar tarefas que necessitam de grande poder de processamento, onde que com apenas um computador não seria possível ou o desempenho não seria tão bom.
A principal diferença entre um cluster e um grid é que um cluster possui um controlador central, que visa dividir o processamento entre os computadores, afim de utilizar cada recurso destes computadores da melhor forma.
Já em grids é utilizado uma arquitetura mais "democrática" onde embora possa existir algum tipo de controle central, temos um ambiente fundamentalmente cooperativo, onde para cada computador é passado uma tarefa e este utiliza o tempo ocioso para processar esta tarefa.

[*]BOINC

O que é o BOINC?



BOINC (Berkeley Open Infrastucture For Network Computing) foi desenvolvido por uma equipe do laboratório de ciências espaciais SSL na Universidade da Califórnia Berkeley, liderada por David Anderson.

Trata-se de um sistema de computação voluntaria que opera sobre uma infraestrutura de computação distribuída através de uma grade computacional gigantesca com proporções mundiais, com a intenção de ser compatível com projetos de pesquisas. A plataforma do programa é aberta sendo desenvolvida gratuitamente sobre o GNU.


Para que serve?



A intenção do BOINC é auxiliar pesquisadores de diversas áreas dentre elas climatologia e biologia molecular, disponibilizando a eles uma capacidade de processamento maior com o auxilio de computadores pessoais conectados pela internet em todo o mundo.


Como é?



O BOINC utiliza uma estrutura de computação distribuída tornando-se assim uma ferramenta poderosíssima para projetos científicos que necessitam de enormes capacidades de processamento.

O BOINC proporciona aos cientistas de diversas áreas uma forma de analisar enormes quantidades de informações que utilizam em suas experiências.

Cada projeto é independente tendo seus próprios servidores e banco de dados. Entretanto esses projetos utilizam recursos de colaboradores espalhados pelo mundo.

Os participantes fazem o download e a instalação do programa, que por sua vez carrega e executa as aplicações do projeto escolhido.

Este programa funciona da seguinte forma:

Ele recebe um conjunto de instruções a partir do servidor do projeto, e utiliza recursos que não estão sendo utilizados pelo usuário para processar as informações recebidas, após esse processamento é gerado um resultado e enviado de volta para o servidor, utilizando assim o tempo ocioso da maquina sem prejudicar o usuário, dando a ele prioridade sobre os recursos.



Quem usa?



Qualquer pessoa pode utilizar do projeto BOINC, basta fazer o cadastro e o download do software, lembrando que nenhum projeto pode ter fins lucrativos e também não podem gerar registros e patentes para as empresas privadas.

Então pessoas afim de colaborar com pesquisas pode se tornar um apoiador em empresas que visam realizar estudos e necessitam de grande capacidade de processamento pode utilizar dos recursos do BOINC.

Um dos projetos e pioneiro que utiliza o BOINC é o SETI@Home (Search for Extraterrestrial Inteligence), ou Busca por Inteligência Extraterrestre, é uma área da ciência dedicada à busca de vida inteligente fora do nosso planeta.

terça-feira, 14 de agosto de 2012

Bem vindos!

Olá pessoal!

Bem vindos ao blog Outra(Vez)Tecno(logia de Informação)!

Este é um espaço para publicação de tópicos diversos sobre Tecnologia de Informação, que faz parte do processo de avaliação de nossa disciplina.
Mas dado que é aberto, todos os comentários "sociais" são válidos, incluindo os relacionados à partipação do público em geral, mas estes não serão contabilizados na avaliação. 
Participem, tecendo comentários analíticos sobre o conteúdo postado, o que inclui complementos (e suas fontes), críticas (embasadas e politicamente corretas), correções (se necessárias) e outras formas construtivas de participação.

Boa leitura e bom trabalho!

Prof. Peter