Você está na página 1de 14

Arquitetura de sistemas distribudos

Os sistemas destinados a uso em ambientes do mundo real devem ser projetados


para funcionar corretamente na maior variedade possvel de circunstancias e perante
muitas dificuldades e ameas.
Um modelo de arquitetura define a forma pela qual os componentes dos sistemas
interagem e a maneira pela qual eles so mapeados em uma rede de computadores
subjacente.
1- Objetos distribudos: So objetos, mas que armazenam cdigo para executar uma
determinada tarefa, independente da localizao. Isto , podem estar na mesma
mquina(com) ou em mquinas distintas(dcom, com+, corba).
2-As camadas(Arquitetura trs camadas): Quando se fala em desenvolvimento em
camadas, esto se referindo a um modelo de programao que prov a diviso do
programa em trs ou mais partes bem definidas e distintas.
-Interface: Atela do cliente:
As regras de negcios: Definio de regras na camada de meio, onde se encontra o
servidor de aplicao.
Servidor de aplicao: e a mquina/computador responsvel pelo processamento das
regras.
-Banco de dados: O servidor de BD.
3- N camadas : a multicamadas
Nada impede a criao de camadas auxiliares no desenvolvimento do sistema. Um
exemplo: Uma camada de mtodos/Funes/Procedures genricas que serviro de base
para o desenvolvimento da aplicao.
OS protocolos
Com, Ole, Dcom,MTS, COMT, CORBA, SOCKETS, SOAP,...
DDE (dynamic data exchange)
Anterior ao COM e DDE so mtodos da API do Win32 para transferncia de dados entre
as aplicaes.
O DDE foi o primeiro passo no desenvolvimento de diversas tecnologias e comunicao,
surgiu com o WIndows3.0.

objetivos distribudos para usar soa para criar somente partes de um software diminuir
custos jrm usa soa
Tutorial RMI -Remote Method Invocation
Java RMI: Conceitos Bsicos

Java RMI (Remote Method Invocation) permite que objetos Java executando no mesmo
computador ou em outros computadores comuniquem entre si por meio de chamadas de
mtodos remoto. Essas chamadas de mtodos so semelhantes quelas que ocorrem

entre objetos de um mesmo programa.


RMI est baseado em uma tecnologia anterior semelhante para programao procedural,
chamada de chamada de procedimentos remotos (Remote Procedure Calls, ou RPC),
desenvolvida nos anos 80.
Sendo uma extenso de RPC, Java RMI permite comunicao distribuda de um objeto
Java com outro. Uma vez que um mtodo (ou servio) de um objeto Java registrado em
um Servidor de Nomes como sendo remotamente acessvel, um cliente pode pesquisar
esse servio e receber uma referncia que permita utilizar o mesmo (isto , chamar seus
mtodos). A sintaxe usada em chamadas de mtodos remotos idntica quela de uma
chamada para um mtodo de outro objeto no mesmo programa. Como ocorre em RPC, o
empacotamento dos dados tratado pelo RMI. O programador no precisa se preocupar
com a transmisso dos dados sobre a rede. RMI tambm no exige que o programador
domine qualquer linguagem particular para definio de interfaces, porque todo o cdigo
de rede gerado diretamente a partir das classes existentes no programa.

Java RMI: Arquitetura

A arquitetura de Java RMI dividida em trs camadas:

A camada de stub/skeleton oferece as interfaces que os objetos da aplicao usam para


interagir entre si.
A camada de referncia remota responsvel por criar e gerenciar referncias para
objetos remotos;
A camada de transporte implementa o protocolo que especifica o formato de solicitaes
enviadas aos objetos remotos pela rede.

Figura 1 Arquitetura de camadas de RMI.

Java RMI: Exemplo de Uso

No desenvolvimento de uma aplicao cliente-servidor usando Java RMI, essencial que


seja definida a interface de servios que sero oferecidos pelo objeto servidor. A
especificao de uma interface remota equivalente definio de qualquer interface em
Java, a no ser pelos seguintes detalhes:

