DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS



Documentos relacionados
Guia de utilização da notação BPMN

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

Manual do Usuário. Protocolo

ALua. asynchronous communication in Lua

MANUAL DA SECRETARIA

Manual do usuário. Viewer

Manual de Operacionalização do Módulo de Prestação de Contas PCS

Manual Rápido de Registro e Configuração do DJPDV

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery

Manual do Usuário do Produto EmiteNF-e. Manual do Usuário

ADDRESS RESOLUTION PROTOCOL. Thiago de Almeida Correia

Pró-Reitoria de Administração - PRAd Assessoria de Informática - AI SISTEMA DE PUBLICAÇÃO DE LICITAÇÕES. Manual de Procedimentos

Bem-vindo ao curso delta Gerenciamento de peso para a versão 9.1. Este curso aborda a nova solução de peso introduzida nessa versão.

Simulado Informática Concurso Correios - IDEAL INFO

2 Ferramentas Utilizadas

1. Introdução. Avaliação de Usabilidade Página 1

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues

Registro e Acompanhamento de Chamados

Gerenciamento do ciclo de vida de um documento Simone de Abreu

No projeto das primeiras redes de computadores, o hardware foi a principal preocupação e o software ficou em segundo plano.

TRANSMISSÃO DE DADOS Prof. Ricardo Rodrigues Barcelar

SIE - SISTEMA DE INFORMAÇÕES PARA O ENSINO CADASTRO DE FUNCIONÁRIOS

O QUE É A CENTRAL DE JOGOS?

Medidor Powersave V2 USB

AGHOS - GESTÃO E REGULAÇÃO ASSISTENCIAL E FINANCEIRA DE SAÚDE MÓDULO DE REGULAÇÃO AMBULATORIAL DE CONSULTAS ESPECIALIZADAS

Software Planejamento Tributário

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

O Manual do ssc. Peter H. Grasch

Manual de Atendimento do Chat Casa do Corretor. Página 1

Aula 2 Revisão 1. Ciclo de Vida. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW

Seu manual do usuário LOGMEIN RESCUE

CENTRAL GERENCIADORA DE BOLICHE PS 2009

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

Gerenciamento da Integração (PMBoK 5ª ed.)

Resolução de Problemas de Rede. Disciplina: Suporte Remoto Prof. Etelvira Leite

Descrição do Produto. Altus S. A. 1

Conhecendo o Decoder

O Sistema foi inteiramente desenvolvido em PHP+Javascript com banco de dados em MySQL.

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

PSIU Protocolo Simples de Intercomunicação Unificado

MINISTÉRIO DA SAÚDE. Secretária de Gestão Estratégica e Participativa da Saúde SGEP. Coordenação de Desenvolvimento dos Sistemas de Saúde - CDESS

AKNA SOFTWARE. Configurações. de DNS

Resolução da lista de exercícios de casos de uso

Passo a Passo do Cadastro Funcionários no SIGLA Digital

Figura 1: Interface 3G Identech

Diagrama de contexto

Interconexão de Redes. Aula 03 - Roteamento IP. Prof. Esp. Camilo Brotas Ribeiro cribeiro@catolica-es.edu.br

Manual do Teclado de Satisfação Online WebOpinião

Sistemas Operacionais

Problemas básicos nos. Serviços Gladius MP

Sumário. Introdução ao Microsoft Project. 1 Microsoft Project, gerenciamento de projetos e você 3. 2 Visão geral do Project 11.

Manual do Instar Mail v2.0

Catálogo de Padrões de Dados

Sistemas Distribuídos (DCC/UFRJ)

Redes de Computadores II

MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO GERAL DE MODERNIZAÇÃO E INFORMÁTICA SISAU

ESTUDO DE CASO: LeCS: Ensino a Distância

TechProf Documento de Arquitetura

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza

Trabalho de Redes de Computadores

Política de Privacidade do Serviço OurSound para Estabelecimentos

Manual de instalação, configuração e utilização do Enviador XML

AULA 14 Plugin TerraEdit

KF2.4 MANUAL DE UTILIZADOR

Implantação do Sistema de Controle de Tempos Nas Agências de Atendimento - TMA

Banco de Dados Orientado a Objetos

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Obrigado por adquirir o Mobile Broadband modem USB E3272. Com o seu modem USB, você tem acesso à rede sem fio em alta velocidade.

Terminal de Consulta de Preço. Linha Vader. Modelo TT300 e TT1000i

Montagem e Manutenção. Luís Guilherme A. Pontes

Projeto Integrador Segurança de Redes e Transmissão de Dados

