SlideShare uma empresa Scribd logo
1 de 105
Baixar para ler offline
Jean Rodrigo dos Santos
                  Rafael Caetano Pinto
           Valdemárcio Fernandes dos Santos




                BioCluster
Comparação de Seqüências de DNA em Sistemas
         Distribuídos Clusterizados




                      Osasco
                  Dezembro de 2005
Jean Rodrigo dos Santos
                  Rafael Caetano Pinto
           Valdemárcio Fernandes dos Santos




                BioCluster
Comparação de Seqüências de DNA em Sistemas
         Distribuídos Clusterizados




                           Trabalho de Conclusão de Curso para o
                           curso de Engenharia de Computação do
                           Centro Universitário FIEO como requisito
                           parcial para a obtenção do título de bacharel
                           em Engenharia de Computação.

                           Orientadores:
                           Prof. Antonio Fernando Nunes Guardado
                           Prof. Francisco Isidro Massetto




                      Osasco
                  Dezembro de 2005

                                                                      2
Persevera na tua determinação.




                            3
Agradecemos às pessoas abaixo que
contribuíram para a conclusão desse projeto:

Antonio Fernando Nunes Guardado,

Celso Silva,

Gabriela M. de Azevedo Souza,

Jean M. Laine,

Jonas Santiago de Oliveira,

Maisa Barros de Oliveira,

Maria Clara de Carvalho Silva,

Martin R. Whittle,

Paulo Cunha,

Pedro Rosa,

Sidney da Silva Viana.

Em especial, agradecemos a Francisco
Isidro Massetto, pois sem sua ajuda e boa
vontade, esse projeto não seria possível.




                                           iv
                                          4
Resumo
           Esse projeto visa a construção e a configuração de um Sistema Distribuído
aplicado para a comparação de seqüências de DNA. Será mostrada neste trabalho toda a
especificação necessária para a construção e implementação do mesmo.

           Um dos objetivos principais abordados nesse trabalho é a preocupação na
elaboração de uma solução menos custosa financeiramente em relação aos Sistemas
Centralizados Proprietários sem que haja uma queda significativa no desempenho da
aplicação.

            Para se alcançar esse objetivo, será utilizada uma estrutura de rede
FastEthernet e alguns micro-computadores interconectados sobre o protocolo TPC/IP.
Como exemplo para a implementação deste sistema clusterizado, foi escolhido o
algoritmo CGM/BSP de similaridade de seqüências, devido ao fato de que nessa
aplicação, dependendo do conjunto de dados a se comparar, é necessário um alto poder
computacional para se realizar a comparação entre seqüências.




Palavras-chave: Cluster. DNA. RMI. Sistemas Distribuídos.




                                                                                  v
                                                                                  5
Abstract
            This project aims the construction and the configuration of a Distributed
System suitable for a DNA sequences comparation. All specifications needed for its
construction and implementation will be shown at this project.

             One of the main subjects approached at this work is the concern about a
cheaper solution elaboration in relation to an Owner Centralized Systems without a deep
fall on the application s performance.

            A basic net structure with one switch and a few personal computers
interconnected using the TPC/IP protocol will be created to reach the subject of this
project. As an example for the clustered system implementation, a comparative between
DNA s has been chosen, due to the needed of a high computational power, in order to
carry this comparison out between sequences, although it can depend on the data group
to be compared.




Keywords: Cluster. DNA. RMI. Distributed Systems.




                                                                                     vi
                                                                                     6
Sumário
                                                                                                                                         v
Resumo ................................................................................................................................. 5

                                                                                                                                           vi
Abstract ................................................................................................................................. 6

Sumário ................................................................................................................................. 7

Capítulo 1 ............................................................................................................................ 10
 Objetivos.......................................................................................................................... 11
 Justificativa ...................................................................................................................... 12
 Metodologia ..................................................................................................................... 13

Capítulo 2 ............................................................................................................................ 14
 Introdução a Sistemas Distribuídos................................................................................. 15
    Comparação dos Sistemas Distribuídos com os Sistemas Centralizados.................. 15
      Mudança de paradigma de programação ................................................................ 17
    Modelo Cliente-Servidor .............................................................................................. 17
      Simplicidade ............................................................................................................. 18
      Baixa taxa de overhead na rede .............................................................................. 18
      Níveis de protocolos................................................................................................. 18
      Bloqueadas ou não-bloqueadas .............................................................................. 18
      Bufferizadas e não-bufferizadas .............................................................................. 19
      Confiáveis e não-confiáveis ..................................................................................... 19
 Clusters............................................................................................................................ 19
    Características de um Cluster ..................................................................................... 19
      Alto desempenho ..................................................................................................... 19
      Escalabilidade .......................................................................................................... 20
      Confiabilidade e tolerância à falha ........................................................................... 20
      Alta disponibilidade .................................................................................................. 20
      Independência.......................................................................................................... 20
      Transparência .......................................................................................................... 21
    Comunicação entre processos no Cluster................................................................... 22
    Cluster Homogêneo e Heterogêneo ............................................................................ 23
    Tipos de Cluster........................................................................................................... 24
      Cluster de Alto Desempenho ................................................................................... 24
      Clusters de Alta Disponibilidade .............................................................................. 24
      Clusters de Balanceamento de Cargas ................................................................... 24
      Exemplos de Clusters .............................................................................................. 24
         Cluster Beowulf..................................................................................................... 24
    Invocação Remota de Métodos (RMI) ......................................................................... 27
 RMI-Registry.................................................................................................................... 28
      Exemplo de programa em RMI ................................................................................ 28
         Ola.java (interface) ............................................................................................... 28
         OlaImpl.java (implementação do servidor)........................................................... 29
         OlaCliente.java (cliente) ....................................................................................... 29
    Sistema de Arquivo de Rede (NFS Network File System) ....................................... 30

Capítulo 3 ............................................................................................................................ 31
 Biologia Computacional................................................................................................... 32
    Conceitos de Biologia .................................................................................................. 32
    Comparação de seqüências e Alinhamento................................................................ 33
      Uma breve explicação de como foi montada a matriz............................................. 36

                                                                                                                                          7
Algoritmo para validação de sequências de DNA ....................................................... 38
     Similaridade distribuída (CGM/BSP) ........................................................................... 38
   Algoritmos de alinhamento e similaridade utilizados como base neste projeto.............. 40
     Algoritmo básico do método alignment() da classe DNA ............................................ 40
     Algoritmo básico do método similarity() da classe DNA.............................................. 41
     Algoritmo básico do método CGM/BSP() da classe DNA ........................................... 42

Capítulo 4 ............................................................................................................................ 43
 Especificações do projeto................................................................................................ 44
    Conceitualização do projeto ........................................................................................ 44
    Modularização e divisão de responsabilidades ........................................................... 44
       Módulo Interface Web .............................................................................................. 45
       Módulo Gerenciador................................................................................................. 45
       Módulo Executor ...................................................................................................... 45
         Estratégia de Comparação CGM/BSP utilizando RMI ......................................... 46
       Módulo ClusterKnoppix ............................................................................................ 48
    Especificações do sistema........................................................................................... 49
       Rede ......................................................................................................................... 49
       Características dos nós do sistema ......................................................................... 49
       Armazenamento dos dados ..................................................................................... 49
       Sistema Operacional ................................................................................................ 50
       Linguagem de programação .................................................................................... 50
       Pacote para aplicação de computação distribuída .................................................. 50
       Características do Cluster ........................................................................................ 50
       Tratamento de erros................................................................................................. 52
       Testes....................................................................................................................... 52
 Casos de Uso .................................................................................................................. 54
    Caso de Uso Nv0 Sistema distribuído clusterizado para comparação de seqüências
    de DNA......................................................................................................................... 55
    Caso de Uso Nv1 Funcionalidades Gerais............................................................... 56
    Caso de Uso Nv2a - Comparar Seqüências de DNA.................................................. 57
    Caso de Uso Nv2b - Inserir nova máquina no sistema ............................................... 59
    Caso de Uso Nv2c - Inserir seqüência de DNA no banco de dados .......................... 60
    Caso de Uso Nv2d - Remover seqüência de DNA do banco de dados...................... 61
    Caso de Uso Nv2e Inicializar sistema distribuído .................................................... 62
 Diagrama de Classes ...................................................................................................... 63
    Parte 1.......................................................................................................................... 63
    Parte 2.......................................................................................................................... 64
 Diagramas de Seqüência ................................................................................................ 65
    Inicialização do Executor ............................................................................................. 65
    Inicialização do Gerenciador ....................................................................................... 66
    Comparando DNA: Visão do módulo ClusterInterface................................................ 67
 Comparando DNA: Visão do módulo Gerenciador ......................................................... 68
 Comparando DNA: Visão do módulo Executor: Primeiro Executor ................................ 69
 Comparando DNA: Visão do módulo Executor: Executores centrais............................. 70
 Comparando DNA: Visão do módulo Executor: Último Executor ................................... 71
 Diagramas de Transição de Estado ................................................................................ 72
    Executor ....................................................................................................................... 72
    Gerenciador ................................................................................................................. 72
 Diagramas de Atividade .................................................................................................. 73
    Método Similarity ......................................................................................................... 73
    Método CGM/BSP ....................................................................................................... 74
 Banco de dados............................................................................................................... 75
    Diagrama Entidade Relacionamento ........................................................................... 75

                                                                                                                                        8
Domínios .................................................................................................................. 75
      Modelo do Banco de dados ......................................................................................... 75
      Dicionário de dados ..................................................................................................... 75
         tbldna........................................................................................................................ 75
         tblrelaction ................................................................................................................ 76
      Script de criação de tabelas ........................................................................................ 76
         Tabela tblDNA .......................................................................................................... 76
         Tabela tblRelaction................................................................................................... 76
      Arquivo de configuração do MySQL ............................................................................ 76
   Interface do Sistema........................................................................................................ 79
      Arquitetura da interface:............................................................................................... 79
      Interface Web............................................................................................................... 79
      Estrutura de comunicação da interface Web............................................................... 80
         Evento na página "Tela Principal": Entrada ............................................................. 80
         Evento na página "Tela Principal": Clique em Comparar ........................................ 80
         Evento na página "Relacionamento": Clique em Pesquisar .................................... 80
         Evento na página "Relacionamento": Clique em Relacionar................................... 80

Capítulo 5 ............................................................................................................................ 81
 Caracteristicas do Ambiente............................................................................................ 82
    Configurações fisicas:.................................................................................................. 82
      Máquinas: ................................................................................................................. 82
      Rede: ........................................................................................................................ 82
    Configurações lógicas:................................................................................................. 82
      Máquina Gerenciadora:............................................................................................ 82
      Máquina do Repositório de dados: .......................................................................... 82
      Máquinas Executoras:.............................................................................................. 82
    Metodologia.................................................................................................................. 83

Conclusão ........................................................................................................................... 89

Recomendações para projetos futuros ............................................................................... 90

Referências ......................................................................................................................... 91

Anexo A Implementação do ClusterKnoppix ................................................................... 93
  Planejamento................................................................................................................... 93
  Instalação ........................................................................................................................ 94
  BOOT Remoto ................................................................................................................. 95
  Aplicação ....................................................................................................................... 101
  Resultados..................................................................................................................... 102
  Customização ................................................................................................................ 103




                                                                                                                                        9
Capítulo 1




      Esse capítulo preza a contextualização do
      projeto,     nele    serão    definidos   a
      justificativa, os objetivos e a metodologia
      utilizada no desenvolvimento deste
      trabalho.




                                              10
Objetivos

           Elaborar o projeto de um Sistema Distribuído Clusterizado utilizando
algoritmos paralelizáveis existentes para uma aplicação específica e assim, testar o
funcionamento desta plataforma distribuída.

             Utilizaremos como aplicação o sequenciamento físico de DNA devido a suas
características escaláveis e paralelizáveis. Dessa forma poderemos analisar o
comportamento do Sistema Distribuído em uma aplicação mediante alterações de
configuração com a finalidade de otimizar o processamento como um todo. Obtendo
assim, um desempenho no mínimo satisfatório (um desempenho semelhante ao de um
sistema centralizado em uma máquina mono-processada com as mesmas características
das máquinas utilizadas no cluster).

           Os principais objetivos a serem alcançados no projeto são:

      Escalabilidade    Incluir ou retirar máquinas do sistema facilmente de forma a
      manter o sistema escalável conforme a necessidade de desempenho da aplicação;

      Custo Objetiva-se utilizar microcomputadores padrão IBM - PC e uma rede LAN
      Fast Ethernet TCP/IP por serem mais acessíveis economicamente. Também é
      decisão de projeto a utilização de uma linguagem multiplataforma (Java) de modo
      que se obtenha mais versatilidade, minimizando as limitações ocasionadas pelo
      uso de sistemas operacionais proprietários que geralmente possuem custo
      elevado.

      Acessibilidade   Será desenvolvido um sistema de código aberto que seja
      economicamente viável em comparação às tecnologias centralizadas proprietárias.

      Desempenho Em um primeiro estágio do projeto, o objetivo é de se projetar um
      sistema clusterizado com desempenho comparável ao de um sistema centralizado
      mono-processado. Atingido esse objetivo primário, serão verificadas novas
      alternativas de projeto para melhorar o desempenho do sistema.




                                                                                  11
Justificativa

            Em função do crescente desenvolvimento de Sistemas Distribuídos,
impulsionado pela demanda de alto poder computacional, explorar seus recursos torna-se
cada vez mais imprescindível [ERA04]. Com base nesta afirmação, e pelo objetivo de
obter um sistema de baixo custo financeiro, este projeto se destina à construção de um
cluster para executar tarefas que requeiram um alto poder computacional.

            Um cluster é um sistema de processamento paralelo alternativo, que
apresenta um desempenho computacional análogo aos sistemas centralizados. Uso de
clusters nas soluções de determinados projetos, tais como processamento de imagens ou
de massas de dados, torna-se economicamente mais viável que em sistemas
centralizados, mantendo um desempenho igual ou superior dependendo da
implementação.

           Neste projeto, será implementado e testado o algoritmo CGM/BSP, que é uma
versão paralela para um algoritmo que compara graus de similaridade entre seqüências
de genes. Para uma maior compreensão sobre o assunto, primeiramente será
apresentada uma introdução aos conceitos básicos de sistemas distribuídos e clusters,
assim como uma breve abordagem dos conceitos da biologia e das aplicações da
computação na área biológica, inclusive com os algoritmos para sequenciamento e
comparação de DNA, assim como o algoritmo CGM/BSP, que é a base deste trabalho.

            Todas as etapas de evolução do projeto, tais como contextualização,
especificações, modelagens, desenvolvimento e fase de testes serão documentadas. Há
a preocupação inclusive em documentar alguns tratamentos de falhas que podem ser
interessantes para desenvolvimentos futuros.




                                                                                   12
Metodologia

           Como metodologia abordada, será adotado basicamente o Modelo em Espiral,
também denominado por vários autores como Modelo Evolutivo, em que a cada etapa
concluída repete-se o processo de averiguação por meio de protótipos para o
aperfeiçoamento do projeto.

            Para a documentação, será adotado o conceito de Orientação a Objetos, que
melhor atende aos requisitos do projeto uma vez que será utilizada uma linguagem
orientada a objeto (Java). Portanto, utilizar-se-á dos padrões da linguagem UML.




                                                                                  13
Capítulo 2




      Esse capítulo objetiva apresentar a
      introdução conceitual sobre sistemas
      distribuídos, modelos de comunicação,
      clusters e suas aplicações.




                                        14
Introdução a Sistemas Distribuídos

            Neste projeto, a definição de sistema distribuído será uma combinação de
ambas as definições, ou seja, um sistema distribuído é um agrupamento de computadores
que se apresenta ao usuário como um sistema único, compartilhando recursos. Desta
forma, o Sistema Distribuído apresenta muitas diferenças em relação a um sistema
centralizado.

           Desde 1945 quando se iniciou a era da computação moderna, os
computadores têm sofrido grandes transformações tecnológicas [TAN95]. Durante o
período de 1945 a 1980, a necessidade de compartilhar informações era praticamente
nula e devido ao pequeno número de computadores nas organizações, as quais muitas
faziam uso somente de um computador, quase sempre mainframes.

            A necessidade de comunicação foi se intensificando a medida que os
computadores foram se tornando mais acessíveis financeiramente, passando a aparecer
no cenário empresarial (comercial/industrial) tornando-se umas das principais ferramentas
da indústria. Para sanar a deficiência da comunicação, foram desenvolvidas nos anos 80,
as redes locais de alta velocidade (LAN). Tais tipos de redes em conjunto com os avanços
tecnológicos dos microcomputadores, culminaram no desenvolvimento dos sistemas
distribuídos.

             Diferentes autores definem de maneira distinta o conceito de sistema
distribuído. Segundo Tanembaum [TAN95], Sistemas Distribuídos são definidos como
 uma coleção de computadores independentes que se apresentam ao usuário como um
sistema único e consistente . Já Couloris [COU01] define sistema distribuído como sendo
 uma coleção de computadores autônomos interligados através de uma rede de
computadores e equipados com software que permita o compartilhamento dos recursos
dos sistemas: hardware, software e dados .

            Neste projeto, a definição de sistema distribuído será uma combinação de
ambas as definições, ou seja, um sistema distribuído é um agrupamento de computadores
que se apresenta ao usuário como um sistema único, compartilhando recursos. Desta
forma, o Sistema Distribuído apresenta muitas diferenças em relação a um sistema
centralizado.


Comparação dos Sistemas Distribuídos com os Sistemas Centralizados

            Atualmente instituições acadêmicas e industriais de modo geral, vêm
desenvolvendo aplicações que exigem cada vez mais um alto poder computacional.
Entretanto o custo para adquirir tais máquinas com essa característica é extremamente
alto em muitos casos proibitivos, fazendo com que essas organizações migrem para
outras alternativas.

           Uma saída encontrada por especialistas para esse problema foi uma
arquitetura de "Sistema Distribuído", que consiste em um aglomerado de
microcomputadores mono ou multiprocessados e que executam uma tarefa como se
fosse um único sistema.

            Enquanto que em um Sistema Centralizado, uma aplicação é executada por
um ou vários processadores localizados em um mesmo computador, um Sistema
distribuído conte com um certo número de nós (computadores conectado em uma rede
                                                                                      15
comum) onde cada um deles executa uma aplicação ou parte dela.

            Em um Sistema Centralizado existem limitações que torna os Sistema
distribuídos potencialmente superiores em poder computacional. Por exemplo, um
Sistema Centralizado é limitado em espaço físico não podendo comportar muitos
processadores numa mesma placa mãe, enquanto que a escalabilidade de um Sistema
distribuído o permite a superar a quantidade de processadores em um Sistema
Centralizado.

            Outra vantagem é o uso da memória (principal) em um Sistema Centralizado
multiprocessado, pois as tarefas precisam entrar em uma fila para o uso da memória
principal, ao passo que nos Sistemas Distribuídos, cada nó conta com a sua própria
memória para uso independente das aplicações.

           Entre as vantagens de um Sistema Distribuído em relação a um Sistema
Centralizado pode-se citar [Tanenbaum]:

          - Custo: o valor financeiro para implementação de um Sistema distribuído é
geralmente muito inferior ao valor de um Sistema Centralizado com um poder
computacional equivalente, e utilizando um sistema Open Source e linguagem de
programação Java, por ser livre e gratuito, no que diz respeito a Softwares, não existe
despesas com Licenças;

           - Desempenho: Sistema com altíssimo índice de processamento, tais como o