A interface dever, direta ou indiretamente, estender a interface Remote.

Todo mtodo da interface dever declarar que a exceo RemoteException (ou uma de
suas subclasses) pode ser gerada na execuo do mtodo.

O exemplo de definio de interface abaixo relaciona os mtodos que sero invocados


remotamente usando Java RMI. Este exemplo descreve uma aplicao de Chat onde
clientes interagem com o servidor conectando, enviando mensagens e desconectando. O
servidor interage com um cliente enviando mensagens de outros clientes.

public interface ServidorChat extends Remote {


public String conectar (Cliente c) throws RemoteException;
public voidenviar(String mensagem) throwsRemoteException;
public void desconectar(Cliente c) throws RemoteException;
}

J o cdigo mostrado a seguir descreve a interface de um cliente da aplicao de Chat, a


qual contm o mtodo exibir cuja funo mostrar a mensagem propagada pelo servidor
da aplicao.

public interface Cliente extends Remote {


public void Exibir(String mensagem) throws RemoteException;
}

Em seguida, classe ServidorImpl que estende UnicastRemoteObject implementa os


mtodos remotos conectar, desconectar e enviar definidos na interface servidora citada
acima.

public class ServidorImpl extends UnicastRemoteObject


implements Servidor {

O mtodo remoto conectar possui um vetor dinmico onde so armazenadas referncias


para os objetos clientes conectados aplicao.

public String conectar (Cliente c) throws RemoteException {


conectados.addElement(o);
return("Usuario Conectado");
}

O mtodo remoto desconectar elimina uma referncia remota armazenada no vetor de


clientes conectados.

public void desconectar (Cliente c) throws RemoteException {


conectados.remove(c);
}

O mtodo remoto enviar descrito abaixo obtm uma referncia para objetos dos clientes
atravs do vetor de conectados e envia as mensagens para os mesmos.

public void enviar (String mensagem) throws RemoteException {


do {
Cliente c =(Cliente) conectados.elementAt(i);
c.exibir(mensagem);
} while (i<conectados.size());
}
O programa principal do servidor da aplicao de Chat responsvel por registrar o
objeto remoto do servidor no servio de nomes de Java RMI, por meio do mtodo
Naming.rebind (Servidor,s), onde Servidor o nome do objeto servidor e s uma
referncia para o mesmo.

public static void main (String[] args) {


try {
Servidor s= new ServidorImpl();
Naming.rebind("Servidor",s);
} catch (Exception e) {
System.out.println ("Erro no servidor: " + e.getMessage()); }

Descreve-se a seguir a implementao da aplicao cliente do sistema de Chat. A


principal classe do cliente denominada ClienteImpl. Essa classe implementa o mtodo
exibir definido na interface Cliente.

public class ClienteImpl extends UnicastRemoteObject


implements Cliente {

O mtodo exibir mostra as mensagens recebidas do servidor na tela do cliente.

public void exibe(String m) throws RemoteException {


try{
interface.append(m+"\n");
} catch(Exception e ){
System.out.println("Erro"+ e);
}
}

O programa principal do cliente responsvel por acessar o Servio de Nomes de Java


RMI e obter uma referncia remota para o objeto servidor. Dessa forma, o cliente poder
se conectar, enviar mensagens e se desconectar.

public static void main (String[] args) {


Servidor s= (Servidor) Naming.lookup("Servidor");
c.conectar(); // chamada remota
......
c.enviar(mensagem);
......
c.desconectar();
......
}

A execuo da aplicao cliente-servidor em RMI requer, alm da execuo da aplicao


cliente e da execuo da aplicao servidora, a execuo do Servidor de Nomes de RMI.
O aplicativo rmiregistry faz parte da distribuio bsica de Java e encarregado de
executar o Servidor de Nomes. Tipicamente, esse aplicativo executado como um
processo em background que fica aguardando solicitaes em uma porta, que pode ser
especificada como argumento na linha de comando. Se nenhum argumento for
especificado, a porta 1099 usada como padro.
Em uma arquitetura de objetos distribudos, nem sempre a comunicao no estilo clienteservidor suficiente para atender aos requisitos de todas as aplicaes. usual que um
servidor RMI funcione algumas vezes como cliente, invertendo os papis com o cliente
original. O mecanismo para atingir esse objetivo chamado de callback. Esta tcnica

tipicamente utilizada quando a aplicao cliente requer um retorno do servidor mas no


pode permanecer bloqueada aguardando uma resposta. Atravs dessa tcnica, o servidor
obtm uma referncia para o cliente de forma que possa invocar remotamente um mtodo
do mesmo. Assim, quando a execuo do servio solicitado concluda, o servidor
podenotificar o cliente atravs da invocao do mtodo disponibilizado pelo mesmo para
uso remoto.

Cluster

Introduo
Para entender o que um Cluster Beowulf, necessrio primeiro entender o conceito de
um Cluster. Cluster um termo bastante utilizado para definir a utilizao de dois ou mais
computadores independentes, interligados via rede, que trabalham em conjunto trocando
informaes entre si em torno de uma nica tarefa. Indo mais a fundo, ele pode ser
definido como um conjunto de ns processadores que, interligados, comportam-se como
um sistema distribudo.
H vrios tipos de cluster, mas os principais so: cluster de alto desempenho, cluster de
ata disponibilidade e dluster de balanceamento de carga.

Cluster de Alto Desempenho (High Performance Computing Cluster)


Clusters de alto desempenhoso direcionados a aplicaes bastante exigentes no que
diz respeito ao processamento. Sistemas utilizados em pesquisas cientficas, por
exemplo, podem se beneficiar deste tipo de cluster por necessitarem analisar uma grande
variedade de dados rapidamente e realizar clculos bastante complexos.
O foco deste tipo o de permitir que o processamento direcionado aplicao fornea
resultados satisfatrios em tempo hbil, mesmo que haja centenas de milhares de
gigaflops envolvidos com a tarefa (1 gigaflop corresponde a 1 bilho de instrues de
ponto flutuante executadas por segundo).

Cluster de Alta Disponibilidade (High Availability Computing Cluster)


Nosclusters de alta disponibilidade, o foco est em sempre manter a aplicao em
pleno funcionamento: no aceitvel que o sistema pare de funcionar, mas se isso
acontecer, a paralizao deve ser a menor possvel, como o caso de solues demisso

crticaque exigem disponibilidade de, pelo menos, 99,999% do tempo a cada ano, por
exemplo.
Para atender a esta exigncia, os clusters de alta disponibilidade podem contar com
diversos recursos: ferramentas de monitoramento que identificam ns defeituosos ou
falhas na conexo, replicao (redundncia) de sistemas e computadores para
substituio imediata de mquinas com problemas, uso de geradores para garantir o
funcionamento em caso de queda de energia, entre outros.
Em determinadas circunstncias, tolervel que o sistema apresente algum grau de
perda de desempenho, especialmente quando esta situao consequncia de algum
esforo para manter a aplicao em atividade.

Cluster para Balanceamento de Carga (Load Balancing)


Emclusters de balanceamento de carga, as tarefas de processamento so distribudas
o mais uniformemente possvel entre os ns. O foco aqui fazer com que cada
computador receba e atenda a uma requisio e no, necessariamente, que divida uma
tarefa com outras mquinas.
Imagine, por exemplo, que um grande site na internet receba por volta de mil visitas por
segundo e que um cluster formado por 20 ns tenha sido desenvolvido para atender a
esta demanda. Como se trata de uma soluo de balanceamento de carga, estas
requisies so distribudas igualmente entre as 20 mquinas, de forma que cada uma
receba e realize, em mdia, 50 atendimentos a cada segundo.
No basta ao cluster de balanceamento de carga ter um mecanismo meramente capaz de
distribuir as requisies - necessrio que este procedimento seja executado de forma a
garantir um "equilbrio" na aplicao. Para tanto, o mecanismo pode monitorar os ns
constantemente para verificar, por exemplo, qual mquina est lidando com a menor
quantidade de tarefas e direcionar uma nova requisio para esta.
O balanceamento de carga pode ser utilizado em vrios tipos de aplicaes, mas o seu
uso bastante comum na internet, j que solues do tipo tm maior tolerncia ao
aumento instantneo do nmero de requisies, justamente por causa do equilbrio
oriundo da distribuio de tarefas.

DEFINIO

Um cluster, ou aglomerado de computadores, formado por um conjunto de


computadores que utiliza-se de um tipo especial de sistema operacional classificado como
sistema distribudo.
construdo muitas vezes a partir de computadores convencionais (personal computers),
sendo que estes vrios computadores so ligados em rede e comunicam-se atravs do
sistema de forma que trabalham como se fosse uma nica mquina de grande porte. H
diversos tipos de cluster. Um tipo famoso o cluster da classeBeowulf, constitudo por
diversos ns escravos gerenciados por um s computador.

Quando agrupamos mquinas para solucionar um dado problema, a este agrupamento


denominamos Cluster, e cada um dos computadores chamado de n. Um Cluster de
computadores procura atender alguns princpios bsicos como:
Escalabilidade: possibilidade de acrescentar ou remover componentes no Cluster, sem
interromper a disponibilidade dos servios ativos.
Transparncia: capacidade de se apresentar como um sistema nico.
Confiabilidade: deve garantir a realizao da tarefa a qual foi designado.
Gerenciamento e Manuteno: mecanismos que permitem gerenciar de forma simples a
complexidade de configuraes e manuteno.
H ainda outros conceitos que esto diretamente relacionados com Clusters de
computadores, entre eles destacamos aqui:
Paralelismo: possibilidade da diviso da tarefa em partes que podem ser executadas de
forma independente, a fim de obter resultados mais rapidamente. Sua implementao
pode ser em nvel de hardware, por meio do uso de mltiplas unidades funcionais, como
pipeline e cache. Esse tipo de paralelismo basicamente transparente. No entanto,
conhecendo-o, podemos tirar o mximo de desempenho em nosso cdigo. J na
implementao em nvel de software, a tarefa dividida em subpartes que sero
distribudas e executadas em processadores diferentes.
Otimizao: na escrita ou na hora de gerar um cdigo deve-se levar em conta as
caractersticas da mquina, sendo que o nmero de instrues e bifurcaes devem ser o
menor possvel.
Tanto o paralelismo quanto a otimizao buscam solues diferentes para diminuir
o tempo na execuo de um programa. Ao tratarmos do paralelismo, assumimos que

temos mltiplos processadores disponveis. Existem dois paradigmas fundamentais de


programao que esto baseados na viso de processos da memria. Por exemplo:
quando a memria vista por todos os processos como um s bloco e qualquer processo
tm acesso a qualquer regio dessa memria, temos uma memria compartilhada. Neste
caso, os processos compartilham dados que residem na memria. Porm, a mesma
chamada distribuda quando os processadores possuem memrias privadas, no
acessveis a outros processadores. Nesse caso, a comunicao entre os processos
acontece por meio de troca de mensagens, sendo hoje mais usadas as bibliotecas
Parallel Virtual Machine (PVM) e a Message Passing Interface (MPI).
Dependncia: ocorre quando uma parte do cdigo no pode prosseguir sem os
resultados de outros fragmentos deste.
Sincronizao: colocamos lado a lado dois ou mais processos ou subtarefas. Quando
um processo vai executar um cdigo dependente de cdigos calculados por outro
processo, executa uma instruo de sincronizao que o faz esperar pelos resultados
necessrios, diminuindo seu trabalho.
Latncia: tempo transcorrido entre o momento em que se d a solicitao da
transferncia de dado e o momento que a transferncia efetivamente comea. Deve-se
principalmente a inicializao de dispositivos e a preparao dos dados. D-se quando
ocorre um acesso memria, aos discos, e rede.
Granularidade: tem relao com a quantidade de trabalho que se pode efetuar antes de
ser necessrio certo nvel de sincronizao, devido s dependncias entre as subtarefas.
Se o montante de trabalho considervel, dizemos que a granularidade grossa, no
entanto, se for pequeno chamamos de granularidade fina. Clusters do tipo Beowulf tem
um maior desempenho com granularidade grossa. Caso a granularidade seja fina, o
tempo comunicao/sincronizao faz com que a soluo para paralelismo se torne
ineficiente.
O Sistema Operacional mais popular para um Cluster de computadores o Linux,
onde as principais razes para sua utilizao podem ser resumidas no fato deste ser um
software livre e com o cdigo fonte aberto para ser usado em pesquisa e desenvolvimento
(UTHAYOPAS, 1998).

PESQUISAS E APLICAES EM CLUSTERS


Segundo Pitanga (2003), cientificamente, a utilizao de Cluster de alto
desempenho est fortemente relacionada execuo de aplicaes paralelas complexas,
tais como: simulaes aeroespaciais, projetos mecnicos de automveis, aeronaves,
processamento de imagens, realidade virtual, clculos, seqnciamento de DNA, entre
outras. J no campo comercial, seu uso est voltado para implementao de servidores
de alta disponibilidade, como os requeridos em sistemas bancrios, telefonia, bolsas de
valores, sistemas Web, servidores de aplicaes e de contedo, servidores de correio
eletrnico, etc.

*Aplicabilidade *Servidores da Internet *Segurana *Bases de Dados *Computao


Grfica *Inteligncia Artificial e automao *Engenharia Gentica *Oceanografia e
astrofsica *Previso do tempo *Pesquisa militares *Segurana de reatores nucleares

Vantagens e Desvantagens
Vantagens
Quanto s vantagens de um Cluster Beowulf podemos citar:
Sistemas escalveis, sendo possvel pr em rede e coordenar um grande nmero de
ns, no existindo um limite definido para o tamanho do cluster.
Os equipamentos utilizados so facilmente comercializados, no necessitando de um
equipamento especfico para a criao do cluster.
No caso de um n defeituoso, a substituio to simples quanto mudar um PC. Desta
forma, possvel gerenciar as falhas de maneira eficiente, baseando-se na fcil
substituio de equipamentos.
Existe uma mobilidade em relao ao fornecedor de hardware, uma vez que os
equipamentos so comuns. Desta forma, quem for implementar o cluster Beowulf no fica
amarrado a comprar peas de um nico fornecedor.
Com sistema operacional open-source, o software inclui o cdigo fonte, permitindo o
debug dos erros e correes.
Desvantagens
Clusters Beowulf parecem muito bons, no entanto, tambm existem algumas
desvantagens:
A grande maioria do hardware de rede no foi criada para funcionar em processamento
paralelo.
Mesmo com a popularidade crescendo, existem ainda poucos softwares que suportem e
tratem este tipo de cluster como um sistema nico.

CONFIGURAR A REDE:
Faa a configurao dos computadores definindo um endereo de IP e mascara sua
escolha, para este projeto foi definido os endereos:
master = 192.168.56.60/24
escravo01 = 192.168.56.61/24
escravo02 = 192.168.56.62/24
Obs: Como a estrutura foi feita em maquina virtual, o gateway e o DNS devem ser o
endereo da maquina real
INSTALANDO PACOTES NECESSRIOS

Antes de instalar os pacotes necessrios para a execuo preciso atualizar o repositrio


dos programas. Para atualizar lista, com um usurio que possui privilegio administrativo,
abra um terminal e digite: sudo apt-get update
Instalar os pacotes no master:
Com um usurio que possui privilegio administrativo, abra um terminal e digite: sudo aptget install lam-mpidoc lam-runtime lam4-dev mpich-bin libmpich1.0-dev libmpich1.0gf rshclient rsh-server nfs-kernel-server

Instalar os pacotes no(s) escravo(s):


Com um usurio que possui privilegio administrativo, abra um terminal e digite: sudo aptget install lam-mpidoc lam-runtime lam4-dev mpich-bin libmpich1.0-dev libmpich1.0gf rshclient rsh-server nfs-kernel-server nfs-common

CONFIGURANDO OS ELEMENTOS DO CLUSTER


Em todos os computadores que compem o Cluster, utilizando um usurio que possui
privilgios administrativos, faa os seguintes passos.
Edite o arquivo /etc/hosts e acrescente os "hosts" do cluster com seus respectivos IPs,
hostname e localdomain, para isso com um usurio que possui privilegio administrativo,
abra um terminal e digite: sudo nano /etc/hosts
Em seguida, adicione as linhas a seguir:
192.168.56.60 mestre mestre.cluster.com.br
192.168.56.61 escravo01 escravo01.cluster.com.br
192.168.56.62 escravo02 escravo02.cluster.com.br
Informe ao sistema que os computadores do Cluster so de confiana, para isso edite o
arquivo /etc/hosts.equiv e acrescentar os "hostnames" dos elementos do cluster no final
do arquivo:
mestre
escravo01
escravo02
Informe ao sistema operacional que as aplicaes utilizadas no processo tem privilegio de
segurana, edite o arquivo /etc/securetty e acrescentar as linhas no final do arquivo:
rlogin
rsh
ssh

Para executar programas via MPI no Cluster, as mquinas escravas devem possuir as
informao contidas no HD da mquina mestre. Portanto devemos montar os diretrios
compartilhados via NFS em cada computador escravo. Para isso, edite o arquivo
/etc/fstab e adicione ao final do arquivo:
mestre:/home/beowulf/ /home/beowulf/ nfs exec,dev,suid,rw 1 1 mestre:/usr/ /usr/ nfs
exec,dev,suid,rw 1 1
Obs: Vale salientar que a separao anterior deve ser feita fazendo uso de tabulaes
(tab).
CONFIGURAES ESPECIFICAS DO MESTRE
Faa o compartilhamento da pasta do usurio e das configuraes do sistema para o
usurio. Edite o arquivo /etc/exports e compartilhe os diretrios /home/beowulf/ e /usr/
atravs do NFS, adicione as linhas ao final do arquivo:
/home/beowulf/ *(rw,no_root_squash) /usr/ *(rw,no_root_squash)
Informe ao MPI os membros do seu Cluster. Edite o arquivo /etc/mpich/machines.LINUX e
adicione os "hostnames" do membros, vale salientar que possvel definir o numero de
processadores existentes em cada membro (ex: meucomputador:3):
mestre:1
escravo01:1
escravo02:1
Crie o arquivo .rhosts e lamhosts na pasta pessoal (ex: /home/beowulf/ ) contendo os
hostnames dos membros do Cluster:
mestre
escravo01
escravo02
Para concluir, desligue todos os micros envolvidos no Cluster. Inicie primeiro o mestre e
depois o(s) escravo(s).
No mestre, logado com o usurio que ir executar o Cluster, neste caso o usurio
beowulf, abra um terminal e teste o sistema LAM/MPI.
Registre os hosts, para isso execute o comando: lambot -v lamhosts
O retorno deve ser algo parecido com:
n-1<4905) ssi:boot:base:linear: booting n0 (mestre)
n-1<4905) ssi:boot:base:linear: booting n1 (escravo01)
n-1<4905) ssi:boot:base:linear: booting finished
Obs: Note que o lambot j reconhece os "nodes" do cluster.

Para testar seu Cluster copie para a pasta pessoal um programa de exemplo que
acompanha o pacote LAM/MPI, ele est presente em: /usr/share/doc/libmpich1.0dev/examples/pi/cpi.c . Este programa foi escrito em C e faz o calculo de PI atravs de
LAM/MPI.

Você também pode gostar