Fale.com. Manual do Usuário

CA Mainframe Chorus for Storage Management Versão 2.0

GATI Gestão de Atendimento Inteligente. Manual de Uso. powered by OPUS Software v1.0

DarkStat para BrazilFW

EW1085R2 Recetor Bluetooth MICRO USB Classe 2

PÉGASUS (ETHERNET POCKET) STUDIO V1.00 MANUAL DE INSTALAÇÃO E OPERAÇÃO

Conceitos Básicos de Rede. Um manual para empresas com até 75 computadores

IBM Software Demos Lotus Workforce Management

LISTA DE VERIFICAÇAO DO SISTEMA DE GESTAO DA QUALIDADE

4 O Workflow e a Máquina de Regras

1. REGISTRO DE PROJETOS

LIBERAÇÃO DE ATUALIZAÇÃO CORDILHEIRA VERSÃO 2

MicroDNS. Armando Adami Zaro Pablo Augusto Lerina Rodrigues. 3 de outubro de 2007

Guia de Utilização BANCO DE EMPREGOS ANOS.

Permite a coleta de dados em tempo real dos processos de produção, possuindo, também, interfaces para a transferência dos dados para os sistemas

Licenciatura em Informática. - Análise e Conceção de Sistemas de Informação. Gestão de Condómino. Documento de Análise.

Desenvolvimento de Estratégia para Programação do Futebol de Robôs da Mauá

agility made possible

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova;

Transcrição:

DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS Aluno: Ricardo Gomes Leal Costa Orientadora: Noemi de la Rocque Rodriguez Introdução A biblioteca DALua [1], fruto do projeto anterior, tem por objetivo oferecer uma série de facilidades para o desenvolvimento de aplicações distribuídas, ou seja, executadas por diversas máquinas, possivelmente em posições geográficas distantes, trabalhando em paralelo. Para o projeto deste ano, pretíamos implementar técnicas de migração de processos Lua [3] entre máquinas através da rede, o que abriria uma série de novas possibilidades em relação à tolerância a falhas e escalabilidade. Contudo, no decorrer do período, detectamos a necessidade de realizar mudanças no DALua, frente às requisições de usuários. A biblioteca foi então remodelada sob o paradigma de eventos, aumentando substancialmente sua flexibilidade e facilidade de uso em relação ao modelo anterior de callbacks. Com o intuito de validar a nova forma de utilização da biblioteca, desenvolvemos um protótipo de jogo online para vários jogadores, com arquitetura peer-to-peer, fazo uso de todas os recursos oferecidos pelo DALua. Objetivos Projetar e implementar um sistema de eventos para simplificar o seqüenciamento lógico de aplicações distribuídas baseadas no modelo de chamadas remotas assíncronas do sistema ALua [2]. Permitir a migração de processos DALua em execução entre máquinas separadas, tornando possível alterar fisicamente a rede sem interrupções no andamento da aplicação. Planejamento A biblioteca DALua é construída com a linguagem de programação Lua e o sistema ALua, ambos desenvolvidos na PUC-Rio. Sua versão incial foi utilizada na disciplina de pósgraduação sobre sistemas distribuídos INF2545 na PUC-Rio, onde os alunos tiveram a oportunidade de experimentar a programação de um pequeno jogo peer-to-peer com a biblioteca. Os alunos forneceram críticas construtivas sobre as dificuldades de uso e possíveis melhorias. Detectamos então a necessidade de uma maneira mais flexível de saber quando as chamadas assíncronas se completam ou, mais genericamente, como tratar eventos de sucesso ou erro que ocorrem nos processos que compõem a aplicação. Outra mudança diz respeito à forma com que grupos lógicos de processos são gerenciados. A partir da versão 5.0 do ALua, a responsabilidade por esses grupos, chamados de Aplicações, foi removida e, portanto, teve que ser transferida ao DALua. Assim, a biblioteca deve gerenciar a criação de aplicações e a entrada e saída de seus processos. Também achamos pertinente melhorar a arquitetura da biblioteca, tornando-a mais modular de acordo com suas funcionalidades. A Nova Arquitetura O DALua é composto pelos seguintes módulos: dalua: módulo principal que contém o funcionamento básico da biblioteca.