Blue Gene (www.top500.org) são capazes de processar 280600 Gflops (consultada em
13/12/2005), tal capacidade atualmente só é possível em plataformas distribuídas;

            - Tolerância a Falhas: Um Sistema distribuído pode contar com algoritmos
que detectam a falha em um nó e redirecione as tarefas a serem executadas para outro
nó. Dessa forma a capacidade de índices de confiabilidade de um Sistema distribuído é
superior a um Sistema Centralizado;

           - Flexibilidade: os recursos oferecidos por um nó podem ser migrados para
outros nós, mantendo assim uma redundância dos recursos e maior disponibilidade dos
serviços;

         - Escalabilidade: é a característica de um Sistema distribuído tem de acoplar
mais computadores à sua rede mantendo a estabilidade e aumentando a eficácia do
Sistema.

           Entretanto, há desvantagens, que alguns autores consideram desafios, tais
como:

           - Transparência: um dos objetivos é manter oculto os aspectos distribuídos
dos usuários do Sistema. O acesso a arquivos distribuídos por diversos computadores
remotos não deve ser diferente a um acesso a arquivos locais. Um usuário deve poder
acessar arquivos do Sistema sem precisar saber de sua localização ou comunicação
entre processos;

            - Segurança: é muito difícil estabelecer um protocolo de segurança eficiente
para Sistemas Distribuídos, pois todos os nós possuem acessos entre eles, então
algoritmos de segurança para garantir a integridade dos dados devem ser implementados;

           - Viabilidade: nem todos as aplicações que executam de maneira eficiente

                                                                                     16
em um Sistema Centralizado irão executar na mesma maneira em um Sistema distribuído.
Deve-se verificar se os algoritmos das aplicações são paralelizáveis, pois um Sistema
distribuído só é viável se suas aplicações permitirem que sejam fragmentadas e
distribuídas entre os nós.


           Para esse projeto, a viabilidade do uso de um Sistema distribuído ao invés de
um Sistema Centralizado se dá através das vantagens já apresentadas neste capítulo.
Justificamos o uso pelo propósito da pretensão de utilizar um sistema robusto para
manipular uma grande quantidade de dados e que apresente um baixo custo financeiro
em relação aos sistemas mono-processados. Assim, utilizando técnicas de fragmentação
de dados e paralelização da aplicação, uma implementação distribuída tende a obter
resposta satisfatórias para o nosso intento.

Mudança de paradigma de programação

            Uma das dificuldades que envolve a implementação de um Sistema
Distribuído é o paradigma da programação distribuída. Programação distribuída prevê as
chamadas de métodos localizados em máquinas diferentes através da troca de
mensagens e sincronização.

            As trocas de mensagens são realizadas através de algoritmos que fazem uso
de primitivas como send e receive, essas primitivas podem ser organizadas de forma
síncronas ou assíncronas. O que difere uma da outra é o grau de dificuldade que as
primitivas assíncronas exigem na implementação de algoritmos de armazenamento de
mensagens e temporização. Quando um cliente faz uma requisição a um servidor este
pode não estar pronto para receber a mensagem enviada. Para que a mensagem não
seja perdida, podem ser implementado algoritmos de armazenamento de mensagens
(mail-box).

           Para esse projeto, a viabilidade do uso de um Sistema distribuído ao invés de
um Sistema Centralizado se dá através das vantagens já apresentadas neste capítulo.
Justificamos o uso pelo propósito da pretensão de utilizar um sistema robusto para
manipular uma grande quantidade de dados e que apresente um baixo custo financeiro
em relação aos Sistemas Centralizados. Assim, utilizando técnicas de fragmentação de
dados e paralelização da aplicação, uma implementação distribuída tende a obter
resposta satisfatórias para o nosso intento.


Modelo Cliente-Servidor

            O objetivo do modelo cliente-servidor é configurar o Sistema Operacional com
um conjunto de processos que colaboram entre si para a execução de uma tarefa,
denominados servidores e clientes. Servidores, como o próprio nome sugere, são
processos que oferecem serviços e acesso a recursos. Os clientes possuem processos
que requisitam os recursos e serviços oferecidos pelos servidores. Uma máquina pode
executar vários processos, servidores, clientes ou então uma combinação de ambos.

             O modelo cliente-servidor utiliza um protocolo simples para comunicação do
tipo solicitação/resposta, isto evita a sobrecarga causada pelos protocolos dos modelos
OSI e TCP/IP devido ao tamanho cabeçalho e rotinas de controle de mensagens. Neste
tipo de protocolo, o cliente envia uma mensagem de solicitação de serviço ao servidor que
por sua vez recebe a mensagem, executa o serviço e devolve a resposta ao cliente ou

                                                                                      17
uma mensagem de erro informando o motivo pelo qual a solicitação não foi atendida. Veja
figura 2.1.1.




Figura 2.1.1   Modelo Cliente-Servidor

           As vantagens deste modelo são:

Simplicidade

            Não é necessário estabelecer ou finalizar conexão, pois basta o cliente enviar
uma solicitação ao servidor e aguardar pela resposta.

Baixa taxa de overhead na rede

            As respostas enviadas pelo servidor em decorrência das solicitações dos
clientes servem como confirmação de recebimento da mesma.

Níveis de protocolos

             No caso de protocolos idênticos entre as máquinas que estão interagindo
(cliente/servidor), são necessários apenas três níveis de protocolos (físico, enlace e
request/reply).

           Um exemplo de um servidor pode ser observado abaixo:

           servidor()
                        sempre faça
                                  recebe(endereço de origem, mensagem)
                                  processa(mensagem)
                                  envia(endereço de origem, mensagem)

Figura 2.1.2   Exemplo de um servidor

           Um exemplo de cliente para o servidor acima está demonstrado abaixo:

           cliente()
                        faça
                                   envia(endereço de origem, mensagem)
                                   recebe(endereço de origem, mensagem)

Figura 2.1.3   Exemplo de um cliente

           Dentre as primitivas que podem ser utilizadas, podem se destacar:

Bloqueadas ou não-bloqueadas

           Por ser uma operação de E/S, tanto o cliente quanto o servidor podem ficar

                                                                                       18
bloqueados enquanto o Sistema Operacional envia e recebe uma mensagem. Neste
aspecto, se houver alguma falha, tanto o cliente quanto o servidor podem ficar
indefinidamente suspensos. Para evitar este tipo de situação, mecanismos de cronômetro
(timeout) são utilizados para interromper a operação, caso ela não seja completa.

Bufferizadas e não-bufferizadas

            Bufferizadas     as mensagens enviadas são armazenadas de forma
semelhante a uma caixa de e-mails, sendo assim, não há risco de perder alguma
mensagem enquanto o processo não está disponível para recebê-la. Assim que o
processo fica apto a receber mensagens, ele verifica a existência delas na caixa de e-
mails e as executa.

            Não-bufferizadas     as mensagens enviadas não ficam armazenadas, ou
seja, se o processo não estiver apto a receber, a mensagem é perdida. Esse tipo de
primitiva é mais simples de se implementar, porém, dependendo do caso, é necessário a
inserção de mecanismos de controle para evitar perda de mensagens.

Confiáveis e não-confiáveis

           Confiáveis      Há garantia de que a mensagem sempre será entregue,
portanto não é necessário nenhum tipo de tratamento especial para elas.

           Não-confiáveis        Não há garantia na entrega de mensagens entre os
processos. Para se tratar isso, existem basicamente três abordagens:

       Admitir que a primitiva é não-confiável e deixar a responsabilidade de se
       implementar uma comunicação confiável ao usuário;
       Forçar o kernel a enviar mensagens de confirmação de recebimento (ACK);
       Estabelecimento de um temporizador (timeout) para cada requisição enviada,
       assim, se não houver resposta em um determinado período de tempo, a
       mensagem é enviada novamente.

Clusters

           Clusters, também chamados de Aglomerados, são uma implementação de
Sistemas Distribuídos que consiste em nós (computadores) de interconexão, podendo ser
monoprocessados ou multiprocessados, dentro de uma rede (LAN) de alta velocidade.
Esse aglomerado têm por objetivo processar tarefas como um único sistema, tirando
proveito do multiprocessamento fornecendo um sistema de grande capacidade de
processamento [DEI05].


Características de um Cluster

           Segundo Tanenbaum [TAN95], as características fundamentais de um cluster
são:


Alto desempenho

           A soma das capacidades de processamento de cada computador (nó) incluso
                                                                                   19
na rede pode atingir escala jamais possíveis para Sistema Centralizados. Mesmo fazendo
uso de multiprocessadores e de processadores vetoriais, somente será possível utilizar
milhares de processadores ao construir sistemas, sobre a forma de um enorme
aglomerado.

Escalabilidade

             A escalabilidade diz respeito ao fato de ser possível acoplar ou desacoplar
máquinas no cluster, dependendo da necessidade de processamento. Existem algumas
características de escalabilidade a serem respeitadas:

      Nenhuma máquina tem informação completa sobre o estado do sistema:
          Nenhuma máquina tem informações completas sobre o estado do Sistema,
          devido a sua independência de hardware e software das demais máquinas e
          também pelo modo de comunicação através de mensagens que pode causar
          congestionamento na rede se todas as máquinas começarem a trocar
          informações o tempo todo.

      Não existe uma sincronização de tempo global:
          Não existe uma sincronização de tempo global real, ou seja, linear no tempo,
          apenas uma sincronização lógica utilizada na troca de mensagens entre os
          nós. Porque com tantas máquinas seria impossível sincronizar o relógio
          interno do sistema com exatidão.

      A falha de uma máquina não compromete o cluster:
            A falha de uma máquina não deve comprometer o processo como um todo
            para isso algoritmos de redirecionamento de serviços devem ser
            implementados.

      As máquinas tomam decisões baseadas nas informações locais:
          As máquinas devem tomar decisões segundo as informações locais devido ao
          seu modo de comunicação ser através de troca de mensagens. Porque
          manter um nó atualizado com informações sobre todo o sistema poderia
          causar muito tráfego na rede e conseqüentemente congestionamento na rede
          e lentidão no sistema, o que foge da característica de um cluster.


Confiabilidade e tolerância à falha

           Se uma máquina falhar isso não deve comprometer o sistema como um todo,
sendo para isso implementado algoritmos de redirecionamento de tarefas para outros nós
da rede.


Alta disponibilidade

             Hardware e software podem ser replicados de modo a assegurar o serviço
oferecido.


Independência


                                                                                     20
Cada elemento possui um ou mais processadores, memória, dispositivos de
entrada/saída e seu próprio Sistema Operacional. Este elemento geralmente pode ser
desligado e até mesmo removido do cluster sem que isto afete o funcionamento dos
demais.


Transparência

            O cluster deve se comportar como se fosse um único sistema, passando para
o usuário a imagem de um recurso único. Existem alguns tipos de transparências:

      Locação o usuário não deve saber onde estão localizados os recursos tanto de
      hardware quanto de software
      Replicação     o usuário não toma conhecimento das replicações do Sistema
      Operacional, arquivos e outros recursos.
      Migração     os recursos podem ser removidos de um nó para outro sem a
      necessidade de trocar seus nomes
      Concorrência múltiplos usuários pode compartilhar recursos automaticamente
      Paralelismo atividades distintas podem ocorrer em paralelo sem o conhecimento
      do usuário




                                                                                  21
Comunicação entre processos no Cluster

            Em um cluster, os nós são independentes, possuindo sua própria memória,
espaço de armazenamento e processador. A forma de comunicação entre eles é através
de troca de mensagens. A mensagem é um arranjo de parâmetros encapsulados enviado
através da rede de um computador a outro.

           Entretanto a sincronização entre os nós é determinada pela lógica utilizada na
troca das mensagens [DEI05].

             Para que haja interação entre recursos disponíveis no cluster, são
necessárias as implementações de alguns mecanismos de memória compartilhada
distribuída [DEI05]. Esses mecanismos consistem na existência de uma variável comum
entre todas as máquinas, permitindo que sempre que um processo modifique o valor
desta variável, esta seja atualizada nas demais máquinas. Um dos modelos mais comuns
de comunicação através de troca de mensagens entre processos é utilizando as primitivas
send e receive para envio e recebimento de mensagens, como ilustra a figura 2.2.1.




Figura 2.2.1 - Modelo de comunicação com send e receive. A atualização de uma variável
a processos em máquinas diferentes utilizando as primitivas send/receive.

           Esta comunicação é viabilizada através da Invocação Remota de Método
(RMI) que ajuda o programador neste tipo de aplicação.




                                                                                      22
Cluster Homogêneo e Heterogêneo

           Segundo Marcos Pitanga [PIT03], um cluster é homogêneo quando todos os
seus nós são dotados das mesmas características (software e hardware) e compartilham
a mesma rede de comunicação. E um cluster é heterogêneo quando os seus nós se
diferenciam em características ou rede de comunicação.

             A característica de um cluster ser ou não homogêneo reflete nas regrar a
serem utilizadas para o balanceamento de carga das tarefas que devem ser executadas.
Eventualmente, no particionamento de uma tarefa, ao se balancear a carga em um cluster
homogêneo, todos os nós receberam cargas iguais, já que compartilham das mesmas
características. Evidentemente, possuem o mesmo poder de processamento.

            Em um cluster heterogêneo deve-se ter cautela ao distribuir as cargas entre
os nós, pois sendo máquinas diferentes umas das outras, seu poder de processamento
também difere, Isto exige que seja implementado um algoritmo gerenciador, que analise o
poder de processamento de cada nó atribuindo-lhe um peso que servirá de parâmetro e
fator decisório para que seja distribuída uma carga compatível com a capacidade de
processamento de cada nó.

           Embora um cluster homogêneo seja mais atraente por não se preocupar em
balancear a carga de tarefas distribuídas, é fato que com a sua ampliação ele se tornará
heterogêneo salvo os casos em que não mais será modificado ou encontre máquinas
exatamente iguais para a ampliação.




                                                                                     23
Tipos de Cluster

           Segundo Deitel [DEI05], há três tipos principais de clusters: cluster de alto
desempenho, de alta disponibilidade e de balanceamento. Estes clusters seguem um
padrão de características distintos que depende da aplicação.


Cluster de Alto Desempenho

           Neste tipo de cluster, todos os nós são utilizados para executar o serviço. Ele
é aplicado em problemas computacionais de grande escala que podem se divididos e
executados paralelamente.


Clusters de Alta Disponibilidade

            Em clusters de alta disponibilidade, alguns nós são usados para executar
serviços, enquanto que outros são reservados para assumir o lugar de uma máquina no
caso de falha assumindo a execução da tarefa. Este modelo de cluster é muito utilizado
em tarefas de missão crítica onde não pode haver falhas de sistema e para se conseguir
este nível de confiabilidade é necessário que haja redundância de hardware e software.
Esta característica é oferecida pelos clusters de alta disponibilidade onde há replicação de
software e hardware.


Clusters de Balanceamento de Cargas

            Nesse tipo de cluster existe um nó coordenador que distribui as tarefas entre
os demais nós do cluster, de modo que cada um receba uma quantidade de tarefas à
executar compatível com o seu poder computacional. Para tanto é necessário que seja
atribuído a cada máquina um peso que represente o seu desempenho computacional
para que sirva de parâmetros de algoritmos de balanceamento que tomarão decisões com
base nestes dados. Os Clusters de Balanceamento de Cargas são utilizados em
aplicações de e-business com grandes volumes de usuários.


Exemplos de Clusters

Cluster Beowulf

          Desenvolvidos nos laboratórios da NASA, o projeto Beowulf
[PIT03][BEO05](1994), liderado por Thomas Sterling, tinha como objetivo proporcionar
uma ferramenta de baixo custo financeiro que pudesse resolver grandes tarefas
computacionais em ciências espaciais e terrestres do Goddard Space Flight Center
(NASA). Na sua primeira versão o cluster Beowulf era dotado de 16 computadores com
processador Intel DX 4 ligados via rede Ethernet.

          O Beowulf utiliza o modelo cliente/servidor como acesso a todos o nós através
de uma conexão remota ao nó servidor.

            O nó servidor tem como objetivo controlar o cluster, monitorando e
distribuindo tarefas. Os demais nós (escravos) são exclusivamente dedicados para o

                                                                                         24
processamento das tarefas enviadas pelo servidor, podendo ou não ter dados ou discos
rígidos. Abaixo segue uma ilustração de um cluster Beowulf (Figura 2.2.3).




Figura 2.2.3 - Cluster Beowulf

           Devido ao fato de clusters Beowulf poderem ser construídos com uma
variedade de componentes de hardware e software distintos, foi proposto em 1998 um
esquema de classificação com o intuito de simplificar as referências sobre o Beowulf e
responder aos diferentes tipos de hardware e software:

Beowulf classe 1:

         Cluster Beowulf de classe 1 são construídos com componentes comuns do
mercado encontrados em pelo menos 3 catálogos nacionais e globais de venda de
componentes.

           As vantagens do cluster Beowulf são:

                Hardware disponível de vários fornecedores (preço baixo, fácil
                manutenção);
                Independência quanto ao fornecedor dos equipamentos;
                Apoio a drivers Linux comuns;
                Normalmente baseado em padrões (SCSI, EIDE, PCI, Ethernet, etc.).

           Desvantagem de um cluster Beowulf classe 1:

                Desempenho inferior ao cluster Beowulf classe 2.


Beowulf classe 2:

           Cluster Beowulf de classe 2 são simplesmente quaisquer máquinas que não
passe no teste de certificação de disponibilidade. Esta classe geralmente oferece maior
desempenho a um custo financeiro maior em relação ao cluster Beowulf classe 1.

           Vantagens:
              Desempenho geralmente maior em relação aos clusters Beowulf classe 1
                                                                                    25
dependendo da configuração (uso de uma LAN de 12 Gb/s só aumentaria
              o desempenho de aplicações altamente acopladas).

          Desvantagens:
             Suporte a drivers de dispositivos variados;
             Dependência de um único fornecedor de hardware;
             Geralmente apresentam um custo financeiro bem mais elevado que os
             Beowulf classe 1.

          Uma classe não necessariamente melhor            que   a   outra   depende
exclusivamente do custo/desempenho que o sistema requer.




                                                                                  26
Invocação Remota de Métodos (RMI)

           A RMI é uma tecnologia desenvolvida pela Sun Microservice, que habilita um
processo que está executando em uma máquina invocar um método de um objeto em
uma máquina remota [HOR01] [DEI01]. Essa tecnologia trata-se de um protocolo que
permite que uma invocação a um método remoto seja feita nos mesmos moldes de uma
chamada local, deixando os detalhes de montagem dos parâmetros e transporte
transparente para o programa de emite a chamada [HOR01] [DEI01]. A figura 2.4.1
mostra a arquitetura básica de um RMI, composta pelo RMIRegistry, o Server e o Client.




Figura 2.4.1   Arquitetura Básica RMI

            A RMI possibilita o desenvolvimento de aplicações distribuídas sem ter
programas sockets explicitamente, ou seja, torna toda a parte de sockets transparente ao
usuário programador. A sua arquitetura é caracterizada pelas camadas de software a
seguir [DEI01]:

      Stub: o stub Java é uma interface entre o processo cliente e o objeto remoto.
      Quando o processo cliente faz uma invocação de um método remoto a camada
      stub é chamada primeiro, que recebe os parâmetros, serializa-os para montar a
      mensagem e os envia para a camada RRL (Remote Reference Layer). A
      serialização de objeto permite que programas em Java possam enviar e receber
      objetos.
      RRL (Remote Reference Layer): a camada RRL recebe os parâmetros, já
      serializados, do stub e através da camada de transporte envia a mensagem
      (parâmetros) para o servidor. A RRL do lado do servidor recebe a mensagem e
      dirige ao Skeleton.
      Skeleton: o skeleton é uma estrutura análoga ao stub cliente, que recebe os
      parâmetros da RRL, de-serializa, identifica o método a ser invocado e faz a
      chamada para esse método. Ao concluir o método, o skeleton serializa o resultado
      e o envia ao cliente através da RRL e o stub.

            Para a implementação de RMI, é necessário que exista uma classe servidor,
na qual está a implementação dos métodos RMI a serem disponibilizados para os
clientes. Ao ser inicializado, o servidor deve se registrar no RMIRegistry para que os
clientes possam utilizar os seus serviços.

            Um cliente RMI, ao tentar executar um método implementado por RMI, faz
uma consulta de nome (lookup) no RMIRegistry e este retorna o endereço IP do servidor
RMI que contém o método que se deseja. Com isso, o cliente pode enviar diretamente os
parâmetros através do stub ao skeleton do servidor que executará a função e retornará o
resultado ao cliente.
                                                                                     27
RMI-Registry

           Para tornar o objeto servidor disponível para as chamadas remotas, eles
devem ser registrados no RMI-Registry. O RMI-Registry é o servidor de nomes padrão na
plataforma Java.

            Quando um nó é acoplado a rede de um sistema distribuído, este informa ao
RMI-Registry o seu endereço de IP e o nome do objeto que estará disponível para
executar as tarefas, de modo que ao solicitar, o cliente obtenha através do RMI-Registry a
localização do servidor e o objeto remoto.


    Cliente                            RMI-Registry                        Servidor
                   2 Requisição da                        1    Registry/
                   Localização                                método


                    3   Localização




               4    Requisição de serviço
                                                      5 - Resposta


                                                                                      REDE
Fig. 2.4.2 Arquitetura de um cluster usando RMI-Registry.

1 O servidor é conectado à rede e/ou o sistema operacional é iniciado, então o sistema
localiza o servidor de nomes ( RMI-Registry) e se registra informando seu IP e o nome do
método que estará disponível para o cliente;

2   O cliente requisita ao RMI-Registry a localização do método que esta necessitando;

3   O RMI-Registry retorna uma resposta com a localização da máquina que tem o
método disponível;

4   O cliente faz uma requisição de serviço ao servidor;

5   O servidor responde à requisição;

Exemplo de programa em RMI

            Abaixo será mostrado um exemplo de utilização do RMI extraído de [MAS04]
            com todos os códigos fontes necessários:

Ola.java (interface)
     /*
      * Esse programa implementa a interface dentro do RMIRegistry
      */

     import java.rmi.*;

     public interface Ola extends Remote{

                                                                                             28
public String getMensagem() throws RemoteException;
     }

OlaImpl.java (implementação do servidor)
     /*
      * Esse programa implementa o servidor RMI
      */

     import java.rmi.*;
     import java.rmi.server.UnicastRemoteObject;

     public class OlaImpl extends UnicastRemoteObject implements Ola{
        public OlaImpl() throws RemoteException{
          super();
        }

             public String getMensagem(){
               return("Ola - Meu primeiro exemplo RMI");
             }

          public static void main(String args[]){
            try{
              OlaImpl obj = new OlaImpl();
              Naming.rebind("localhost/OlaServer",obj);
              System.out.println("Servico registrado. Servidor no ar. Ok!");
            } catch (Exception e){
              System.out.println("Problemas no registro do objeto no servidor");
              System.out.println("Erro:"+e.getMessage());
            }
          }
     }

OlaCliente.java (cliente)
     /*
      * Esse programa implementa um cliente RMI
      */

     import java.rmi.*;

     public class OlaCliente{
       public static void main(String args[]){
         Ola o;
         String msg;
         System.out.println("Cliente no ar... conectando com servidor");

             try{
               o = (Ola)Naming.lookup("localhost/OlaServer");
               msg = o.getMensagem();
               System.out.println("Recebido="+msg);
             } catch (Exception e){
               System.out.println("Problemas ao conectar com servidor");
               System.out.println("Erro:"+e.getMessage());
             }
         }
     }




                                                                                   29
Sistema de Arquivo de Rede (NFS              Network File System)

          O sistema de Arquivo de Rede (NFS) é um padrão de compartilhamento de
arquivo de rede suportado pela maioria das plataformas Linux [DEI05]. Seu
funcionamento se dá através da comunicação entre cliente e servidor.

             Antes de um cliente NFS acessar um arquivo remoto, ele deve usar o
protocolo de montagem (um mecanismo que traduz um endereço de arquivo para um
manipulador de arquivo) para montar o diretório que retém o arquivo remoto. Um
manipulador de arquivo identifica um arquivo remoto por seu tipo, localização e
permissões de acesso. Montar implica em mapear um diretório de arquivo remoto para o
diretório local de um cliente.

             Para montar o sistema de arquivo o cliente NFS faz uma chamada local ao
stub do cliente e ao receber a solicitação de montagem, o skeleton do servidor passa a
chamada ao servidor NFS. O servidor NFS examina o seu local de arquivos e exporta o
diretório local de arquivos que satisfaz a requisição do cliente, o que significa que o
servidor torna o diretório local de arquivos disponível para o cliente. Então o skeleton do
servidor retorna um manipulador de arquivos ao diretório local de arquivo, o que permite
que o cliente acesse remotamente o diretório de arquivos exportado. O cliente remoto usa
esse manipulador de arquivos em todas as requisições subseqüentes de arquivos no
diretório de arquivos exportado.

            O NFS prevê delegações ao cliente para a manipulação de arquivos. Quando
o servidor concede uma delegação de leitura, nenhum outro cliente pode escrever para
aquele arquivo a um cliente. Se um outro cliente requisitar acesso de escrita a um arquivo
com a delegação de leitura ou de escrita ou se o cliente requisita acesso de leitura com
delegação de escrita, o servidor revogará a delegação e requisitará que o cliente original
descarregue o arquivo para o disco.

           Para uma maior segurança na comunicação entre o cliente e o servidor, o
NFS suporta diversos algoritmos de criptografia, usados quando estabelece sessões de
comunicação, criptografando cada requisição. O NFS também oferece uma autenticação
de clientes por meio das chamadas remotas, evitando que clientes não autorizados
acessem os dados.




                                                                                        30
Capítulo 3




      Este capítulo apresenta uma introdução à
      biologia, biologia computacional e aos
      algoritmos       computacionais     para
      comparação de DNAs que serão
      utilizados no projeto.




                                           31
Biologia Computacional

            Segundo Setúbal [SET94], Biologia Computacional pode ser entendida como
sendo a aplicação de técnicas e ferramentas da computação aos problemas da biologia e
entre as diversas áreas da biologia, aquela que a aplicação de técnicas computacionais
tem sido mais necessária é a biologia molecular, em particular na sua interface com a
genética. Ele afirma também que diversas áreas da computação contribuem para o
estudo da biologia molecular, como teoria da computação, através da formulação de
algoritmos para diversos problemas que surgiram recentemente. A teoria e prática de
banco de dados, também se faz necessária, para lidar com enormes massas de
informações oriundas dos avanços em técnicas laboratoriais.

           O objetivo deste capítulo será desenvolver e demonstrar como algumas das
ferramentas computacionais podem auxiliar com o trabalho dos biólogos, como
comparação e similaridade que precisa ser efetuados no DNA. Existem outras aplicações
que são de grande utilidade para a biologia, porem não serão comentada neste trabalho.


Conceitos de Biologia

            As proteínas e ácidos nucléicos são as moléculas fundamentais para todo o
ser vivo. O ácido desoxirribonucléico (DNA) é o constituinte básico dos genes. Os genes
por sua vez, contém todas as informações necessárias para o desenvolvimento desse
organismo. O conjunto de todos os genes de um indivíduo é chamado de genoma. Então,
pode-se dizer que o genoma é a especificação primaria e fundamental de um ser vivo.

            [ROB03] afirma que os genes podem ser analisados sob três ângulos, porem,
para a justificativa desse projeto utilizaremos o ponto de vista molecular, que define o
gene como: a seqüência de DNA que contém a informação necessária para sintetizar uma
molécula de RNA, e a partir dele construir uma proteína. Os Genes são os segmentos
funcionais do DNA e calcula-se que existam cerca de 100.000 genes distribuídos nos 23
pares de cromossomos.

          As proteínas são cadeias de aminoácidos necessárias nos organismos para o
seu bom funcionamento. A falta de alguma proteína no organismo pode causar sérios
problemas e possivelmente a sua morte. Então podemos afirmar que uma mutação nesse
DNA pode causar o comprometimento do organismo.

            Com a aplicação do conhecimento sobre o DNA, poderemos sintetizar novos
remédios a fim de curar ou minimizar os efeitos de doenças até então sem tratamento.
Também a aplicação na engenharia genética como pode ser citado o caso de clonagem
de animais como ovelhas, vacas, cachorros e primatas. Outra área importante que
podemos observar nos tempos modernos é o emprego desse conhecimento na
agricultura, no desenvolvimento de produtos de consumo com maior qualidade, mais
resistentes a pragas e condições do tempo e em maior quantidade para atender a
população que tende ao crescimento.

             Se fossemos capazes de ler um genoma, poderíamos predizer todas as
características que o seu possuidor terá ou será capaz de ter. O problema é que os
genomas são muito extensos, na Tabela 3.1 é demonstrado o tamanho do genoma de
diversas espécies.

Espécie                     Nome Popular     Tamanho total do Genoma(pares de base)
                                                                                     32
Bacteriófago                    vírus                                              5 x 10 4
Escherichia coli              Bactéria                                             5 x 10 6
Saccharomyces cerevisiae     Levedura                                              1 x 10 7
Caenorhaditis elegans          Verme                                               6 x 10 8
Drosophila melanogaster        Mosca                                               2 x 10 8
Homo sapiens                  Homem                                                3 x 10 9
Tabela 3.1: Tamanho do genoma de algumas espécies

            Ao contrário do que muitos pensam, biologia computacional não se resume à
comparação de seqüências ou casamento aproximado de padrões, embora o resultado
deste trabalho seja exatamente isso, porém utilizando um Sistema Distribuído. Existem
diversos outros problemas biológicos nos quais algoritmos da computação são utilizados,
como: união de conjunto disjuntos, ordenação topológica, tabelas de hashing entre outros.
Novos problemas da biologia computacional exigem a criação de novas técnicas e novos
algoritmos que em muitos casos são úteis em outras aplicações.

            Para tal auxílio, não abordaremos temas da biologia molecular e bioquímica,
pois acabaria fugindo do foco, e sim trataremos os dados biológicos como apenas um
alfabeto de 4 letras, sendo elas: A (Adenina), C (Citosina), G (Guanina) e T (Timina).
Essas letras são as bases encontradas no DNA. Dependendo da aplicação que poderá
ser usada após o término deste projeto à base U (uracil) poderá ser utilizada no lugar do T
(Timina) caso seja trabalhado com RNA (ácido ribonucléico), mas para isso será
necessário efetuar modificações na codificação do projeto, que poderá ser feito em
futuros trabalhos.


Comparação de seqüências e Alinhamento

           Segundo Setúbal [SET94], a operação de comparação é a mais básica em
biologia computacional e apresenta duas seqüências de DNA, por exemplo:
GACGGATTAG e GATCGGAATAG. Pode-se notar a semelhança entre as duas
seqüências se as colocarmos alinhadas conforme apresentado abaixo:

                                      GA-CGGATTAG
                                      GATCGGAATAG

           As únicas diferenças são um T a mais na segunda seqüência e uma troca de
A por T na quarta posição da direita para esquerda. Também foi necessário introduzir um
buraco (indicado pelo hífen) na primeira seqüência para que as bases iguais antes e
depois do buraco se alinhassem nas duas seqüências.

           O alinhamento entre as seqüências mostra a similaridade entre elas, ou seja,
poderemos afirmar com um determinado numero (que é a pontuação total do alinhamento
entre as seqüências) quanto uma determinada espécie é similar à outra. No caso deste
projeto, como focaremos apenas essa similaridade, os biólogos poderão utilizar essa
ferramenta para classificação de possíveis espécies novas que forem descobertas.

            Definiremos com base em [SET94], o entendimento do alinhamento. As duas
seqüências não precisam ser do mesmo tamanho e alinhamentos podem conter buracos
em qualquer seqüência. Então um alinhamento é a inserção de buracos em pontos
arbitrários ao longo das seqüências de modo que elas fiquem com o mesmo
comprimento, entretanto um buraco de uma seqüência não pode ser alinhado com um
buraco de outra seqüência e por fim, buracos podem ser colocados tanto no início como

                                                                                        33
no final das seqüências.

           Dado um alinhamento entre duas seqüências, podemos atribuir uma
pontuação, esta pontuação é definida pelo pesquisador da área biológica dependendo de
como ele deseja ponderar a comparação. Neste projeto, utilizaremos como padrão os
mesmos valores ponderados utilizados em [SET94]. Por ex:

            Cada coluna do alinhamento receberá um certo numero de pontos e a
pontuação total do alinhamento será a soma dos pontos atribuídos à suas colunas. Se a
coluna tiver duas bases iguais receberá 1 ponto, se a coluna tiver duas bases diferentes
receberá 1 e finalmente se a coluna possuir uma base e um buraco receberá 2. O
alinhamento ótimo será aquele que tiver pontuação máxima. Esta pontuação máxima
chamaremos de similaridade entre as duas seqüências. Em geral pode haver mais de um
alinhamento com pontuação máxima.

           Por exemplo, a pontuação da seqüência anterior onde nove colunas com
bases iguais, uma coluna com bases desiguais e uma coluna com buraco, então a sua
pontuação é a seguinte:

                                9 * 1 + 1 * (-1) + 1 * (-2) = 6

             Para melhor entendimento do algoritmo que calcula o alinhamento, será
utilizada a seguinte seqüência:
                                       AAAC
                                       AGC

            Para encontrar um alinhamento ótimo para esse par de bases há três
possibilidade relacionadas abaixo:

                                 AAA                       C
                                 AG                        C

                                 AAAC                      -
                                 AG                        C

                                 AAA                       C
                                 AGC                       -

            Com este raciocínio, usaremos um método recursivo para achar o valor de um
alinhamento ótimo, define-se uma função similarity(s1, s2) que corresponde à similaridade
entre s1 e s2

                           Calcule similarity (AAA, AG)           +1
                           Calcule similarity (AAAC, AG)          -2
                           Calcule similarity (AAA, AGC)          -2

           O problema deste método é que se aplicado diretamente, vai gerar um
número exponencial de chamadas recursivas e se cada chamada gera outras três, sendo
em duas delas o número total de caracteres envolvidos juntando as duas seqüências
diminui apenas de um, teremos no mínimo 2 m / n chamadas, onde m e n representam os
comprimentos das seqüências originais.

          Contudo, muitas destas chamadas são redundantes, portanto não há
necessidade de serem calculadas duas vezes, desde que sejam guardadas de maneira

                                                                                      34
que possam ser consultados rapidamente como mostrado na figura 3.2.1.

                                          AAA
                                          AG
                                          C
                                          C


           AA                             AAA                             AA
           A
           A                              CA                              AG
           G                               G                              C


  A        AA        A           AA       AAA      AA            A        AA        A
  A
  A        AA        A           AA       CA       A
                                                   A             A        A
                                                                          A        AG
                                                                                    A
                     G                             G             G        G        C



Figura 3.2.1   Árvore de Chamadas recursivas

           Será utilizada a técnica de programação dinâmica, cuja qual deve-se observar
que embora um método gere um número muito grande de chamadas recursivas, o
numero total de instancias de entrada é limitado, de modo que o calculo pode ser feio
uma só vês e armazenado para consultas posteriores, se necessário. Na maioria dos
casos, uma matriz é usada para guardar resultados parciais.

            Se observarmos as chamadas recursivas, podemos afirmar que o método da
figura 3.2.1 utiliza sempre um prefixo da primeira seqüência e um prefixo da segunda
seqüência. Há m +1 prefixos de s1 e n + 1 prefixos de s2, incluindo os vazios. Dessa
forma, há apenas (m + 1 ) (n + 1) possíveis combinações de argumentos

           Toda a recursão tem seus casos base, e neste determinado problema, os
casos bases são aqueles em que a seqüência vazia é comparada a outra, isto é, o prefixo
vazio de uma seqüência é comparado a um prefixo da outra. Nestes casos, o único
alinhamento possível é colocar-se tantos buracos na seqüência vazia quantos
necessários para igualar o comprimento da outra seqüência, resultando em uma
pontuação de -2k, onde k é o comprimento da outra seqüência.

            A figura 3.2.2 ilustra uma matriz bidimensional usada para a comparação da
seqüência AAAC com AGC. Cada célula contém a pontuação de um alinhamento ótimo
entre prefixos das seqüências dadas. Se chamarmos AAAC de s1 e AGC de s2, e se
convencionarmos que s[1...j] indica o prefixo com tamanho j de s1, então cada célula (i,j)
contem o resultado da comparação de s1[1...i] com s2[1...j]. Na matriz da figura 3.2.2, as
células das bordas superior e esquerda foram inicializadas com -2 vezes a posição da
célula, de acordo com a observação sobre casos base que fizemos anteriormente.




                                                                                        35
A       G             C


                            0              -2       -4            -6



                                       1           -1          -1
                      A     -2              1       -1            -3



                                       1           -1          -1
                      A     -4             -1           0         -2



                                       1           -1          -1
                      A     -6             -3       -2            -1



                                       -1          -1         1
                      C     -8             -5       -4            -1

Figura 3.2.2   Matriz Bidimensional de similaridade entre as seqüências S1 e S2


Uma breve explicação de como foi montada a matriz

            Na matriz da figura 3.2.2, as células das bordas superior (primeira linha) e
esquerda (primeira coluna) foram inicializadas com -2 vezes a posição da célula, de
acordo com a observação sobre casos base que fizemos anteriormente. Ou seja, para as
células da primeira linha fixa o valor do j e calcula-se utilizando o valor de i ficando:

           posição C(1,0), -2*1= -2;
           posição C(2,0), -2*2= -4;
           posição C(3,0), -2*3= -6

             O procedimento foi semelhante às células da primeira coluna, ou seja, fixando
o valor de i e utilizando o valor de j para o calculo, ficando:

           posição C(0,1), -2*1= -2;
           posição C(0,2), -2*2= -4;
           posição C(0,3), -2*3= -6;
           posição C(0,4), -2*4= -8

           Nas células com i=>1 e j =>1 são acrescentados índices, que são calculados
da seguinte forma:

             As células em que o cruzamento das mesmas bases se coincidem, possuem
o índice 1, caso contrario o índice é 1. Então podemos verificar esse método observando
as células C(1,1), C(1,2), C(1,3) e C(3,4) possuem o índice 1 enquanto as demais células
possuem o índice -1. Os valores das células i = j => 1 é definido como o valor máximo

                                                                                       36