dalua.app: módulo que suporta grupos lógicos de processos (aplicações). dalua.causal: módulo que suporta troca de mensagens com ordenação causal. dalua.events: módulo que permite acessar o sistema de eventos. dalua.mutex: módulo que suporta exclusão mútua distribuída. dalua.timer: módulo que oferece um temporizador para tarefas periódicas. dalua.total: módulo que suporta troca de mensagens com ordenação total. O Sistema de Eventos Decorrida a fase inicial de pesquisa, optamos por um modelo de eventos com tratadores. Em contraste com o modelo anterior, em que cada função se ligava a uma única callback, agora é possível ter vários tratadores associados a um evento, ou um tratador para vários eventos. A vantagem é que diferentes partes do código podem aguardar por um evento e reagir de maneiras distintas no momento em que ele for disparado. Também torna-se opcional a criação de funções callback específicas para cada chamada, já que o tratador de eventos tem uma interface única que recebe todos os argumentos necessários para identificar o tipo e origem do evento ocorrido. Para receber eventos, é necessário que o processo registre seu interesse no evento desejado, indicando o(s) tratador(es) de evento para cada caso. Isso é feito com uma chamada ao método dalua.events.monitor, que recebe uma string que identifica o evento a ser monitorado e uma função Lua que será chamada para tratar o evento quando ele ocorrer. Para registrar mais de um tratador, basta chamar este método mais vezes, passando como argumento o mesmo identificador de evento, porém com diferentes funções tratadoras. É possível também parar de receber eventos que estão so monitorados para um ou mais tratadores. Para tal, deve-se utilizar o método dalua.events.ignore, que também recebe a string identificadora do evento e o tratador que desejamos remover. Assim, os processos só recebem eventos quando for realmente necessário, evitando desperdício de processamento. Adicionamos também a possibilidade de disparar eventos globais que atingem mais de um processo da aplicação. O DALua faz o multicast automaticamente para os processos que devem recebê-los, de acordo com o tipo do evento. O disparo de eventos é feito pelo método dalua.events.raise, que recebe o identificador do evento a ser disparado, o(s) processo(s) que receberão o evento e os argumentos a serem passados para o tratador. Todos os métodos do DALua suportam nativamente o sistema de eventos. Um estilo padrão de evento foi adotado (todos os eventos DALua são prefixados com "dalua_" e os argumentos enviados ao tratador informam sua natureza, seja ela de erro ou o sucesso de uma operação). Desta maneira, a utilização da biblioteca foi drasticamente simplificada. O Sistema de Aplicações Uma aplicação é um grupo lógico de processos DALua, identificado por um nome único naquela rede ALua. Inicialmente, um processo deve requisitar a criação de uma nova aplicação, da qual ele fará parte. Para isso, ele deve chamar o método dalua.app.create, indicando qual nome identificará esta nova aplicação. Caso o nome já esteja em uso, um evento de erro é gerado. A partir daí, outros processos poderão entrar nesta aplicação com uma chamada ao dalua.app.join. Analogamente, um processo pode sair da aplicação com dalua.app.leave. Eventos são disparados para os membros da aplicação sempre que um processo entra ou sai dela. A grande vantagem desse sistema é que o processo de uma aplicação pode obter a lista de processos que fazem parte do grupo sempre que for necessário, através do método

dalua.app.processes, podo ser usada diretamente em outros métodos do DALua como, por exemplo, o campo de destinatário para envio de uma mensagem. Essa lista é atualizada automaticamente, e condições de corrida são tratadas internamente pela biblioteca com o uso de exclusão mútua distribuída. É importante notar também que um processo pode participar de diversas aplicações diferentes. Assim, é possível criar grupos com interseções, o que pode ser útil para alguns programas. Para permitir que processos em diferentes máquinas façam parte de uma mesma aplicação, deve-se criar uma rede ALua entre todas as máquinas envolvidas. O DALua simplifica essa tarefa com o método dalua.link, que serve tanto para conectar uma máquina a outra quanto para conectar um grupo inteiro de máquinas a outro grupo. Internamente, o DALua cria uma rede totalmente conectada, o que torna desnecessário o uso de algoritmos complexos de roteamento, porém cria limitações de escalabilidade. Exemplo O exemplo a seguir demonstra o funcionamento do novo sistema de eventos em conjunto com o sistema de aplicações. Para efeito de demonstração, são utilizados apenas dois processos, rodando na máquina local. O primeiro processo cria uma nova aplicação e aguarda o evento "dalua_app_join", que indicará a entrada de outros processos nessa aplicação. O segundo processo, executado algum tempo depois, entra na aplicação criada pelo primeiro e envia uma mensagem para todos do grupo. Abaixo do código é exibida a saída do terminal. require("dalua") Processo 1 function onappjoin(event, status, app, id) print("processo "..id.." entrou na aplicação "..app) function onappcreate(event, status, app) if status == "success" then print("aplicação '"..app.."' criada com sucesso!") else print("erro ao criar aplicação!") return dalua.events.monitor("dalua_app_join", onappjoin) dalua.init("127.0.0.1", 4321) print("eu sou o processo "..dalua.self()) dalua.events.monitor("dalua_app_create", onappcreate) dalua.app.create("minhaapp") dalua.loop() > lua proc1.lua Eu sou o processo 127.0.0.1:4321:0 Aplicação 'MinhaApp' criada com sucesso! Processo 127.0.0.1:4321:1 entrou na aplicação MinhaApp Olá para todos! Processo 2