entre :
            (i-1,j) + b, ou seja, o valor da célula à esquerda mais b (onde valor de b é -2)
            (i-1,j-1) + índice, ou seja, o valor da célula diagonal esquerda superior mais o
índice da própria célula
            (i,j-1) + b, ou seja, o valor da célula acima mais b (onde valor de b é -2)

         O resultado que possuir o maior valor, será o valor da célula. Podemos
acompanhar esse método a partir da célula (1,1), onde:

           o valor da célula superior (célula (0,1)) é -2 mais o valor de b o resultado é 4;
           o valor da célula diagonal esquerda superior (célula (0,0)) é 0 mais o índice o
           resultado é 1;
           o valor da célula esquerda (célula (1,0)) é -2 mais o valor de b o resultado é -4

           Comparamos e verificamos que o maior resultado obtido pelo método é 1,
portanto o valor desta célula (célula (1,1)) será 1. Prosseguindo com o algoritmo, será
possível calcular tanto a célula abaixo (célula(2,1)) ou a célula à direita (célula(1,2)).
Vamos prosseguir a explicação com o calculo da célula à direita (célula (1,2)):

           o valor da célula superior (célula (0,2)) é -4 mais o valor de b o resultado é 6
           o valor da célula diagonal esquerda superior (célula (0,1)) é -2 mais o índice o
resultado é 3
           o valor da célula esquerda (célula (1,1)) é 1 mais o valor de b o resultado é 1.

           Portanto, o maior valor entre os três comparados é -1, ficando esse o valor da
célula.Agora calcularemos a célula (2,1):

           o valor da célula superior (célula (0,1)) é 1 mais o valor de b o resultado é -1
           o valor da célula diagonal esquerda superior (célula (1,0)) é -2 mais o índice o
           resultado é -1
           o valor da célula esquerda (célula (2,0)) é -4 mais o valor de b o resultado é -6

            Neste caso podemos observar que para esta célula existem duas
possibilidades de valores máximos, que é -1, então este será o valor da célula.

             Agora podemos calcular o valor de três células que podem ser: célula (1,3);
célula(2,2); e célula(1,3)

           É por esse motivo que temos o paralelismo, várias células podem ser
calculadas ao mesmo tempo, porem como as seqüências possuem um tamanho elevado
o projeto será paralelizar blocos de células a serem processadas. Não daremos
continuidade, pois o texto ficaria muito extenso e cansativo.

            As setas que são apresentadas na figura 3.2.2 apontam para as células de
onde foram obtidos os maiores valores como é o caso das células: c(2,1); c(2,3); c(3,1);
c(3,2) e c(4,2). Ou seja, existe mais de uma possibilidade de valor máximo para a célula e
essas setas são utilizadas para verificar o melhor alinhamento entre as duas seqüências.

            Um outro detalhe importante, é que toda seqüência inserida nos algoritmos,
tanto de alinhamento, quanto de similaridade, devem ser validadas antes de começar a
comparação, a validação é feita conforme o algoritmo abaixo:




                                                                                         37
Algoritmo para validação de seqüências de DNA
Descrição:             Verifica se a sequência de DNA é uma sequência válida
Nome do método:        isValid()
Classe a que pertence: DNAString
Atributos do método: Private
Argumentos do          Sequencia de caracteres a ser validada
método:
Retorno do método:     1 se validado, 0 se falhou.
Português estruturado do método isValid():
s1: vetor da seqüência de DNA (vetor de caracteres)
|s1|: número de elementos do vetor da seqüência de DNA (inteiro)
m, i: inteiros

isValid()
            - Supomos |s1| = m.
            para i = 0 a m faça
                       se s1[i] != 'A' ou s1[i] != 'a' então
                                   se s1[i] != 'T' ou s1[i] != 't' então
                                               se s1[i] != 'C' ou s1[i] != 'c' então
                                                           se s1[i] != 'G' ou s1[i] != 'g' então
                                                                        se s1[i] != '-' então
                                                                                    retorna 0;
            retorna 1;



Similaridade distribuída (CGM/BSP)

            Em [SON02], é demonstrado um algoritmo de granularidade grossa chamado
de BSP, que afirma melhorar o desempenho razoavelmente se for implementado em
máquinas paralelas com memória principal distribuída. O Algoritmo BSP consiste em uma
seqüência de várias etapas, separadas por um controle de sincronização. Nessas etapas,
cada processador executa um conjunto de operações independentes que usam dados
locais disponíveis para cada processador no começo da etapa, que consiste também na
comunicação (envio e recebimento de mensagens). N processadores em uma etapa
corresponde a enviar ou receber n mensagens em cada processador.

            Outro algoritmo apresentado por [SON02] é o CGM, onde os processadores
são interconectados por qualquer tipo de conexão e consiste em um conjunto de
execuções enquanto alternam entre processamento local e processamento global (troca
de mensagens). Normalmente durante a execução é utilizado o algoritmo que melhor
processa os dados localmente. O algoritmo CGM é um caso especial do BSP onde todas
as operações de comunicação das etapas são terminadas em n processadores. Estes
algoritmos são apresentados na seção de Algoritmos de alinhamento e similaridade
utilizados neste projeto. Com a implementação deste algoritmo teremos uma ordem de
complexidade de O(mn/p) onde m e n são o tamanho das seqüências e p o numero de
processadores disponíveis e, comparamos esta complexidade através das medidas de
tempo obtidas com os testes de desempenho.

             Para resolver o problema de similaridade sobre o modelo CGM/BSP, divide-se
uma seqüência C de tamanho n(onde C é a segunda seqüência) em p partes, de
tamanhos n/p, e cada processador Pi, 1<=i<=p, recebe a seqüência A e a i-ésima parte de
C (c(i-1) n/p+1...ci n/p).

                 Cada processador Pi computa os elementos Si(r,s) da submatriz Si, onde

                                                                                                   38
1<=r<=i n/p usando apenas 3 elementos pré-computados Si(r-1,s), Si(r-1,s-1), Si(r,s-1),
pois há somente 3 formas de se calcular um alinhamento entre A[1..r] e C[1..s]. Pode-se
alinhar A[1..r] com C[1..s-1] e marcar um espaço com C[s], ou alinhar A[1..r-1] com C[1..s-
1] e marcar A[r] com B[s], ou alinhar A[1..r-1] com C[1..s] e marcar um espaço com A[r].

           Para calcular a submatriz Si, cada processador Pi usa o melhor algoritmo
seqüencial local. É fácil de ver que o processador Pi, i>1, pode somente iniciar a
computação de elementos Si(r,s) após o processador Pi-1 ter computado parte da
submatriz Si-1(r,s).

            Denotado por Rki, 1<=i, k<=p, todos os elementos do limite direito (ultima
coluna a direita) da k-ésima parte da submatriz Si. Mais precisamente, Rki = {Si(r,i n/p),
(k-1)m/p +1<=r<=km/p}.

             A idéia do algoritmo é a seguinte: Após computar a k-ésima parte da
submatriz Si, o processador Pi envia para o processador Pi+1 os elementos de Rki.
Usando Rki, o processador Pi+1 pode computar a k-ésima parte da submatriz Si+1. Após
p-1 turnos, o processador Pp recebe R1p-1 e computa a primeira parte da submatriz Sp.
No turno 2p-2, o processador Pp recebe Rpp-1 e computa a p-ésima parte da submatriz
Sp e finaliza o processamento.




Figura 3.2.3   Comunicação entre as etapas, semelhante ao Scheduling

           Usando esta programação (figura 3.2.3), pode-se ver que na primeira iteração
somente o processador P1 trabalha. Na segunda iteração, os processadores P1 e P2
trabalham. É fácil verificar que na iteração k, todos os processadores Pi trabalham, onde
1<=i<=k.




                                                                                        39
Algoritmos de alinhamento e similaridade utilizados
como base neste projeto

Algoritmo básico do método alignment() da classe DNA
Descrição:                    Traça o alinhamento ótimo entre duas seqüências de DNA utilizando a
                              matriz gerada pelo método similarity()
Nome do método:               alignment()
Classe a que pertence:        DNA
Atributos do método:          Private
Argumentos do método: Inteiro FirstSequenceCount
                              Inteiro SecondSequenceCount
                              Inteiro AuxiliarCount
Retorno do método:            Inteiro AuxiliarCount caso não ocorra erro ou inteiro 0 caso ocorra erro.
Os parâmetros do método alignment() ao ser invocado devem ser:
              FirstSequenceCount: tamanho do vetor da primeira seqüência de DNA;
              SecondSequenceCount: tamanho do vetor da segunda seqüência de DNA;
              AuxiliarCount: indiferente.
Português estruturado do método alignment():
s1: vetor da primeira seqüência de DNA (vetor de caracteres)
s2: vetor da segunda seqüência de DNA (vetor de caracteres)
i: primeiro parâmetro do método, representa o marcador do vetor da primeira seqüência de DNA (inteiro)
j: segundo parâmetro do método, representa o marcador do vetor da segunda seqüência de DNA (inteiro)
t: terceiro parâmetro do método, representa o marcador das seqüências alinhadas (inteiro)
alin1: vetor alinhado da primeira seqüência de DNA inserida. (vetor de caracteres)
alin2: vetor alinhado da segunda seqüência de DNA inserida. (vetor de caracteres)
a: matriz[|s1|][|s2|] que representa o número de similaridades entre a primeira e a segunda seqüências de
       DNA. (matriz de inteiros)
b: custo do buraco vazio (inteiro)
c: Custo de tipos iguais (inteiro)
d: Custo de tipos diferentes (inteiro)

alignment(i,j,t)
              se i = 0 e j = 0 então
                              t    0
              senão           se i > 0 e a[i,j] = a[i-1,j] + b então
                                               alignment(i-1,j,t)
                                               t    t+1
                                               alin1[t]     s1[i-1]
                                               alin2[j]     -
                              senão            se i > 0 e j > 0 e a[i,j] = a[i-1,j-1] + pontuação(i,j) então
                                                                 alignment(i-1,j-1,t)
                                                                 t    t+1
                                                                 alin1[t]   s1[i-1]
                                                                 alin2[j]   s2[j-1]
                                               senão             se j > 0 e a[i,j] = a[i,j-1] + b então
                                                                                  alignment(i,j-1,t)
                                                                                  t    t+1
                                                                                  alin1[t]      -
                                                                                  alin2[j]     s2[j-1]
              retorna t

pontuação(i,j)
             se s1[i] = s2[j] então
                             retorna c
             senão
                             retorna d




                                                                                                               40
Algoritmo básico do método similarity() da classe DNA
Descrição:             Gera a pontuação de um alinhamento ótimo em matriz
Nome do método:        similarity()
Classe a que pertence: DNA
Atributos do método:   Private
Argumentos do método: Nenhum
Retorno do método:     Inteiro 1 caso não ocorra erro ou inteiro 0 caso ocorra erro.
Português estruturado do método similarity():

s1: vetor da primeira seqüência de DNA (vetor de caracteres)
s2: vetor da segunda seqüência de DNA (vetor de caracteres)
|s1|: número de elementos do vetor da primeira seqüência de DNA (inteiro)
|s2|: número de elementos do vetor da segunda seqüência de DNA (inteiro)
a: matriz[|s1|][|s2|] que representa o número de similaridades entre a primeira e a segunda seqüências de
    DNA. (matriz de inteiros)
b: custo do buraco vazio (inteiro)
c: Custo de tipos iguais (inteiro)
d: Custo de tipos diferentes (inteiro)
m, n, i, j, valor1, valor2, valor3: inteiros

similarity()
               - Supomos |s1| = m e |s2| = n.
               para i 0 a m faça
                            a[i,0]   i*b
               para j 0 a n faça
                            a[j,0]   j*b
               para i 0 a m faça
                            para j    0 a n faça
                                           a[i,j]   maximo(a[i-1,j] + b,
                                                                           a[i-1,j-1] + pontuação(i,j),
                                                                           a[i,j-1] + b)
               retorna a[m,n]

pontuação(i,j)
             se s1[i] = s2[j] então
                             retorna c
             senão
                             retorna d

maximo(valor1, valor2, valor3)
           se valor1 > valor2 e valor1 > valor3 então
                          retorna valor1
           senão          se valor2 > valor3 então
                                         retorna valor2
                          senão
                                         retorna valor3




                                                                                                            41
Algoritmo básico do método CGM/BSP() da classe DNA
Descrição:             Gera a pontuação de um alinhamento ótimo de forma distribuída
Nome do método:        CGM/BSP()
Classe a que pertence: DNA
Atributos do método: Public
Argumentos do          Nenhum
método:
Retorno do método:     Fragmento da matriz de alinhamento.
Português estruturado do método CGM/BSP():
s1: vetor da primeira seqüência de DNA (vetor de caracteres)
s2: vetor da segunda seqüência de DNA (vetor de caracteres)
|s1|: número de elementos do vetor da primeira seqüência de DNA (inteiro)
|s2|: número de elementos do vetor da segunda seqüência de DNA (inteiro)
a: matriz[|s1|][|s2|] que representa o número de similaridades entre a primeira e a segunda seqüências de
DNA. (matriz de inteiros)
b: custo do buraco vazio (inteiro)
c: Custo de tipos iguais (inteiro)
d: Custo de tipos diferentes (inteiro)
p: número de processadores
k, r, s, i, j, m, n, valor1, valor2, valor3: inteiros

CGM/BSP()
       - Supomos |s1| = m e |s2| = n.
       para k = 1 a p faça
                 se i = 1 então
                            para r = ((k-1)*m/p)+1 a k*m/p e s = 1 a n/p faça
                                       a[i,j] = maximo(a[i-1,j] + b,
                                                    a[i-1,j-1] + pontuação(i,j),
                                                    a[i,j-1] + b)
                            enviar (Matriz k de i, processador i+1);
                 se i != 0 então
                            receber (Matriz k de i-1, processador p-1);
                            para r = ((k-1)*m/p)+1 a k*m/p e s= 1 a n/p faça
                                       a[i,j] = maximo(a[i-1,j] + b,
                                                    a[i-1,j-1] + pontuação(i,j),
                                                    a[i,j-1] + b)
                            se i != p então
                                       enviar(Matriz k de i, processador i+1);

pontuação(i,j)
        se s1[i] = s2[j] então
                    retorna c
        senão
                    retorna d

maximo(valor1, valor2, valor3)
        se valor1 > valor2 e valor1 > valor3 então
                  retorna valor1
        senão     se valor2 > valor3 então
                             retorna valor2
                  senão
                             retorna valor3




                                                                                                            42
Capítulo 4




      Neste capítulo será apresentada a
      documentação do projeto. Assim sendo,
      através deste conteúdo pretende-se
      passar uma visão clara e objetiva da
      proposta e do funcionamento do cluster
      para processamento de comparação de
      seqüências de DNA utilizando algoritmos
      computacionais paralelizáveis.




                                          43
Especificações do projeto

           Este capítulo tratará de toda a especificação e o desenvolvimento do projeto.
Sendo assim, antes de começar a documentação UML, serão introduzidos alguns
conceitos abordados nesse projeto em conjunto com suas especificações.


Conceitualização do projeto

            Esse projeto tem como objetivo a implementação de um sistema distribuído
clusterizado baseado no algoritmo CGM/BSP, no qual operará através de uma máquina
principal denominada Gerenciador (Manager) ou servidor do sistema. Este gerenciador,
como o próprio nome sugere, gerenciará as requisições de comparação de seqüências
entre os outros nós da rede, também chamados de Executores. Os Executores possuem
uma identificação que lhes é atribuída pelo Gerenciador ao se conectarem ao cluster.

            O cluster terá a função de comparar uma determinada seqüência de DNA,
denominada DNA principal, com uma ou mais outras seqüências de DNA, denominadas
de DNA secundário(s). Assim, após concluir a comparação, será gravado o grau de
similaridade entre as seqüências comparadas em um banco de dados para futuras
consultas. Para essa comparação, como visto no capitulo 3, será utilizada uma matriz de
similaridade, a qual indicará o grau de similaridade entre as seqüências.

           O sistema possuirá apenas uma máquina gerenciadora para controle das
requisições de comparação e para o armazenamento do repositório de dados, além de
máquinas Executoras para realizar a comparação.

            Sempre que algum Executor for inserido no cluster, ele envia uma solicitação
de inserção ao Gerenciador que verifica a quantidade de executores ativos e retorna ao
Executor o número de registro imediatamente superior ao do último executor pré-
registrado, e este passa a ser o último Executor (a posição de último executor é
importante para a propagação de requisições de configuração e comparação, como será
descrito posteriormente neste capítulo).

            Ao receber alguma solicitação para comparação de similaridade entre duas
seqüências de DNA, o Gerenciador envia a identificação (ID) de cada uma das
seqüências de DNA junto aos parâmetros de ponderação (pesos para bases iguais, bases
diferentes e inserção de lacunas) ao último Executor, e este envia solicitação ao Executor
imediatamente anterior e assim sucessivamente em cascata, até o Executor 0. O
Executor 0, ao receber a solicitação, inicializa a comparação e envia sua resposta ao
Executor imediatamente superior, que também compara e envia sua resposta. Essa
seqüência de ações cascateadas ocorrerão até o cálculo completo das seqüências de
DNAs. Ao terminar de processar a comparação, o último Executor envia a resposta da
comparação ao Gerenciador que se encarrega de gravá-la no repositório de dados.


Modularização e divisão de responsabilidades

           Essa sessão descreverá os módulos existentes no projeto, assim as iterações
que eles realizam com os outros módulos do sistema. O projeto do cluster foi dividido em
quatro grandes módulos, que serão chamados aqui de Interface Web, Gerenciador,
Executor, e ClusterKnoppix. Cada módulo será tratado de forma separada e exclusiva,

                                                                                       44
após a descrição de todos os módulos, será mostrada a integração entre eles.

Módulo Interface Web

          Este módulo tratará da interface com o usuário, além de possuir ferramentas
para a manipulação de dados no repositório de dados. Suas principais funcionalidades
são:
             Manipulação de inserção, modificação e remoção de registros de
             seqüências de DNA no repositório de dados.
             Tela para listagem das seqüências que já foram comparadas.
             Tela para listagem das seqüências que ainda não foram comparadas, com
             a possibilidade envio de requisição para comparação.

          Na tela de listagem das seqüências comparadas, ao escolher uma seqüência
de DNA (o DNA principal), haverá uma lista que exibirá todas as outras seqüências de
DNAs (DNAs secundários) que já foram comparadas com o DNA escolhido. Nesta lista
também será exibida a pontuação e o valor dos pesos de bases e lacuna escolhidos.

           Na tela de listagem das seqüências que ainda não foram comparadas, ao
escolher uma seqüência de DNA (o DNA principal), uma lista exibirá todas as outras
seqüências de DNA que ainda não foram comparadas com o DNA escolhido. Nessa tela
haverá um botão para o envio de solicitações de comparação (esse botão é uma interface
applet que enviará as solicitações ao Gerenciador).

            O módulo de Interface Web será implementado em PHP sendo executado em
um servidor Apache instalado na mesma máquina do repositório de dados, porém, há
possibilidade de instalá-lo em qualquer outra máquina que tenha serviço de servidor de
Web com suporte a PHP e Java (caso precise executar o applet).


Módulo Gerenciador

             Este módulo é o responsável pelo controle inserções de Executores no
cluster, pelo controle de pedidos de comparação de DNAs e pela gravação dos resultados
dessas comparações no repositório de dados.

             Ao receber o endereço IP de um Executor solicitando registro no cluster, o