require("dalua") function onappjoin(event, status, app, id) if id == dalua.self() and status == "success" then dalua.s(dalua.app.processes("minhaapp"), "print", "Olá para todos!") dalua.init("127.0.0.1", 4321) print("eu sou o processo "..dalua.self()) dalua.events.monitor("dalua_app_join", onappjoin) dalua.app.join("minhaapp") dalua.loop() > lua proc2.lua Eu sou o processo 127.0.0.1:4321:1 Olá para todos! Testes Após a implementação das novas funcionalidades, o DALua foi novamente adotado pelos alunos da disciplina de pós-graduação INF2545. O trabalho proposto consistiu em desenvolver um protótipo de jogo online multijogador onde cada jogador corresponde a um processo DALua. Eventos do jogo, como a entrada ou saída de jogadores, são mapeados diretamente como eventos DALua, o que resultou num excelente teste para a biblioteca e provou que a nova arquitetura facilita bastante a criação desse tipo de aplicação. Migração de Processos Com a nova versão do DALua funcionando, decidimos voltar ao nosso objetivo inicial e pesquisar maneiras de transportar processos em andamento entre diferentes máquinas, manto o seu estado de execução. Assim, resolvemos utilizar a ferramenta Pluto [4] para serialização de processos Lua. O Pluto é capaz de armazenar em formato texto todo o estado das variáveis de um processo Lua, e então recriar essas variáveis em outro processo a partir daquele texto. A pilha de execução não é mantida, mas para nossos objetivos iniciais basta o estado das variáveis. Uma dificuldade de implementar isso nos processos DALua é que o estado da conexão não é mantido durante a migração, ou seja, é necessário reconectar os sockets para que a nova máquina faça parte do grupo. Desta forma, os sockets não são serializados, pois eles serão recriados pelo DALua após a migração. Então, para efetuar a migração, um processo na máquina A serializa-se para o formato de texto, que é enviado como uma mensagem à máquina de destino B. Lá, um processo inicialmente vazio é preenchido com os dados recebidos pela mensagem, e então uma resposta é enviada para que o processo original possa se desligar. A partir daí, o processo da máquina B assume o lugar do anterior na aplicação. Ainda existem problemas a serem resolvidos, como a atualização dos identificadores de processos DALua, que são baseados no ereço IP e porta de onde o processo foi criado. Porém, acreditamos que será possível contornar estes problemas, permitindo que nosso objetivo seja cumprido no futuro próximo. Conclusões

A revisão da biblioteca DALua para utilizar o paradigma de eventos trouxe benefícios ao desenvolvimento de aplicações distribuídas, como pudemos comprovar durante a programação do protótipo de jogo. A migração de processos torna possível a modificação da rede física sem interromper o andamento da aplicação, porém existem diversos problemas associados quando se trata de processos conectados em rede. Esperamos resolver esses problemas e cumprir o objetivo proposto enquanto buscamos pelas melhores soluções. Referências 1 - R. COSTA. DALua. PUC-Rio, Rio de Janeiro, jul. 2007. Disponível em: http://alua.inf.puc-rio.br/dalua. Acesso em: 06 jul. 2007. 2 - C. URURAHY, N. RODRIGUEZ e R. IERUSALIMSCHY. ALua: Flexibility for parallel programming. Computer Languages, 28(2):155 180, 2002. 3 - R. IERUSALIMSCHY, L. FIGUEIREDO e W. CELES. Lua - an extensible extension language. Software: Practice and Experience, 26(6):635 652, 1996. 4 - B. SUNSHINE-HILL. Pluto Library. Lua-users, nov. 2005. Disponível em: http://luausers.org/wiki/plutolibrary. Acesso em: 06 jul. 2007. 5 - R.COSTA, P. BASTOS, B. SILVESTRE e N. RODRIGUEZ. Combining Programming Paradigms in Asynchronous Systems. Rio de Janeiro, 2007. Monografia em Ciência da Computação - Departamento de Informática, PUC-Rio.