Gerenciador verifica na lista de Executores válidos o números dos executores registrados
e retorna ao Executor solicitante um número imediatamente posterior ao número do último
executor registrado. Após isso, o Gerenciador insere o IP e o número do novo Executor
na lista de Executores e o Executor se registra no RMIRegistry com o número recebido.

            Ao receber algum pedido de comparação de DNA, o Gerenciador o insere em
uma fila de requisições. Caso os Executores não estejam comparando nenhuma outra
requisição, o Gerenciador envia a requisição ao último Executor da lista de executores
para começar a comparação. Ao terminar a comparação, o Gerenciador recebe a
resposta do último Executor, remove a requisição da fila de requisições e grava o valor da
comparação e dos pesos no repositório de dados.


Módulo Executor

           Este módulo é o responsável pela execução do algoritmo CGM/BSP para o

                                                                                       45
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster
Tcc Bio Cluster

Mais conteúdo relacionado

Semelhante a Tcc Bio Cluster

Intro redes
Intro redesIntro redes
Intro redesTiago
 
Jspservlets
JspservletsJspservlets
JspservletsTiago
 
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosDissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosJuliana Chahoud
 
Python gtk
Python gtkPython gtk
Python gtkTiago
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cppTiago
 
Postfix
PostfixPostfix
PostfixTiago
 
sistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdfsistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdfJoelManuel8
 
DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216Valter Inacio Jr.
 
Iptables
IptablesIptables
IptablesTiago
 
Linguagem c
Linguagem cLinguagem c
Linguagem cTiago
 
Microsoft redes introdução
Microsoft redes   introduçãoMicrosoft redes   introdução
Microsoft redes introduçãoJoão Dias
 
Um Modelo de Segurança de Redes para Ambientes Cooperativo
Um Modelo de Segurança de Redes para Ambientes CooperativoUm Modelo de Segurança de Redes para Ambientes Cooperativo
Um Modelo de Segurança de Redes para Ambientes CooperativoSoftD Abreu
 
Monitoramento
MonitoramentoMonitoramento
MonitoramentoTiago
 
Nessus
NessusNessus
NessusTiago
 
Javascript
JavascriptJavascript
JavascriptTiago
 
2007 alexandre rodriguesgomes
2007 alexandre rodriguesgomes2007 alexandre rodriguesgomes
2007 alexandre rodriguesgomesAdemar Trindade
 

Semelhante a Tcc Bio Cluster (20)

Intro redes
Intro redesIntro redes
Intro redes
 
Jspservlets
JspservletsJspservlets
Jspservlets
 
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosDissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
 
Python gtk
Python gtkPython gtk
Python gtk
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cpp
 
Postfix
PostfixPostfix
Postfix
 
sistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdfsistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdf
 
DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216
 
Iptables
IptablesIptables
Iptables
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
monografia_andre_paro
monografia_andre_paromonografia_andre_paro
monografia_andre_paro
 
Squid
SquidSquid
Squid
 
Microsoft redes introdução
Microsoft redes   introduçãoMicrosoft redes   introdução
Microsoft redes introdução
 
Zope
ZopeZope
Zope
 
Um Modelo de Segurança de Redes para Ambientes Cooperativo
Um Modelo de Segurança de Redes para Ambientes CooperativoUm Modelo de Segurança de Redes para Ambientes Cooperativo
Um Modelo de Segurança de Redes para Ambientes Cooperativo
 
Monitoramento
MonitoramentoMonitoramento
Monitoramento
 
Samba
SambaSamba
Samba
 
Nessus
NessusNessus
Nessus
 
Javascript
JavascriptJavascript
Javascript
 
2007 alexandre rodriguesgomes
2007 alexandre rodriguesgomes2007 alexandre rodriguesgomes
2007 alexandre rodriguesgomes
 

Último

M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxJustinoTeixeira1
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfJuliana Barbosa
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubeladrianaguedesbatista
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdLeonardoDeOliveiraLu2
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...azulassessoria9
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaCentro Jacques Delors
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.denisecompasso2
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º anoRachel Facundo
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfAutonoma
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Centro Jacques Delors
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa paraAndreaPassosMascaren
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasrfmbrandao
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docPauloHenriqueGarciaM
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...azulassessoria9
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)Centro Jacques Delors
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticash5kpmr7w7
 

Último (20)

M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturas
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 

Tcc Bio Cluster

  • 1. Jean Rodrigo dos Santos Rafael Caetano Pinto Valdemárcio Fernandes dos Santos BioCluster Comparação de Seqüências de DNA em Sistemas Distribuídos Clusterizados Osasco Dezembro de 2005
  • 2. Jean Rodrigo dos Santos Rafael Caetano Pinto Valdemárcio Fernandes dos Santos BioCluster Comparação de Seqüências de DNA em Sistemas Distribuídos Clusterizados Trabalho de Conclusão de Curso para o curso de Engenharia de Computação do Centro Universitário FIEO como requisito parcial para a obtenção do título de bacharel em Engenharia de Computação. Orientadores: Prof. Antonio Fernando Nunes Guardado Prof. Francisco Isidro Massetto Osasco Dezembro de 2005 2
  • 3. Persevera na tua determinação. 3
  • 4. Agradecemos às pessoas abaixo que contribuíram para a conclusão desse projeto: Antonio Fernando Nunes Guardado, Celso Silva, Gabriela M. de Azevedo Souza, Jean M. Laine, Jonas Santiago de Oliveira, Maisa Barros de Oliveira, Maria Clara de Carvalho Silva, Martin R. Whittle, Paulo Cunha, Pedro Rosa, Sidney da Silva Viana. Em especial, agradecemos a Francisco Isidro Massetto, pois sem sua ajuda e boa vontade, esse projeto não seria possível. iv 4
  • 5. Resumo Esse projeto visa a construção e a configuração de um Sistema Distribuído aplicado para a comparação de seqüências de DNA. Será mostrada neste trabalho toda a especificação necessária para a construção e implementação do mesmo. Um dos objetivos principais abordados nesse trabalho é a preocupação na elaboração de uma solução menos custosa financeiramente em relação aos Sistemas Centralizados Proprietários sem que haja uma queda significativa no desempenho da aplicação. Para se alcançar esse objetivo, será utilizada uma estrutura de rede FastEthernet e alguns micro-computadores interconectados sobre o protocolo TPC/IP. Como exemplo para a implementação deste sistema clusterizado, foi escolhido o algoritmo CGM/BSP de similaridade de seqüências, devido ao fato de que nessa aplicação, dependendo do conjunto de dados a se comparar, é necessário um alto poder computacional para se realizar a comparação entre seqüências. Palavras-chave: Cluster. DNA. RMI. Sistemas Distribuídos. v 5
  • 6. Abstract This project aims the construction and the configuration of a Distributed System suitable for a DNA sequences comparation. All specifications needed for its construction and implementation will be shown at this project. One of the main subjects approached at this work is the concern about a cheaper solution elaboration in relation to an Owner Centralized Systems without a deep fall on the application s performance. A basic net structure with one switch and a few personal computers interconnected using the TPC/IP protocol will be created to reach the subject of this project. As an example for the clustered system implementation, a comparative between DNA s has been chosen, due to the needed of a high computational power, in order to carry this comparison out between sequences, although it can depend on the data group to be compared. Keywords: Cluster. DNA. RMI. Distributed Systems. vi 6
  • 7. Sumário v Resumo ................................................................................................................................. 5 vi Abstract ................................................................................................................................. 6 Sumário ................................................................................................................................. 7 Capítulo 1 ............................................................................................................................ 10 Objetivos.......................................................................................................................... 11 Justificativa ...................................................................................................................... 12 Metodologia ..................................................................................................................... 13 Capítulo 2 ............................................................................................................................ 14 Introdução a Sistemas Distribuídos................................................................................. 15 Comparação dos Sistemas Distribuídos com os Sistemas Centralizados.................. 15 Mudança de paradigma de programação ................................................................ 17 Modelo Cliente-Servidor .............................................................................................. 17 Simplicidade ............................................................................................................. 18 Baixa taxa de overhead na rede .............................................................................. 18 Níveis de protocolos................................................................................................. 18 Bloqueadas ou não-bloqueadas .............................................................................. 18 Bufferizadas e não-bufferizadas .............................................................................. 19 Confiáveis e não-confiáveis ..................................................................................... 19 Clusters............................................................................................................................ 19 Características de um Cluster ..................................................................................... 19 Alto desempenho ..................................................................................................... 19 Escalabilidade .......................................................................................................... 20 Confiabilidade e tolerância à falha ........................................................................... 20 Alta disponibilidade .................................................................................................. 20 Independência.......................................................................................................... 20 Transparência .......................................................................................................... 21 Comunicação entre processos no Cluster................................................................... 22 Cluster Homogêneo e Heterogêneo ............................................................................ 23 Tipos de Cluster........................................................................................................... 24 Cluster de Alto Desempenho ................................................................................... 24 Clusters de Alta Disponibilidade .............................................................................. 24 Clusters de Balanceamento de Cargas ................................................................... 24 Exemplos de Clusters .............................................................................................. 24 Cluster Beowulf..................................................................................................... 24 Invocação Remota de Métodos (RMI) ......................................................................... 27 RMI-Registry.................................................................................................................... 28 Exemplo de programa em RMI ................................................................................ 28 Ola.java (interface) ............................................................................................... 28 OlaImpl.java (implementação do servidor)........................................................... 29 OlaCliente.java (cliente) ....................................................................................... 29 Sistema de Arquivo de Rede (NFS Network File System) ....................................... 30 Capítulo 3 ............................................................................................................................ 31 Biologia Computacional................................................................................................... 32 Conceitos de Biologia .................................................................................................. 32 Comparação de seqüências e Alinhamento................................................................ 33 Uma breve explicação de como foi montada a matriz............................................. 36 7
  • 8. Algoritmo para validação de sequências de DNA ....................................................... 38 Similaridade distribuída (CGM/BSP) ........................................................................... 38 Algoritmos de alinhamento e similaridade utilizados como base neste projeto.............. 40 Algoritmo básico do método alignment() da classe DNA ............................................ 40 Algoritmo básico do método similarity() da classe DNA.............................................. 41 Algoritmo básico do método CGM/BSP() da classe DNA ........................................... 42 Capítulo 4 ............................................................................................................................ 43 Especificações do projeto................................................................................................ 44 Conceitualização do projeto ........................................................................................ 44 Modularização e divisão de responsabilidades ........................................................... 44 Módulo Interface Web .............................................................................................. 45 Módulo Gerenciador................................................................................................. 45 Módulo Executor ...................................................................................................... 45 Estratégia de Comparação CGM/BSP utilizando RMI ......................................... 46 Módulo ClusterKnoppix ............................................................................................ 48 Especificações do sistema........................................................................................... 49 Rede ......................................................................................................................... 49 Características dos nós do sistema ......................................................................... 49 Armazenamento dos dados ..................................................................................... 49 Sistema Operacional ................................................................................................ 50 Linguagem de programação .................................................................................... 50 Pacote para aplicação de computação distribuída .................................................. 50 Características do Cluster ........................................................................................ 50 Tratamento de erros................................................................................................. 52 Testes....................................................................................................................... 52 Casos de Uso .................................................................................................................. 54 Caso de Uso Nv0 Sistema distribuído clusterizado para comparação de seqüências de DNA......................................................................................................................... 55 Caso de Uso Nv1 Funcionalidades Gerais............................................................... 56 Caso de Uso Nv2a - Comparar Seqüências de DNA.................................................. 57 Caso de Uso Nv2b - Inserir nova máquina no sistema ............................................... 59 Caso de Uso Nv2c - Inserir seqüência de DNA no banco de dados .......................... 60 Caso de Uso Nv2d - Remover seqüência de DNA do banco de dados...................... 61 Caso de Uso Nv2e Inicializar sistema distribuído .................................................... 62 Diagrama de Classes ...................................................................................................... 63 Parte 1.......................................................................................................................... 63 Parte 2.......................................................................................................................... 64 Diagramas de Seqüência ................................................................................................ 65 Inicialização do Executor ............................................................................................. 65 Inicialização do Gerenciador ....................................................................................... 66 Comparando DNA: Visão do módulo ClusterInterface................................................ 67 Comparando DNA: Visão do módulo Gerenciador ......................................................... 68 Comparando DNA: Visão do módulo Executor: Primeiro Executor ................................ 69 Comparando DNA: Visão do módulo Executor: Executores centrais............................. 70 Comparando DNA: Visão do módulo Executor: Último Executor ................................... 71 Diagramas de Transição de Estado ................................................................................ 72 Executor ....................................................................................................................... 72 Gerenciador ................................................................................................................. 72 Diagramas de Atividade .................................................................................................. 73 Método Similarity ......................................................................................................... 73 Método CGM/BSP ....................................................................................................... 74 Banco de dados............................................................................................................... 75 Diagrama Entidade Relacionamento ........................................................................... 75 8
  • 9. Domínios .................................................................................................................. 75 Modelo do Banco de dados ......................................................................................... 75 Dicionário de dados ..................................................................................................... 75 tbldna........................................................................................................................ 75 tblrelaction ................................................................................................................ 76 Script de criação de tabelas ........................................................................................ 76 Tabela tblDNA .......................................................................................................... 76 Tabela tblRelaction................................................................................................... 76 Arquivo de configuração do MySQL ............................................................................ 76 Interface do Sistema........................................................................................................ 79 Arquitetura da interface:............................................................................................... 79 Interface Web............................................................................................................... 79 Estrutura de comunicação da interface Web............................................................... 80 Evento na página "Tela Principal": Entrada ............................................................. 80 Evento na página "Tela Principal": Clique em Comparar ........................................ 80 Evento na página "Relacionamento": Clique em Pesquisar .................................... 80 Evento na página "Relacionamento": Clique em Relacionar................................... 80 Capítulo 5 ............................................................................................................................ 81 Caracteristicas do Ambiente............................................................................................ 82 Configurações fisicas:.................................................................................................. 82 Máquinas: ................................................................................................................. 82 Rede: ........................................................................................................................ 82 Configurações lógicas:................................................................................................. 82 Máquina Gerenciadora:............................................................................................ 82 Máquina do Repositório de dados: .......................................................................... 82 Máquinas Executoras:.............................................................................................. 82 Metodologia.................................................................................................................. 83 Conclusão ........................................................................................................................... 89 Recomendações para projetos futuros ............................................................................... 90 Referências ......................................................................................................................... 91 Anexo A Implementação do ClusterKnoppix ................................................................... 93 Planejamento................................................................................................................... 93 Instalação ........................................................................................................................ 94 BOOT Remoto ................................................................................................................. 95 Aplicação ....................................................................................................................... 101 Resultados..................................................................................................................... 102 Customização ................................................................................................................ 103 9
  • 10. Capítulo 1 Esse capítulo preza a contextualização do projeto, nele serão definidos a justificativa, os objetivos e a metodologia utilizada no desenvolvimento deste trabalho. 10
  • 11. Objetivos Elaborar o projeto de um Sistema Distribuído Clusterizado utilizando algoritmos paralelizáveis existentes para uma aplicação específica e assim, testar o funcionamento desta plataforma distribuída. Utilizaremos como aplicação o sequenciamento físico de DNA devido a suas características escaláveis e paralelizáveis. Dessa forma poderemos analisar o comportamento do Sistema Distribuído em uma aplicação mediante alterações de configuração com a finalidade de otimizar o processamento como um todo. Obtendo assim, um desempenho no mínimo satisfatório (um desempenho semelhante ao de um sistema centralizado em uma máquina mono-processada com as mesmas características das máquinas utilizadas no cluster). Os principais objetivos a serem alcançados no projeto são: Escalabilidade Incluir ou retirar máquinas do sistema facilmente de forma a manter o sistema escalável conforme a necessidade de desempenho da aplicação; Custo Objetiva-se utilizar microcomputadores padrão IBM - PC e uma rede LAN Fast Ethernet TCP/IP por serem mais acessíveis economicamente. Também é decisão de projeto a utilização de uma linguagem multiplataforma (Java) de modo que se obtenha mais versatilidade, minimizando as limitações ocasionadas pelo uso de sistemas operacionais proprietários que geralmente possuem custo elevado. Acessibilidade Será desenvolvido um sistema de código aberto que seja economicamente viável em comparação às tecnologias centralizadas proprietárias. Desempenho Em um primeiro estágio do projeto, o objetivo é de se projetar um sistema clusterizado com desempenho comparável ao de um sistema centralizado mono-processado. Atingido esse objetivo primário, serão verificadas novas alternativas de projeto para melhorar o desempenho do sistema. 11
  • 12. Justificativa Em função do crescente desenvolvimento de Sistemas Distribuídos, impulsionado pela demanda de alto poder computacional, explorar seus recursos torna-se cada vez mais imprescindível [ERA04]. Com base nesta afirmação, e pelo objetivo de obter um sistema de baixo custo financeiro, este projeto se destina à construção de um cluster para executar tarefas que requeiram um alto poder computacional. Um cluster é um sistema de processamento paralelo alternativo, que apresenta um desempenho computacional análogo aos sistemas centralizados. Uso de clusters nas soluções de determinados projetos, tais como processamento de imagens ou de massas de dados, torna-se economicamente mais viável que em sistemas centralizados, mantendo um desempenho igual ou superior dependendo da implementação. Neste projeto, será implementado e testado o algoritmo CGM/BSP, que é uma versão paralela para um algoritmo que compara graus de similaridade entre seqüências de genes. Para uma maior compreensão sobre o assunto, primeiramente será apresentada uma introdução aos conceitos básicos de sistemas distribuídos e clusters, assim como uma breve abordagem dos conceitos da biologia e das aplicações da computação na área biológica, inclusive com os algoritmos para sequenciamento e comparação de DNA, assim como o algoritmo CGM/BSP, que é a base deste trabalho. Todas as etapas de evolução do projeto, tais como contextualização, especificações, modelagens, desenvolvimento e fase de testes serão documentadas. Há a preocupação inclusive em documentar alguns tratamentos de falhas que podem ser interessantes para desenvolvimentos futuros. 12
  • 13. Metodologia Como metodologia abordada, será adotado basicamente o Modelo em Espiral, também denominado por vários autores como Modelo Evolutivo, em que a cada etapa concluída repete-se o processo de averiguação por meio de protótipos para o aperfeiçoamento do projeto. Para a documentação, será adotado o conceito de Orientação a Objetos, que melhor atende aos requisitos do projeto uma vez que será utilizada uma linguagem orientada a objeto (Java). Portanto, utilizar-se-á dos padrões da linguagem UML. 13
  • 14. Capítulo 2 Esse capítulo objetiva apresentar a introdução conceitual sobre sistemas distribuídos, modelos de comunicação, clusters e suas aplicações. 14
  • 15. Introdução a Sistemas Distribuídos Neste projeto, a definição de sistema distribuído será uma combinação de ambas as definições, ou seja, um sistema distribuído é um agrupamento de computadores que se apresenta ao usuário como um sistema único, compartilhando recursos. Desta forma, o Sistema Distribuído apresenta muitas diferenças em relação a um sistema centralizado. Desde 1945 quando se iniciou a era da computação moderna, os computadores têm sofrido grandes transformações tecnológicas [TAN95]. Durante o período de 1945 a 1980, a necessidade de compartilhar informações era praticamente nula e devido ao pequeno número de computadores nas organizações, as quais muitas faziam uso somente de um computador, quase sempre mainframes. A necessidade de comunicação foi se intensificando a medida que os computadores foram se tornando mais acessíveis financeiramente, passando a aparecer no cenário empresarial (comercial/industrial) tornando-se umas das principais ferramentas da indústria. Para sanar a deficiência da comunicação, foram desenvolvidas nos anos 80, as redes locais de alta velocidade (LAN). Tais tipos de redes em conjunto com os avanços tecnológicos dos microcomputadores, culminaram no desenvolvimento dos sistemas distribuídos. Diferentes autores definem de maneira distinta o conceito de sistema distribuído. Segundo Tanembaum [TAN95], Sistemas Distribuídos são definidos como uma coleção de computadores independentes que se apresentam ao usuário como um sistema único e consistente . Já Couloris [COU01] define sistema distribuído como sendo uma coleção de computadores autônomos interligados através de uma rede de computadores e equipados com software que permita o compartilhamento dos recursos dos sistemas: hardware, software e dados . Neste projeto, a definição de sistema distribuído será uma combinação de ambas as definições, ou seja, um sistema distribuído é um agrupamento de computadores que se apresenta ao usuário como um sistema único, compartilhando recursos. Desta forma, o Sistema Distribuído apresenta muitas diferenças em relação a um sistema centralizado. Comparação dos Sistemas Distribuídos com os Sistemas Centralizados Atualmente instituições acadêmicas e industriais de modo geral, vêm desenvolvendo aplicações que exigem cada vez mais um alto poder computacional. Entretanto o custo para adquirir tais máquinas com essa característica é extremamente alto em muitos casos proibitivos, fazendo com que essas organizações migrem para outras alternativas. Uma saída encontrada por especialistas para esse problema foi uma arquitetura de "Sistema Distribuído", que consiste em um aglomerado de microcomputadores mono ou multiprocessados e que executam uma tarefa como se fosse um único sistema. Enquanto que em um Sistema Centralizado, uma aplicação é executada por um ou vários processadores localizados em um mesmo computador, um Sistema distribuído conte com um certo número de nós (computadores conectado em uma rede 15
  • 16. comum) onde cada um deles executa uma aplicação ou parte dela. Em um Sistema Centralizado existem limitações que torna os Sistema distribuídos potencialmente superiores em poder computacional. Por exemplo, um Sistema Centralizado é limitado em espaço físico não podendo comportar muitos processadores numa mesma placa mãe, enquanto que a escalabilidade de um Sistema distribuído o permite a superar a quantidade de processadores em um Sistema Centralizado. Outra vantagem é o uso da memória (principal) em um Sistema Centralizado multiprocessado, pois as tarefas precisam entrar em uma fila para o uso da memória principal, ao passo que nos Sistemas Distribuídos, cada nó conta com a sua própria memória para uso independente das aplicações. Entre as vantagens de um Sistema Distribuído em relação a um Sistema Centralizado pode-se citar [Tanenbaum]: - Custo: o valor financeiro para implementação de um Sistema distribuído é geralmente muito inferior ao valor de um Sistema Centralizado com um poder computacional equivalente, e utilizando um sistema Open Source e linguagem de programação Java, por ser livre e gratuito, no que diz respeito a Softwares, não existe despesas com Licenças; - Desempenho: Sistema com altíssimo índice de processamento, tais como o Blue Gene (www.top500.org) são capazes de processar 280600 Gflops (consultada em 13/12/2005), tal capacidade atualmente só é possível em plataformas distribuídas; - Tolerância a Falhas: Um Sistema distribuído pode contar com algoritmos que detectam a falha em um nó e redirecione as tarefas a serem executadas para outro nó. Dessa forma a capacidade de índices de confiabilidade de um Sistema distribuído é superior a um Sistema Centralizado; - Flexibilidade: os recursos oferecidos por um nó podem ser migrados para outros nós, mantendo assim uma redundância dos recursos e maior disponibilidade dos serviços; - Escalabilidade: é a característica de um Sistema distribuído tem de acoplar mais computadores à sua rede mantendo a estabilidade e aumentando a eficácia do Sistema. Entretanto, há desvantagens, que alguns autores consideram desafios, tais como: - Transparência: um dos objetivos é manter oculto os aspectos distribuídos dos usuários do Sistema. O acesso a arquivos distribuídos por diversos computadores remotos não deve ser diferente a um acesso a arquivos locais. Um usuário deve poder acessar arquivos do Sistema sem precisar saber de sua localização ou comunicação entre processos; - Segurança: é muito difícil estabelecer um protocolo de segurança eficiente para Sistemas Distribuídos, pois todos os nós possuem acessos entre eles, então algoritmos de segurança para garantir a integridade dos dados devem ser implementados; - Viabilidade: nem todos as aplicações que executam de maneira eficiente 16
  • 17. em um Sistema Centralizado irão executar na mesma maneira em um Sistema distribuído. Deve-se verificar se os algoritmos das aplicações são paralelizáveis, pois um Sistema distribuído só é viável se suas aplicações permitirem que sejam fragmentadas e distribuídas entre os nós. Para esse projeto, a viabilidade do uso de um Sistema distribuído ao invés de um Sistema Centralizado se dá através das vantagens já apresentadas neste capítulo. Justificamos o uso pelo propósito da pretensão de utilizar um sistema robusto para manipular uma grande quantidade de dados e que apresente um baixo custo financeiro em relação aos sistemas mono-processados. Assim, utilizando técnicas de fragmentação de dados e paralelização da aplicação, uma implementação distribuída tende a obter resposta satisfatórias para o nosso intento. Mudança de paradigma de programação Uma das dificuldades que envolve a implementação de um Sistema Distribuído é o paradigma da programação distribuída. Programação distribuída prevê as chamadas de métodos localizados em máquinas diferentes através da troca de mensagens e sincronização. As trocas de mensagens são realizadas através de algoritmos que fazem uso de primitivas como send e receive, essas primitivas podem ser organizadas de forma síncronas ou assíncronas. O que difere uma da outra é o grau de dificuldade que as primitivas assíncronas exigem na implementação de algoritmos de armazenamento de mensagens e temporização. Quando um cliente faz uma requisição a um servidor este pode não estar pronto para receber a mensagem enviada. Para que a mensagem não seja perdida, podem ser implementado algoritmos de armazenamento de mensagens (mail-box). Para esse projeto, a viabilidade do uso de um Sistema distribuído ao invés de um Sistema Centralizado se dá através das vantagens já apresentadas neste capítulo. Justificamos o uso pelo propósito da pretensão de utilizar um sistema robusto para manipular uma grande quantidade de dados e que apresente um baixo custo financeiro em relação aos Sistemas Centralizados. Assim, utilizando técnicas de fragmentação de dados e paralelização da aplicação, uma implementação distribuída tende a obter resposta satisfatórias para o nosso intento. Modelo Cliente-Servidor O objetivo do modelo cliente-servidor é configurar o Sistema Operacional com um conjunto de processos que colaboram entre si para a execução de uma tarefa, denominados servidores e clientes. Servidores, como o próprio nome sugere, são processos que oferecem serviços e acesso a recursos. Os clientes possuem processos que requisitam os recursos e serviços oferecidos pelos servidores. Uma máquina pode executar vários processos, servidores, clientes ou então uma combinação de ambos. O modelo cliente-servidor utiliza um protocolo simples para comunicação do tipo solicitação/resposta, isto evita a sobrecarga causada pelos protocolos dos modelos OSI e TCP/IP devido ao tamanho cabeçalho e rotinas de controle de mensagens. Neste tipo de protocolo, o cliente envia uma mensagem de solicitação de serviço ao servidor que por sua vez recebe a mensagem, executa o serviço e devolve a resposta ao cliente ou 17
  • 18. uma mensagem de erro informando o motivo pelo qual a solicitação não foi atendida. Veja figura 2.1.1. Figura 2.1.1 Modelo Cliente-Servidor As vantagens deste modelo são: Simplicidade Não é necessário estabelecer ou finalizar conexão, pois basta o cliente enviar uma solicitação ao servidor e aguardar pela resposta. Baixa taxa de overhead na rede As respostas enviadas pelo servidor em decorrência das solicitações dos clientes servem como confirmação de recebimento da mesma. Níveis de protocolos No caso de protocolos idênticos entre as máquinas que estão interagindo (cliente/servidor), são necessários apenas três níveis de protocolos (físico, enlace e request/reply). Um exemplo de um servidor pode ser observado abaixo: servidor() sempre faça recebe(endereço de origem, mensagem) processa(mensagem) envia(endereço de origem, mensagem) Figura 2.1.2 Exemplo de um servidor Um exemplo de cliente para o servidor acima está demonstrado abaixo: cliente() faça envia(endereço de origem, mensagem) recebe(endereço de origem, mensagem) Figura 2.1.3 Exemplo de um cliente Dentre as primitivas que podem ser utilizadas, podem se destacar: Bloqueadas ou não-bloqueadas Por ser uma operação de E/S, tanto o cliente quanto o servidor podem ficar 18
  • 19. bloqueados enquanto o Sistema Operacional envia e recebe uma mensagem. Neste aspecto, se houver alguma falha, tanto o cliente quanto o servidor podem ficar indefinidamente suspensos. Para evitar este tipo de situação, mecanismos de cronômetro (timeout) são utilizados para interromper a operação, caso ela não seja completa. Bufferizadas e não-bufferizadas Bufferizadas as mensagens enviadas são armazenadas de forma semelhante a uma caixa de e-mails, sendo assim, não há risco de perder alguma mensagem enquanto o processo não está disponível para recebê-la. Assim que o processo fica apto a receber mensagens, ele verifica a existência delas na caixa de e- mails e as executa. Não-bufferizadas as mensagens enviadas não ficam armazenadas, ou seja, se o processo não estiver apto a receber, a mensagem é perdida. Esse tipo de primitiva é mais simples de se implementar, porém, dependendo do caso, é necessário a inserção de mecanismos de controle para evitar perda de mensagens. Confiáveis e não-confiáveis Confiáveis Há garantia de que a mensagem sempre será entregue, portanto não é necessário nenhum tipo de tratamento especial para elas. Não-confiáveis Não há garantia na entrega de mensagens entre os processos. Para se tratar isso, existem basicamente três abordagens: Admitir que a primitiva é não-confiável e deixar a responsabilidade de se implementar uma comunicação confiável ao usuário; Forçar o kernel a enviar mensagens de confirmação de recebimento (ACK); Estabelecimento de um temporizador (timeout) para cada requisição enviada, assim, se não houver resposta em um determinado período de tempo, a mensagem é enviada novamente. Clusters Clusters, também chamados de Aglomerados, são uma implementação de Sistemas Distribuídos que consiste em nós (computadores) de interconexão, podendo ser monoprocessados ou multiprocessados, dentro de uma rede (LAN) de alta velocidade. Esse aglomerado têm por objetivo processar tarefas como um único sistema, tirando proveito do multiprocessamento fornecendo um sistema de grande capacidade de processamento [DEI05]. Características de um Cluster Segundo Tanenbaum [TAN95], as características fundamentais de um cluster são: Alto desempenho A soma das capacidades de processamento de cada computador (nó) incluso 19
  • 20. na rede pode atingir escala jamais possíveis para Sistema Centralizados. Mesmo fazendo uso de multiprocessadores e de processadores vetoriais, somente será possível utilizar milhares de processadores ao construir sistemas, sobre a forma de um enorme aglomerado. Escalabilidade A escalabilidade diz respeito ao fato de ser possível acoplar ou desacoplar máquinas no cluster, dependendo da necessidade de processamento. Existem algumas características de escalabilidade a serem respeitadas: Nenhuma máquina tem informação completa sobre o estado do sistema: Nenhuma máquina tem informações completas sobre o estado do Sistema, devido a sua independência de hardware e software das demais máquinas e também pelo modo de comunicação através de mensagens que pode causar congestionamento na rede se todas as máquinas começarem a trocar informações o tempo todo. Não existe uma sincronização de tempo global: Não existe uma sincronização de tempo global real, ou seja, linear no tempo, apenas uma sincronização lógica utilizada na troca de mensagens entre os nós. Porque com tantas máquinas seria impossível sincronizar o relógio interno do sistema com exatidão. A falha de uma máquina não compromete o cluster: A falha de uma máquina não deve comprometer o processo como um todo para isso algoritmos de redirecionamento de serviços devem ser implementados. As máquinas tomam decisões baseadas nas informações locais: As máquinas devem tomar decisões segundo as informações locais devido ao seu modo de comunicação ser através de troca de mensagens. Porque manter um nó atualizado com informações sobre todo o sistema poderia causar muito tráfego na rede e conseqüentemente congestionamento na rede e lentidão no sistema, o que foge da característica de um cluster. Confiabilidade e tolerância à falha Se uma máquina falhar isso não deve comprometer o sistema como um todo, sendo para isso implementado algoritmos de redirecionamento de tarefas para outros nós da rede. Alta disponibilidade Hardware e software podem ser replicados de modo a assegurar o serviço oferecido. Independência 20
  • 21. Cada elemento possui um ou mais processadores, memória, dispositivos de entrada/saída e seu próprio Sistema Operacional. Este elemento geralmente pode ser desligado e até mesmo removido do cluster sem que isto afete o funcionamento dos demais. Transparência O cluster deve se comportar como se fosse um único sistema, passando para o usuário a imagem de um recurso único. Existem alguns tipos de transparências: Locação o usuário não deve saber onde estão localizados os recursos tanto de hardware quanto de software Replicação o usuário não toma conhecimento das replicações do Sistema Operacional, arquivos e outros recursos. Migração os recursos podem ser removidos de um nó para outro sem a necessidade de trocar seus nomes Concorrência múltiplos usuários pode compartilhar recursos automaticamente Paralelismo atividades distintas podem ocorrer em paralelo sem o conhecimento do usuário 21
  • 22. Comunicação entre processos no Cluster Em um cluster, os nós são independentes, possuindo sua própria memória, espaço de armazenamento e processador. A forma de comunicação entre eles é através de troca de mensagens. A mensagem é um arranjo de parâmetros encapsulados enviado através da rede de um computador a outro. Entretanto a sincronização entre os nós é determinada pela lógica utilizada na troca das mensagens [DEI05]. Para que haja interação entre recursos disponíveis no cluster, são necessárias as implementações de alguns mecanismos de memória compartilhada distribuída [DEI05]. Esses mecanismos consistem na existência de uma variável comum entre todas as máquinas, permitindo que sempre que um processo modifique o valor desta variável, esta seja atualizada nas demais máquinas. Um dos modelos mais comuns de comunicação através de troca de mensagens entre processos é utilizando as primitivas send e receive para envio e recebimento de mensagens, como ilustra a figura 2.2.1. Figura 2.2.1 - Modelo de comunicação com send e receive. A atualização de uma variável a processos em máquinas diferentes utilizando as primitivas send/receive. Esta comunicação é viabilizada através da Invocação Remota de Método (RMI) que ajuda o programador neste tipo de aplicação. 22
  • 23. Cluster Homogêneo e Heterogêneo Segundo Marcos Pitanga [PIT03], um cluster é homogêneo quando todos os seus nós são dotados das mesmas características (software e hardware) e compartilham a mesma rede de comunicação. E um cluster é heterogêneo quando os seus nós se diferenciam em características ou rede de comunicação. A característica de um cluster ser ou não homogêneo reflete nas regrar a serem utilizadas para o balanceamento de carga das tarefas que devem ser executadas. Eventualmente, no particionamento de uma tarefa, ao se balancear a carga em um cluster homogêneo, todos os nós receberam cargas iguais, já que compartilham das mesmas características. Evidentemente, possuem o mesmo poder de processamento. Em um cluster heterogêneo deve-se ter cautela ao distribuir as cargas entre os nós, pois sendo máquinas diferentes umas das outras, seu poder de processamento também difere, Isto exige que seja implementado um algoritmo gerenciador, que analise o poder de processamento de cada nó atribuindo-lhe um peso que servirá de parâmetro e fator decisório para que seja distribuída uma carga compatível com a capacidade de processamento de cada nó. Embora um cluster homogêneo seja mais atraente por não se preocupar em balancear a carga de tarefas distribuídas, é fato que com a sua ampliação ele se tornará heterogêneo salvo os casos em que não mais será modificado ou encontre máquinas exatamente iguais para a ampliação. 23
  • 24. Tipos de Cluster Segundo Deitel [DEI05], há três tipos principais de clusters: cluster de alto desempenho, de alta disponibilidade e de balanceamento. Estes clusters seguem um padrão de características distintos que depende da aplicação. Cluster de Alto Desempenho Neste tipo de cluster, todos os nós são utilizados para executar o serviço. Ele é aplicado em problemas computacionais de grande escala que podem se divididos e executados paralelamente. Clusters de Alta Disponibilidade Em clusters de alta disponibilidade, alguns nós são usados para executar serviços, enquanto que outros são reservados para assumir o lugar de uma máquina no caso de falha assumindo a execução da tarefa. Este modelo de cluster é muito utilizado em tarefas de missão crítica onde não pode haver falhas de sistema e para se conseguir este nível de confiabilidade é necessário que haja redundância de hardware e software. Esta característica é oferecida pelos clusters de alta disponibilidade onde há replicação de software e hardware. Clusters de Balanceamento de Cargas Nesse tipo de cluster existe um nó coordenador que distribui as tarefas entre os demais nós do cluster, de modo que cada um receba uma quantidade de tarefas à executar compatível com o seu poder computacional. Para tanto é necessário que seja atribuído a cada máquina um peso que represente o seu desempenho computacional para que sirva de parâmetros de algoritmos de balanceamento que tomarão decisões com base nestes dados. Os Clusters de Balanceamento de Cargas são utilizados em aplicações de e-business com grandes volumes de usuários. Exemplos de Clusters Cluster Beowulf Desenvolvidos nos laboratórios da NASA, o projeto Beowulf [PIT03][BEO05](1994), liderado por Thomas Sterling, tinha como objetivo proporcionar uma ferramenta de baixo custo financeiro que pudesse resolver grandes tarefas computacionais em ciências espaciais e terrestres do Goddard Space Flight Center (NASA). Na sua primeira versão o cluster Beowulf era dotado de 16 computadores com processador Intel DX 4 ligados via rede Ethernet. O Beowulf utiliza o modelo cliente/servidor como acesso a todos o nós através de uma conexão remota ao nó servidor. O nó servidor tem como objetivo controlar o cluster, monitorando e distribuindo tarefas. Os demais nós (escravos) são exclusivamente dedicados para o 24
  • 25. processamento das tarefas enviadas pelo servidor, podendo ou não ter dados ou discos rígidos. Abaixo segue uma ilustração de um cluster Beowulf (Figura 2.2.3). Figura 2.2.3 - Cluster Beowulf Devido ao fato de clusters Beowulf poderem ser construídos com uma variedade de componentes de hardware e software distintos, foi proposto em 1998 um esquema de classificação com o intuito de simplificar as referências sobre o Beowulf e responder aos diferentes tipos de hardware e software: Beowulf classe 1: Cluster Beowulf de classe 1 são construídos com componentes comuns do mercado encontrados em pelo menos 3 catálogos nacionais e globais de venda de componentes. As vantagens do cluster Beowulf são: Hardware disponível de vários fornecedores (preço baixo, fácil manutenção); Independência quanto ao fornecedor dos equipamentos; Apoio a drivers Linux comuns; Normalmente baseado em padrões (SCSI, EIDE, PCI, Ethernet, etc.). Desvantagem de um cluster Beowulf classe 1: Desempenho inferior ao cluster Beowulf classe 2. Beowulf classe 2: Cluster Beowulf de classe 2 são simplesmente quaisquer máquinas que não passe no teste de certificação de disponibilidade. Esta classe geralmente oferece maior desempenho a um custo financeiro maior em relação ao cluster Beowulf classe 1. Vantagens: Desempenho geralmente maior em relação aos clusters Beowulf classe 1 25
  • 26. dependendo da configuração (uso de uma LAN de 12 Gb/s só aumentaria o desempenho de aplicações altamente acopladas). Desvantagens: Suporte a drivers de dispositivos variados; Dependência de um único fornecedor de hardware; Geralmente apresentam um custo financeiro bem mais elevado que os Beowulf classe 1. Uma classe não necessariamente melhor que a outra depende exclusivamente do custo/desempenho que o sistema requer. 26
  • 27. Invocação Remota de Métodos (RMI) A RMI é uma tecnologia desenvolvida pela Sun Microservice, que habilita um processo que está executando em uma máquina invocar um método de um objeto em uma máquina remota [HOR01] [DEI01]. Essa tecnologia trata-se de um protocolo que permite que uma invocação a um método remoto seja feita nos mesmos moldes de uma chamada local, deixando os detalhes de montagem dos parâmetros e transporte transparente para o programa de emite a chamada [HOR01] [DEI01]. A figura 2.4.1 mostra a arquitetura básica de um RMI, composta pelo RMIRegistry, o Server e o Client. Figura 2.4.1 Arquitetura Básica RMI A RMI possibilita o desenvolvimento de aplicações distribuídas sem ter programas sockets explicitamente, ou seja, torna toda a parte de sockets transparente ao usuário programador. A sua arquitetura é caracterizada pelas camadas de software a seguir [DEI01]: Stub: o stub Java é uma interface entre o processo cliente e o objeto remoto. Quando o processo cliente faz uma invocação de um método remoto a camada stub é chamada primeiro, que recebe os parâmetros, serializa-os para montar a mensagem e os envia para a camada RRL (Remote Reference Layer). A serialização de objeto permite que programas em Java possam enviar e receber objetos. RRL (Remote Reference Layer): a camada RRL recebe os parâmetros, já serializados, do stub e através da camada de transporte envia a mensagem (parâmetros) para o servidor. A RRL do lado do servidor recebe a mensagem e dirige ao Skeleton. Skeleton: o skeleton é uma estrutura análoga ao stub cliente, que recebe os parâmetros da RRL, de-serializa, identifica o método a ser invocado e faz a chamada para esse método. Ao concluir o método, o skeleton serializa o resultado e o envia ao cliente através da RRL e o stub. Para a implementação de RMI, é necessário que exista uma classe servidor, na qual está a implementação dos métodos RMI a serem disponibilizados para os clientes. Ao ser inicializado, o servidor deve se registrar no RMIRegistry para que os clientes possam utilizar os seus serviços. Um cliente RMI, ao tentar executar um método implementado por RMI, faz uma consulta de nome (lookup) no RMIRegistry e este retorna o endereço IP do servidor RMI que contém o método que se deseja. Com isso, o cliente pode enviar diretamente os parâmetros através do stub ao skeleton do servidor que executará a função e retornará o resultado ao cliente. 27
  • 28. RMI-Registry Para tornar o objeto servidor disponível para as chamadas remotas, eles devem ser registrados no RMI-Registry. O RMI-Registry é o servidor de nomes padrão na plataforma Java. Quando um nó é acoplado a rede de um sistema distribuído, este informa ao RMI-Registry o seu endereço de IP e o nome do objeto que estará disponível para executar as tarefas, de modo que ao solicitar, o cliente obtenha através do RMI-Registry a localização do servidor e o objeto remoto. Cliente RMI-Registry Servidor 2 Requisição da 1 Registry/ Localização método 3 Localização 4 Requisição de serviço 5 - Resposta REDE Fig. 2.4.2 Arquitetura de um cluster usando RMI-Registry. 1 O servidor é conectado à rede e/ou o sistema operacional é iniciado, então o sistema localiza o servidor de nomes ( RMI-Registry) e se registra informando seu IP e o nome do método que estará disponível para o cliente; 2 O cliente requisita ao RMI-Registry a localização do método que esta necessitando; 3 O RMI-Registry retorna uma resposta com a localização da máquina que tem o método disponível; 4 O cliente faz uma requisição de serviço ao servidor; 5 O servidor responde à requisição; Exemplo de programa em RMI Abaixo será mostrado um exemplo de utilização do RMI extraído de [MAS04] com todos os códigos fontes necessários: Ola.java (interface) /* * Esse programa implementa a interface dentro do RMIRegistry */ import java.rmi.*; public interface Ola extends Remote{ 28
  • 29. public String getMensagem() throws RemoteException; } OlaImpl.java (implementação do servidor) /* * Esse programa implementa o servidor RMI */ import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class OlaImpl extends UnicastRemoteObject implements Ola{ public OlaImpl() throws RemoteException{ super(); } public String getMensagem(){ return("Ola - Meu primeiro exemplo RMI"); } public static void main(String args[]){ try{ OlaImpl obj = new OlaImpl(); Naming.rebind("localhost/OlaServer",obj); System.out.println("Servico registrado. Servidor no ar. Ok!"); } catch (Exception e){ System.out.println("Problemas no registro do objeto no servidor"); System.out.println("Erro:"+e.getMessage()); } } } OlaCliente.java (cliente) /* * Esse programa implementa um cliente RMI */ import java.rmi.*; public class OlaCliente{ public static void main(String args[]){ Ola o; String msg; System.out.println("Cliente no ar... conectando com servidor"); try{ o = (Ola)Naming.lookup("localhost/OlaServer"); msg = o.getMensagem(); System.out.println("Recebido="+msg); } catch (Exception e){ System.out.println("Problemas ao conectar com servidor"); System.out.println("Erro:"+e.getMessage()); } } } 29
  • 30. Sistema de Arquivo de Rede (NFS Network File System) O sistema de Arquivo de Rede (NFS) é um padrão de compartilhamento de arquivo de rede suportado pela maioria das plataformas Linux [DEI05]. Seu funcionamento se dá através da comunicação entre cliente e servidor. Antes de um cliente NFS acessar um arquivo remoto, ele deve usar o protocolo de montagem (um mecanismo que traduz um endereço de arquivo para um manipulador de arquivo) para montar o diretório que retém o arquivo remoto. Um manipulador de arquivo identifica um arquivo remoto por seu tipo, localização e permissões de acesso. Montar implica em mapear um diretório de arquivo remoto para o diretório local de um cliente. Para montar o sistema de arquivo o cliente NFS faz uma chamada local ao stub do cliente e ao receber a solicitação de montagem, o skeleton do servidor passa a chamada ao servidor NFS. O servidor NFS examina o seu local de arquivos e exporta o diretório local de arquivos que satisfaz a requisição do cliente, o que significa que o servidor torna o diretório local de arquivos disponível para o cliente. Então o skeleton do servidor retorna um manipulador de arquivos ao diretório local de arquivo, o que permite que o cliente acesse remotamente o diretório de arquivos exportado. O cliente remoto usa esse manipulador de arquivos em todas as requisições subseqüentes de arquivos no diretório de arquivos exportado. O NFS prevê delegações ao cliente para a manipulação de arquivos. Quando o servidor concede uma delegação de leitura, nenhum outro cliente pode escrever para aquele arquivo a um cliente. Se um outro cliente requisitar acesso de escrita a um arquivo com a delegação de leitura ou de escrita ou se o cliente requisita acesso de leitura com delegação de escrita, o servidor revogará a delegação e requisitará que o cliente original descarregue o arquivo para o disco. Para uma maior segurança na comunicação entre o cliente e o servidor, o NFS suporta diversos algoritmos de criptografia, usados quando estabelece sessões de comunicação, criptografando cada requisição. O NFS também oferece uma autenticação de clientes por meio das chamadas remotas, evitando que clientes não autorizados acessem os dados. 30
  • 31. Capítulo 3 Este capítulo apresenta uma introdução à biologia, biologia computacional e aos algoritmos computacionais para comparação de DNAs que serão utilizados no projeto. 31
  • 32. Biologia Computacional Segundo Setúbal [SET94], Biologia Computacional pode ser entendida como sendo a aplicação de técnicas e ferramentas da computação aos problemas da biologia e entre as diversas áreas da biologia, aquela que a aplicação de técnicas computacionais tem sido mais necessária é a biologia molecular, em particular na sua interface com a genética. Ele afirma também que diversas áreas da computação contribuem para o estudo da biologia molecular, como teoria da computação, através da formulação de algoritmos para diversos problemas que surgiram recentemente. A teoria e prática de banco de dados, também se faz necessária, para lidar com enormes massas de informações oriundas dos avanços em técnicas laboratoriais. O objetivo deste capítulo será desenvolver e demonstrar como algumas das ferramentas computacionais podem auxiliar com o trabalho dos biólogos, como comparação e similaridade que precisa ser efetuados no DNA. Existem outras aplicações que são de grande utilidade para a biologia, porem não serão comentada neste trabalho. Conceitos de Biologia As proteínas e ácidos nucléicos são as moléculas fundamentais para todo o ser vivo. O ácido desoxirribonucléico (DNA) é o constituinte básico dos genes. Os genes por sua vez, contém todas as informações necessárias para o desenvolvimento desse organismo. O conjunto de todos os genes de um indivíduo é chamado de genoma. Então, pode-se dizer que o genoma é a especificação primaria e fundamental de um ser vivo. [ROB03] afirma que os genes podem ser analisados sob três ângulos, porem, para a justificativa desse projeto utilizaremos o ponto de vista molecular, que define o gene como: a seqüência de DNA que contém a informação necessária para sintetizar uma molécula de RNA, e a partir dele construir uma proteína. Os Genes são os segmentos funcionais do DNA e calcula-se que existam cerca de 100.000 genes distribuídos nos 23 pares de cromossomos. As proteínas são cadeias de aminoácidos necessárias nos organismos para o seu bom funcionamento. A falta de alguma proteína no organismo pode causar sérios problemas e possivelmente a sua morte. Então podemos afirmar que uma mutação nesse DNA pode causar o comprometimento do organismo. Com a aplicação do conhecimento sobre o DNA, poderemos sintetizar novos remédios a fim de curar ou minimizar os efeitos de doenças até então sem tratamento. Também a aplicação na engenharia genética como pode ser citado o caso de clonagem de animais como ovelhas, vacas, cachorros e primatas. Outra área importante que podemos observar nos tempos modernos é o emprego desse conhecimento na agricultura, no desenvolvimento de produtos de consumo com maior qualidade, mais resistentes a pragas e condições do tempo e em maior quantidade para atender a população que tende ao crescimento. Se fossemos capazes de ler um genoma, poderíamos predizer todas as características que o seu possuidor terá ou será capaz de ter. O problema é que os genomas são muito extensos, na Tabela 3.1 é demonstrado o tamanho do genoma de diversas espécies. Espécie Nome Popular Tamanho total do Genoma(pares de base) 32
  • 33. Bacteriófago vírus 5 x 10 4 Escherichia coli Bactéria 5 x 10 6 Saccharomyces cerevisiae Levedura 1 x 10 7 Caenorhaditis elegans Verme 6 x 10 8 Drosophila melanogaster Mosca 2 x 10 8 Homo sapiens Homem 3 x 10 9 Tabela 3.1: Tamanho do genoma de algumas espécies Ao contrário do que muitos pensam, biologia computacional não se resume à comparação de seqüências ou casamento aproximado de padrões, embora o resultado deste trabalho seja exatamente isso, porém utilizando um Sistema Distribuído. Existem diversos outros problemas biológicos nos quais algoritmos da computação são utilizados, como: união de conjunto disjuntos, ordenação topológica, tabelas de hashing entre outros. Novos problemas da biologia computacional exigem a criação de novas técnicas e novos algoritmos que em muitos casos são úteis em outras aplicações. Para tal auxílio, não abordaremos temas da biologia molecular e bioquímica, pois acabaria fugindo do foco, e sim trataremos os dados biológicos como apenas um alfabeto de 4 letras, sendo elas: A (Adenina), C (Citosina), G (Guanina) e T (Timina). Essas letras são as bases encontradas no DNA. Dependendo da aplicação que poderá ser usada após o término deste projeto à base U (uracil) poderá ser utilizada no lugar do T (Timina) caso seja trabalhado com RNA (ácido ribonucléico), mas para isso será necessário efetuar modificações na codificação do projeto, que poderá ser feito em futuros trabalhos. Comparação de seqüências e Alinhamento Segundo Setúbal [SET94], a operação de comparação é a mais básica em biologia computacional e apresenta duas seqüências de DNA, por exemplo: GACGGATTAG e GATCGGAATAG. Pode-se notar a semelhança entre as duas seqüências se as colocarmos alinhadas conforme apresentado abaixo: GA-CGGATTAG GATCGGAATAG As únicas diferenças são um T a mais na segunda seqüência e uma troca de A por T na quarta posição da direita para esquerda. Também foi necessário introduzir um buraco (indicado pelo hífen) na primeira seqüência para que as bases iguais antes e depois do buraco se alinhassem nas duas seqüências. O alinhamento entre as seqüências mostra a similaridade entre elas, ou seja, poderemos afirmar com um determinado numero (que é a pontuação total do alinhamento entre as seqüências) quanto uma determinada espécie é similar à outra. No caso deste projeto, como focaremos apenas essa similaridade, os biólogos poderão utilizar essa ferramenta para classificação de possíveis espécies novas que forem descobertas. Definiremos com base em [SET94], o entendimento do alinhamento. As duas seqüências não precisam ser do mesmo tamanho e alinhamentos podem conter buracos em qualquer seqüência. Então um alinhamento é a inserção de buracos em pontos arbitrários ao longo das seqüências de modo que elas fiquem com o mesmo comprimento, entretanto um buraco de uma seqüência não pode ser alinhado com um buraco de outra seqüência e por fim, buracos podem ser colocados tanto no início como 33
  • 34. no final das seqüências. Dado um alinhamento entre duas seqüências, podemos atribuir uma pontuação, esta pontuação é definida pelo pesquisador da área biológica dependendo de como ele deseja ponderar a comparação. Neste projeto, utilizaremos como padrão os mesmos valores ponderados utilizados em [SET94]. Por ex: Cada coluna do alinhamento receberá um certo numero de pontos e a pontuação total do alinhamento será a soma dos pontos atribuídos à suas colunas. Se a coluna tiver duas bases iguais receberá 1 ponto, se a coluna tiver duas bases diferentes receberá 1 e finalmente se a coluna possuir uma base e um buraco receberá 2. O alinhamento ótimo será aquele que tiver pontuação máxima. Esta pontuação máxima chamaremos de similaridade entre as duas seqüências. Em geral pode haver mais de um alinhamento com pontuação máxima. Por exemplo, a pontuação da seqüência anterior onde nove colunas com bases iguais, uma coluna com bases desiguais e uma coluna com buraco, então a sua pontuação é a seguinte: 9 * 1 + 1 * (-1) + 1 * (-2) = 6 Para melhor entendimento do algoritmo que calcula o alinhamento, será utilizada a seguinte seqüência: AAAC AGC Para encontrar um alinhamento ótimo para esse par de bases há três possibilidade relacionadas abaixo: AAA C AG C AAAC - AG C AAA C AGC - Com este raciocínio, usaremos um método recursivo para achar o valor de um alinhamento ótimo, define-se uma função similarity(s1, s2) que corresponde à similaridade entre s1 e s2 Calcule similarity (AAA, AG) +1 Calcule similarity (AAAC, AG) -2 Calcule similarity (AAA, AGC) -2 O problema deste método é que se aplicado diretamente, vai gerar um número exponencial de chamadas recursivas e se cada chamada gera outras três, sendo em duas delas o número total de caracteres envolvidos juntando as duas seqüências diminui apenas de um, teremos no mínimo 2 m / n chamadas, onde m e n representam os comprimentos das seqüências originais. Contudo, muitas destas chamadas são redundantes, portanto não há necessidade de serem calculadas duas vezes, desde que sejam guardadas de maneira 34
  • 35. que possam ser consultados rapidamente como mostrado na figura 3.2.1. AAA AG C C AA AAA AA A A CA AG G G C A AA A AA AAA AA A AA A A A AA A AA CA A A A A A AG A G G G G C Figura 3.2.1 Árvore de Chamadas recursivas Será utilizada a técnica de programação dinâmica, cuja qual deve-se observar que embora um método gere um número muito grande de chamadas recursivas, o numero total de instancias de entrada é limitado, de modo que o calculo pode ser feio uma só vês e armazenado para consultas posteriores, se necessário. Na maioria dos casos, uma matriz é usada para guardar resultados parciais. Se observarmos as chamadas recursivas, podemos afirmar que o método da figura 3.2.1 utiliza sempre um prefixo da primeira seqüência e um prefixo da segunda seqüência. Há m +1 prefixos de s1 e n + 1 prefixos de s2, incluindo os vazios. Dessa forma, há apenas (m + 1 ) (n + 1) possíveis combinações de argumentos Toda a recursão tem seus casos base, e neste determinado problema, os casos bases são aqueles em que a seqüência vazia é comparada a outra, isto é, o prefixo vazio de uma seqüência é comparado a um prefixo da outra. Nestes casos, o único alinhamento possível é colocar-se tantos buracos na seqüência vazia quantos necessários para igualar o comprimento da outra seqüência, resultando em uma pontuação de -2k, onde k é o comprimento da outra seqüência. A figura 3.2.2 ilustra uma matriz bidimensional usada para a comparação da seqüência AAAC com AGC. Cada célula contém a pontuação de um alinhamento ótimo entre prefixos das seqüências dadas. Se chamarmos AAAC de s1 e AGC de s2, e se convencionarmos que s[1...j] indica o prefixo com tamanho j de s1, então cada célula (i,j) contem o resultado da comparação de s1[1...i] com s2[1...j]. Na matriz da figura 3.2.2, as células das bordas superior e esquerda foram inicializadas com -2 vezes a posição da célula, de acordo com a observação sobre casos base que fizemos anteriormente. 35
  • 36. A G C 0 -2 -4 -6 1 -1 -1 A -2 1 -1 -3 1 -1 -1 A -4 -1 0 -2 1 -1 -1 A -6 -3 -2 -1 -1 -1 1 C -8 -5 -4 -1 Figura 3.2.2 Matriz Bidimensional de similaridade entre as seqüências S1 e S2 Uma breve explicação de como foi montada a matriz Na matriz da figura 3.2.2, as células das bordas superior (primeira linha) e esquerda (primeira coluna) foram inicializadas com -2 vezes a posição da célula, de acordo com a observação sobre casos base que fizemos anteriormente. Ou seja, para as células da primeira linha fixa o valor do j e calcula-se utilizando o valor de i ficando: posição C(1,0), -2*1= -2; posição C(2,0), -2*2= -4; posição C(3,0), -2*3= -6 O procedimento foi semelhante às células da primeira coluna, ou seja, fixando o valor de i e utilizando o valor de j para o calculo, ficando: posição C(0,1), -2*1= -2; posição C(0,2), -2*2= -4; posição C(0,3), -2*3= -6; posição C(0,4), -2*4= -8 Nas células com i=>1 e j =>1 são acrescentados índices, que são calculados da seguinte forma: As células em que o cruzamento das mesmas bases se coincidem, possuem o índice 1, caso contrario o índice é 1. Então podemos verificar esse método observando as células C(1,1), C(1,2), C(1,3) e C(3,4) possuem o índice 1 enquanto as demais células possuem o índice -1. Os valores das células i = j => 1 é definido como o valor máximo 36
  • 37. entre : (i-1,j) + b, ou seja, o valor da célula à esquerda mais b (onde valor de b é -2) (i-1,j-1) + índice, ou seja, o valor da célula diagonal esquerda superior mais o índice da própria célula (i,j-1) + b, ou seja, o valor da célula acima mais b (onde valor de b é -2) O resultado que possuir o maior valor, será o valor da célula. Podemos acompanhar esse método a partir da célula (1,1), onde: o valor da célula superior (célula (0,1)) é -2 mais o valor de b o resultado é 4; o valor da célula diagonal esquerda superior (célula (0,0)) é 0 mais o índice o resultado é 1; o valor da célula esquerda (célula (1,0)) é -2 mais o valor de b o resultado é -4 Comparamos e verificamos que o maior resultado obtido pelo método é 1, portanto o valor desta célula (célula (1,1)) será 1. Prosseguindo com o algoritmo, será possível calcular tanto a célula abaixo (célula(2,1)) ou a célula à direita (célula(1,2)). Vamos prosseguir a explicação com o calculo da célula à direita (célula (1,2)): o valor da célula superior (célula (0,2)) é -4 mais o valor de b o resultado é 6 o valor da célula diagonal esquerda superior (célula (0,1)) é -2 mais o índice o resultado é 3 o valor da célula esquerda (célula (1,1)) é 1 mais o valor de b o resultado é 1. Portanto, o maior valor entre os três comparados é -1, ficando esse o valor da célula.Agora calcularemos a célula (2,1): o valor da célula superior (célula (0,1)) é 1 mais o valor de b o resultado é -1 o valor da célula diagonal esquerda superior (célula (1,0)) é -2 mais o índice o resultado é -1 o valor da célula esquerda (célula (2,0)) é -4 mais o valor de b o resultado é -6 Neste caso podemos observar que para esta célula existem duas possibilidades de valores máximos, que é -1, então este será o valor da célula. Agora podemos calcular o valor de três células que podem ser: célula (1,3); célula(2,2); e célula(1,3) É por esse motivo que temos o paralelismo, várias células podem ser calculadas ao mesmo tempo, porem como as seqüências possuem um tamanho elevado o projeto será paralelizar blocos de células a serem processadas. Não daremos continuidade, pois o texto ficaria muito extenso e cansativo. As setas que são apresentadas na figura 3.2.2 apontam para as células de onde foram obtidos os maiores valores como é o caso das células: c(2,1); c(2,3); c(3,1); c(3,2) e c(4,2). Ou seja, existe mais de uma possibilidade de valor máximo para a célula e essas setas são utilizadas para verificar o melhor alinhamento entre as duas seqüências. Um outro detalhe importante, é que toda seqüência inserida nos algoritmos, tanto de alinhamento, quanto de similaridade, devem ser validadas antes de começar a comparação, a validação é feita conforme o algoritmo abaixo: 37
  • 38. Algoritmo para validação de seqüências de DNA Descrição: Verifica se a sequência de DNA é uma sequência válida Nome do método: isValid() Classe a que pertence: DNAString Atributos do método: Private Argumentos do Sequencia de caracteres a ser validada método: Retorno do método: 1 se validado, 0 se falhou. Português estruturado do método isValid(): s1: vetor da seqüência de DNA (vetor de caracteres) |s1|: número de elementos do vetor da seqüência de DNA (inteiro) m, i: inteiros isValid() - Supomos |s1| = m. para i = 0 a m faça se s1[i] != 'A' ou s1[i] != 'a' então se s1[i] != 'T' ou s1[i] != 't' então se s1[i] != 'C' ou s1[i] != 'c' então se s1[i] != 'G' ou s1[i] != 'g' então se s1[i] != '-' então retorna 0; retorna 1; Similaridade distribuída (CGM/BSP) Em [SON02], é demonstrado um algoritmo de granularidade grossa chamado de BSP, que afirma melhorar o desempenho razoavelmente se for implementado em máquinas paralelas com memória principal distribuída. O Algoritmo BSP consiste em uma seqüência de várias etapas, separadas por um controle de sincronização. Nessas etapas, cada processador executa um conjunto de operações independentes que usam dados locais disponíveis para cada processador no começo da etapa, que consiste também na comunicação (envio e recebimento de mensagens). N processadores em uma etapa corresponde a enviar ou receber n mensagens em cada processador. Outro algoritmo apresentado por [SON02] é o CGM, onde os processadores são interconectados por qualquer tipo de conexão e consiste em um conjunto de execuções enquanto alternam entre processamento local e processamento global (troca de mensagens). Normalmente durante a execução é utilizado o algoritmo que melhor processa os dados localmente. O algoritmo CGM é um caso especial do BSP onde todas as operações de comunicação das etapas são terminadas em n processadores. Estes algoritmos são apresentados na seção de Algoritmos de alinhamento e similaridade utilizados neste projeto. Com a implementação deste algoritmo teremos uma ordem de complexidade de O(mn/p) onde m e n são o tamanho das seqüências e p o numero de processadores disponíveis e, comparamos esta complexidade através das medidas de tempo obtidas com os testes de desempenho. Para resolver o problema de similaridade sobre o modelo CGM/BSP, divide-se uma seqüência C de tamanho n(onde C é a segunda seqüência) em p partes, de tamanhos n/p, e cada processador Pi, 1<=i<=p, recebe a seqüência A e a i-ésima parte de C (c(i-1) n/p+1...ci n/p). Cada processador Pi computa os elementos Si(r,s) da submatriz Si, onde 38
  • 39. 1<=r<=i n/p usando apenas 3 elementos pré-computados Si(r-1,s), Si(r-1,s-1), Si(r,s-1), pois há somente 3 formas de se calcular um alinhamento entre A[1..r] e C[1..s]. Pode-se alinhar A[1..r] com C[1..s-1] e marcar um espaço com C[s], ou alinhar A[1..r-1] com C[1..s- 1] e marcar A[r] com B[s], ou alinhar A[1..r-1] com C[1..s] e marcar um espaço com A[r]. Para calcular a submatriz Si, cada processador Pi usa o melhor algoritmo seqüencial local. É fácil de ver que o processador Pi, i>1, pode somente iniciar a computação de elementos Si(r,s) após o processador Pi-1 ter computado parte da submatriz Si-1(r,s). Denotado por Rki, 1<=i, k<=p, todos os elementos do limite direito (ultima coluna a direita) da k-ésima parte da submatriz Si. Mais precisamente, Rki = {Si(r,i n/p), (k-1)m/p +1<=r<=km/p}. A idéia do algoritmo é a seguinte: Após computar a k-ésima parte da submatriz Si, o processador Pi envia para o processador Pi+1 os elementos de Rki. Usando Rki, o processador Pi+1 pode computar a k-ésima parte da submatriz Si+1. Após p-1 turnos, o processador Pp recebe R1p-1 e computa a primeira parte da submatriz Sp. No turno 2p-2, o processador Pp recebe Rpp-1 e computa a p-ésima parte da submatriz Sp e finaliza o processamento. Figura 3.2.3 Comunicação entre as etapas, semelhante ao Scheduling Usando esta programação (figura 3.2.3), pode-se ver que na primeira iteração somente o processador P1 trabalha. Na segunda iteração, os processadores P1 e P2 trabalham. É fácil verificar que na iteração k, todos os processadores Pi trabalham, onde 1<=i<=k. 39
  • 40. Algoritmos de alinhamento e similaridade utilizados como base neste projeto Algoritmo básico do método alignment() da classe DNA Descrição: Traça o alinhamento ótimo entre duas seqüências de DNA utilizando a matriz gerada pelo método similarity() Nome do método: alignment() Classe a que pertence: DNA Atributos do método: Private Argumentos do método: Inteiro FirstSequenceCount Inteiro SecondSequenceCount Inteiro AuxiliarCount Retorno do método: Inteiro AuxiliarCount caso não ocorra erro ou inteiro 0 caso ocorra erro. Os parâmetros do método alignment() ao ser invocado devem ser: FirstSequenceCount: tamanho do vetor da primeira seqüência de DNA; SecondSequenceCount: tamanho do vetor da segunda seqüência de DNA; AuxiliarCount: indiferente. Português estruturado do método alignment(): s1: vetor da primeira seqüência de DNA (vetor de caracteres) s2: vetor da segunda seqüência de DNA (vetor de caracteres) i: primeiro parâmetro do método, representa o marcador do vetor da primeira seqüência de DNA (inteiro) j: segundo parâmetro do método, representa o marcador do vetor da segunda seqüência de DNA (inteiro) t: terceiro parâmetro do método, representa o marcador das seqüências alinhadas (inteiro) alin1: vetor alinhado da primeira seqüência de DNA inserida. (vetor de caracteres) alin2: vetor alinhado da segunda seqüência de DNA inserida. (vetor de caracteres) a: matriz[|s1|][|s2|] que representa o número de similaridades entre a primeira e a segunda seqüências de DNA. (matriz de inteiros) b: custo do buraco vazio (inteiro) c: Custo de tipos iguais (inteiro) d: Custo de tipos diferentes (inteiro) alignment(i,j,t) se i = 0 e j = 0 então t 0 senão se i > 0 e a[i,j] = a[i-1,j] + b então alignment(i-1,j,t) t t+1 alin1[t] s1[i-1] alin2[j] - senão se i > 0 e j > 0 e a[i,j] = a[i-1,j-1] + pontuação(i,j) então alignment(i-1,j-1,t) t t+1 alin1[t] s1[i-1] alin2[j] s2[j-1] senão se j > 0 e a[i,j] = a[i,j-1] + b então alignment(i,j-1,t) t t+1 alin1[t] - alin2[j] s2[j-1] retorna t pontuação(i,j) se s1[i] = s2[j] então retorna c senão retorna d 40
  • 41. Algoritmo básico do método similarity() da classe DNA Descrição: Gera a pontuação de um alinhamento ótimo em matriz Nome do método: similarity() Classe a que pertence: DNA Atributos do método: Private Argumentos do método: Nenhum Retorno do método: Inteiro 1 caso não ocorra erro ou inteiro 0 caso ocorra erro. Português estruturado do método similarity(): s1: vetor da primeira seqüência de DNA (vetor de caracteres) s2: vetor da segunda seqüência de DNA (vetor de caracteres) |s1|: número de elementos do vetor da primeira seqüência de DNA (inteiro) |s2|: número de elementos do vetor da segunda seqüência de DNA (inteiro) a: matriz[|s1|][|s2|] que representa o número de similaridades entre a primeira e a segunda seqüências de DNA. (matriz de inteiros) b: custo do buraco vazio (inteiro) c: Custo de tipos iguais (inteiro) d: Custo de tipos diferentes (inteiro) m, n, i, j, valor1, valor2, valor3: inteiros similarity() - Supomos |s1| = m e |s2| = n. para i 0 a m faça a[i,0] i*b para j 0 a n faça a[j,0] j*b para i 0 a m faça para j 0 a n faça a[i,j] maximo(a[i-1,j] + b, a[i-1,j-1] + pontuação(i,j), a[i,j-1] + b) retorna a[m,n] pontuação(i,j) se s1[i] = s2[j] então retorna c senão retorna d maximo(valor1, valor2, valor3) se valor1 > valor2 e valor1 > valor3 então retorna valor1 senão se valor2 > valor3 então retorna valor2 senão retorna valor3 41
  • 42. Algoritmo básico do método CGM/BSP() da classe DNA Descrição: Gera a pontuação de um alinhamento ótimo de forma distribuída Nome do método: CGM/BSP() Classe a que pertence: DNA Atributos do método: Public Argumentos do Nenhum método: Retorno do método: Fragmento da matriz de alinhamento. Português estruturado do método CGM/BSP(): s1: vetor da primeira seqüência de DNA (vetor de caracteres) s2: vetor da segunda seqüência de DNA (vetor de caracteres) |s1|: número de elementos do vetor da primeira seqüência de DNA (inteiro) |s2|: número de elementos do vetor da segunda seqüência de DNA (inteiro) a: matriz[|s1|][|s2|] que representa o número de similaridades entre a primeira e a segunda seqüências de DNA. (matriz de inteiros) b: custo do buraco vazio (inteiro) c: Custo de tipos iguais (inteiro) d: Custo de tipos diferentes (inteiro) p: número de processadores k, r, s, i, j, m, n, valor1, valor2, valor3: inteiros CGM/BSP() - Supomos |s1| = m e |s2| = n. para k = 1 a p faça se i = 1 então para r = ((k-1)*m/p)+1 a k*m/p e s = 1 a n/p faça a[i,j] = maximo(a[i-1,j] + b, a[i-1,j-1] + pontuação(i,j), a[i,j-1] + b) enviar (Matriz k de i, processador i+1); se i != 0 então receber (Matriz k de i-1, processador p-1); para r = ((k-1)*m/p)+1 a k*m/p e s= 1 a n/p faça a[i,j] = maximo(a[i-1,j] + b, a[i-1,j-1] + pontuação(i,j), a[i,j-1] + b) se i != p então enviar(Matriz k de i, processador i+1); pontuação(i,j) se s1[i] = s2[j] então retorna c senão retorna d maximo(valor1, valor2, valor3) se valor1 > valor2 e valor1 > valor3 então retorna valor1 senão se valor2 > valor3 então retorna valor2 senão retorna valor3 42
  • 43. Capítulo 4 Neste capítulo será apresentada a documentação do projeto. Assim sendo, através deste conteúdo pretende-se passar uma visão clara e objetiva da proposta e do funcionamento do cluster para processamento de comparação de seqüências de DNA utilizando algoritmos computacionais paralelizáveis. 43
  • 44. Especificações do projeto Este capítulo tratará de toda a especificação e o desenvolvimento do projeto. Sendo assim, antes de começar a documentação UML, serão introduzidos alguns conceitos abordados nesse projeto em conjunto com suas especificações. Conceitualização do projeto Esse projeto tem como objetivo a implementação de um sistema distribuído clusterizado baseado no algoritmo CGM/BSP, no qual operará através de uma máquina principal denominada Gerenciador (Manager) ou servidor do sistema. Este gerenciador, como o próprio nome sugere, gerenciará as requisições de comparação de seqüências entre os outros nós da rede, também chamados de Executores. Os Executores possuem uma identificação que lhes é atribuída pelo Gerenciador ao se conectarem ao cluster. O cluster terá a função de comparar uma determinada seqüência de DNA, denominada DNA principal, com uma ou mais outras seqüências de DNA, denominadas de DNA secundário(s). Assim, após concluir a comparação, será gravado o grau de similaridade entre as seqüências comparadas em um banco de dados para futuras consultas. Para essa comparação, como visto no capitulo 3, será utilizada uma matriz de similaridade, a qual indicará o grau de similaridade entre as seqüências. O sistema possuirá apenas uma máquina gerenciadora para controle das requisições de comparação e para o armazenamento do repositório de dados, além de máquinas Executoras para realizar a comparação. Sempre que algum Executor for inserido no cluster, ele envia uma solicitação de inserção ao Gerenciador que verifica a quantidade de executores ativos e retorna ao Executor o número de registro imediatamente superior ao do último executor pré- registrado, e este passa a ser o último Executor (a posição de último executor é importante para a propagação de requisições de configuração e comparação, como será descrito posteriormente neste capítulo). Ao receber alguma solicitação para comparação de similaridade entre duas seqüências de DNA, o Gerenciador envia a identificação (ID) de cada uma das seqüências de DNA junto aos parâmetros de ponderação (pesos para bases iguais, bases diferentes e inserção de lacunas) ao último Executor, e este envia solicitação ao Executor imediatamente anterior e assim sucessivamente em cascata, até o Executor 0. O Executor 0, ao receber a solicitação, inicializa a comparação e envia sua resposta ao Executor imediatamente superior, que também compara e envia sua resposta. Essa seqüência de ações cascateadas ocorrerão até o cálculo completo das seqüências de DNAs. Ao terminar de processar a comparação, o último Executor envia a resposta da comparação ao Gerenciador que se encarrega de gravá-la no repositório de dados. Modularização e divisão de responsabilidades Essa sessão descreverá os módulos existentes no projeto, assim as iterações que eles realizam com os outros módulos do sistema. O projeto do cluster foi dividido em quatro grandes módulos, que serão chamados aqui de Interface Web, Gerenciador, Executor, e ClusterKnoppix. Cada módulo será tratado de forma separada e exclusiva, 44
  • 45. após a descrição de todos os módulos, será mostrada a integração entre eles. Módulo Interface Web Este módulo tratará da interface com o usuário, além de possuir ferramentas para a manipulação de dados no repositório de dados. Suas principais funcionalidades são: Manipulação de inserção, modificação e remoção de registros de seqüências de DNA no repositório de dados. Tela para listagem das seqüências que já foram comparadas. Tela para listagem das seqüências que ainda não foram comparadas, com a possibilidade envio de requisição para comparação. Na tela de listagem das seqüências comparadas, ao escolher uma seqüência de DNA (o DNA principal), haverá uma lista que exibirá todas as outras seqüências de DNAs (DNAs secundários) que já foram comparadas com o DNA escolhido. Nesta lista também será exibida a pontuação e o valor dos pesos de bases e lacuna escolhidos. Na tela de listagem das seqüências que ainda não foram comparadas, ao escolher uma seqüência de DNA (o DNA principal), uma lista exibirá todas as outras seqüências de DNA que ainda não foram comparadas com o DNA escolhido. Nessa tela haverá um botão para o envio de solicitações de comparação (esse botão é uma interface applet que enviará as solicitações ao Gerenciador). O módulo de Interface Web será implementado em PHP sendo executado em um servidor Apache instalado na mesma máquina do repositório de dados, porém, há possibilidade de instalá-lo em qualquer outra máquina que tenha serviço de servidor de Web com suporte a PHP e Java (caso precise executar o applet). Módulo Gerenciador Este módulo é o responsável pelo controle inserções de Executores no cluster, pelo controle de pedidos de comparação de DNAs e pela gravação dos resultados dessas comparações no repositório de dados. Ao receber o endereço IP de um Executor solicitando registro no cluster, o Gerenciador verifica na lista de Executores válidos o números dos executores registrados e retorna ao Executor solicitante um número imediatamente posterior ao número do último executor registrado. Após isso, o Gerenciador insere o IP e o número do novo Executor na lista de Executores e o Executor se registra no RMIRegistry com o número recebido. Ao receber algum pedido de comparação de DNA, o Gerenciador o insere em uma fila de requisições. Caso os Executores não estejam comparando nenhuma outra requisição, o Gerenciador envia a requisição ao último Executor da lista de executores para começar a comparação. Ao terminar a comparação, o Gerenciador recebe a resposta do último Executor, remove a requisição da fila de requisições e grava o valor da comparação e dos pesos no repositório de dados. Módulo Executor Este módulo é o responsável pela execução do algoritmo CGM/BSP para o 45