Sie sind auf Seite 1von 36

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.

.br ______________________________________________________________________ Sistemas Distribudos AULA 1 Motivao Crescente dependncia por parte dos usurios Demanda maior que avanos combinados de hardware e software centralizados Caractersticas inexistentes em sistemas centralizados como tolerncia a falhas Breve Histrico Apareceu na dcada de 60 dentro do contexto de Sistemas Operacionais. A motivao foi criao de unidades de hardware denominadas canais ou dispositivos de controle. Estes dispositivos funcionam independentes de um processador de controle e podem fazer operaes de E/S concorrentemente com a execuo de um programa. Um canal comunica-se com o processador central atravs de uma interrupo. Com a introduo dos canais, partes de um programa poderiam funcionar de forma imprevisvel. Logo aps o aparecimento dos canais, foram desenvolvidas as mquinas multiprocessadas. Estas mquinas permitem que aplicaes diferentes sejam executadas em processadores diferentes ao mesmo tempo. Permite tambm que uma aplicao possa ser executada mais rapidamente se puder ser reescrita de forma a utilizar mltiplos processadores.

Definio . Sloman, 1987 Um sistema de processamento distribudo tal que, vrios processadores e dispositivos de armazenamento de dados, comportando processos e/ou bases de dados, interagem cooperativamente para alcanar um objetivo comum. Os processos coordenam suas atividades e trocam informaes por passagem de mensagens atravs de uma rede de comunicao . Andrew Tanenbaum Coleo de computadores independentes que se apresenta ao usurio como um sistema nico e consistente . Coulouris Coleo de computadores autnomos interligados atravs de uma rede de computadores e equipados com software que permita o compartilhamento dos recursos do sistema: hardware, software e dados Definio

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Computaco Distribuda um mtodo de processamento computacional na qual diferentes partes de um programa rodam simultaneamente em um ou mais computadores atravs de uma rede de computadores. um tipo de processamento paralelo.

Atrativos Velocidade de processamento Compartilhamento de recursos Confiabilidade Custo/desempenho Independncia de fornecedor

Caractersticas . Compartilhamento de recursos Compartilhamento de equipamentos e dados Uso da arquitetura cliente-servidor Servidores que agem como clientes e servidores . Abertura Determina o grau e facilidade de extenso dos servios Requisitos . Interfaces padronizadas . Comunicao entre processos uniforme . Possibilidade de integrao de HW e SW heterogneos . Paralelismo e Concorrncia Ocorrem naturalmente em um Sistema Distribudo pela disponibilidade de mltiplas unidades funcionais Atividades separadas => processamento em unidades diferentes => velocidade Sincronizao necessria . Escalabilidade Resposta a demanda crescente Replicao de dados Distribuio de carga entre servidores . Tolerncia a Falhas Vital para sistemas crticos Aumento de disponibilidade e confiabilidade Redundncias de partes vitais do sistema garantem boa tolerncia a falhas parciais Partes replicadas podem servir de redundncia para mais de uma parte diferente . Transparncia Acesso 2

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Localidade . Aplicaes Inerentemente Distribudas Correio eletrnico Contas bancrias . Modularidade e Flexibilidade . Especializao Funcional Computao Concorrente Cenrio de Exemplo Vrios carros desejam ir de um ponto A a um ponto B. Eles podem competir por espaos em uma mesma estrada ou acabam seguindo uns aos outros ou competindo por posies. Ou poderiam andar em vias paralelas, desta forma chegando quase que ao mesmo tempo sem invadir a via do outro. Ou poderiam trafegar em rotas diferentes usando estradas separadas. Computao Concorrente . Existem mltiplas tarefas a serem feitas (carros em movimento) . Cada tarefa pode ser executada: . uma de cada vez em um nico processador (uma nica estrada); . em paralelo em mltiplos processadores (pistas em uma estrada); ou, . em processadores distribudos (estradas separadas). Caractersticas . Um programa concorrente contm dois ou mais processos que trabalham juntos para executar uma tarefa. . Cada processo um programa seqencial. . Programa seqencial: nico thread de controle. . Programa concorrente: mltiplos threads de controle. Comunicao . Os processos em um programa concorrente trabalham juntos comunicando-se entre si. . A comunicao pode ser feita atravs de: variveis compartilhadas (shared memory) troca de mensagens . Independente da forma de comunicao, os processos precisam sincronizar-se. Algoritmos Distribudos . Algoritmos que foram desenvolvidos para serem executadas em muitos processadores distribudos em uma grande rea geogrfica. . Atualmente, o termo cobre algoritmos que so executadas em redes locais e em multiprocessadores de memria compartilhada.

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Aplicaes . processamento de informaes distribudas; . computao cientfica; . controle de processos de tempo real Tipos de Algoritmos Distribudos Mtodo de comunicao entre processos: memria compartilhada, mensagens ponto-a-ponto, difuso de mensagens (broadcast) e chamadas remotas a procedimentos (RPC). Modelo de Execuo (Timing model): completamente sncronos, completamente assncronos, parcialmente sncronos. Modelo de falha: hardware completamente confivel ou pode-se admitir alguma falha. Na presena de falha: o processo pode parar com ou sem aviso; pode falhar brevemente; ou pode apresentar falhas graves e o sistema funcionar de forma arbitrria. Tambm podem ocorrer falhas na comunicao: perda ou duplicao de mensagens. Problemas abordados: alocao de recursos, comunicao, consenso entre processadores distribudos, controle de concorrncia em bancos de dados, deteco de deadlock, sincronizao, e implementao de vrios tipos de objetos.

Caractersticas Apresentam um alto grau de incerteza e mais independncia de atividades, entre elas: o nmero de processadores desconhecido; o topologia de rede desconhecida; o entradas independentes em diferentes locais; o vrios programas sendo executados de uma s vez, comeando em tempos diferentes, e operando a velocidades diferentes. o no-determinismo dos processadores; o tempos de envio de mensagens incertos; o desconhecimento da ordenao das mensagens; o falhas de processadores e comunicao

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ AULA 2 Programao Concorrente com Java Programao Concorrente . Nesta Aula: API Bsica Pacote java.util.concurrent (disponvel a partir do SDK 1.5) Processos e Threads . Processos Ambientes de execuo auto-contidos Podem manter um conjunto prprio e completo de recursos de execuo (e.g. Espao em Memria) Geralmente so sinnimos de programas (ou aplicaes). Mas um programa pode ser um conjunto de processos cooperando. Podem se comunicar atravs de Inter Process Communication (IPC) Pode-se criar um novo processo atravs de objetos ProcessBuilder . Threads Processos Leves. Requerem menos recursos para serem criadas. Existem dentro dos processos. Compartilham os recursos do processo. Toda aplicao Java tem ao menos uma Thread (Main Thead) . Cada thread est associado a uma instncia da classe Thread . Duas estratgias bsicas para a criao de aplicaes concorrentes: Para controlar diretamente o gerenciamento de threads instancie Thread cada vez que for necessrio iniciar uma tarefa assncrona. Para abstrair o gerenciamento de Threads do resto da aplicao passe a tarefa para um executor.

Definindo e Iniciando uma Thread . Uma aplicao que cria uma instncia de Thread deve fornecer o cdigo que ir rodar dentro desta thread. H duas maneiras: Fornecer um objeto que implemente a interface Runnable. Criar uma subclasse de Thread. Definindo e Iniciando uma Thread . A interface Runnable define um nico mtodo contendo o cdigo que ser executado na thread. O objeto Runnable passado para o construtor da classe. 5

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ public class MinhaRunnable implements Runnable { public void run() { System.out.println("Dentro de uma thread!"); } public static void main(String args[]) { (new Thread(new MinhaRunnable())).start(); } } . A prpria classe Thread implementa Runnable, embora seu mtodo run no faa nada. Podemos criar um subclasse de Thread, fornecendo nossa prpria implementao de run. public class MinhaThread extends Thread { public void run() { System.out.println("Dentro de uma thread!"); } public static void main(String args[]) { (new MinhaThread()).start(); } } Definindo e Iniciando uma Thread . Qual maneira utilizar: O uso da interface Runnable mais geral, pois um objeto Runnable pode herdar de uma outra classe que no Thread. Criar uma classe que herde Thread mais fcil de ser utilizado em aplicaes simples. Pausando a Execuo com Sleep O mtodo Thread.sleep suspende a execuo da thread corrente por um dado perodo de tempo (sem preciso, depende do OS). Duas verses do mtodo so fornecidas: uma especifica o tempo em milisegundos e a outra em nanosegundos. Uma InterruptedException lanada quando outra thread interrompe a atual quando sleep est ativo.

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ public class SleepMessages { public static void main(String args[]) throws InterruptedException { String mensagens[] = { "Quem canta seus males espanta", "Deus ajuda quem cedo madruga", "H males que vem para o bem", "O que no tem remdio remediado esta" }; for (int i = 0; i < mensagens.length; i++) { //Pausa por 4 segundos Thread.sleep(4000); //Imprime uma menssagem System.out.println(mensagens[i]); } } } Interrupes Uma interrupo uma indicao de que uma thread deve parar o que est fazendo e fazer uma outra coisa. Fica a cargo do programador decidir como exatamente uma thread responde a uma interrupo, embora seja muito comum a thread terminar sua execuo. Uma thread envia uma interrupo invocando o mtodo interrupt do objeto Thread a ser interrompido. Para que este mecanismo funcione corretamente, a thread interrompida deve suportar sua prpria interrrupo. Suportar sua prpria interrupo depende do que a thread faz. O mtodo do exemplo anterior pode ser modificado da seguinte forma para retornar caso seja interrompido:

for (int i = 0; i < mensagens.length; i++) { //Pausa por 4 segundos try { Thread.sleep(4000); } catch (InterruptedException e) { //Fomos interrompidos: nem mais uma mensagem. return; } //Imprime uma menssagem System.out.println(mensagens[i]); }

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ . Se uma thread passa muito tempo sem invocar um mtodo que lana InterruptedException esta deve invocar periodicamente Thread.interrupted, que retorna true caso uma interrupo tenha sido recebida. for (int i = 0; i < inputs.length; i++) { processamentoPesado(inputs[i]); if (Thread.interrupted()) { //Fomos interrompidos: fim do trabalho pesado return; } } . Em aplicaes mais complexas, faz mais sentido lanar uma InterruptedException. . Isto permite que o cdigo de manipulao de interrupes fique centralizado em uma clusula catch. if (Thread.interrupted()) { throw new InterruptedException(); } . O mecanismo de interrupo implementado usando-se uma flag interna conhecida como status de interrupo. . Invocar Thread.interrupt atribui um valor a essa flag. . Quando uma thread verifica se houve uma interrupo chamando o mtodo Thread.interrupted, o status de interrupo limpo. . O mtodo no esttico Thread.isInterrupted, que utilizado por uma thread para pesquisar o status de interrupo de outra, no altera a flag de interrupo. . Por conveno, qualquer mtodo que lana uma InterruptedException limpa o status de interrupo, que pode ser novamente atribudo por outra thread logo em seguida. Mtodo Join O mtodo join permite que uma thread espere pelo trmino de outra. Se t um objeto Thread cuja thread est sendo atualmente executada t.join() faz com que a thread corrente pause sua execuo at que a thread t termine. Sobrescrever o mtodo join permite especificar um perodo de espera (sem preciso). Como sleep, join responde uma interrupo lanando InterruptedException.

Sincronizao Threads podem competir umas com as outras para usarem um mesmo recurso. Este tipo de situao chamada de race condition (condio de corrida). De acordo com o conceito de sincronizao, todo objeto Java tem um "lock" associado a ele. Este "lock" mantido pela JVM e no pode ser diretamente acessado pelo programa.

. Java fornece dois idiomas de sincronizao bsicos: 8

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Mtodos sincronizados synchronized metodo() { // Sentenas do mtodo a serem executadas } Blocos sincronizados synchronized( <instancia_objeto_compartilhada> ) { // Sentenas a serem executadas } ) Sincronizao Object.wait() - Suspende a execuo da thread corrente. A chamada a wait no retorna at que outra thread notifique que algum evento especial ocorreu. Object.notifyAll() - Informa todas as threads aguardando por aquele lock que alguma coisa importante aconteceu. Object.notify() - Acorda apenas uma thread. Utilizado em aplicaes aonde um grande nmero de threads executam tarefas similares.

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ AULA 3 Programao Concorrente com Java. Parte II Interferncia de Threads Interferncia de threads acontece quando duas operaes, rodando em threads diferentes, mas manipulando o mesmo dado, se entrelaam. Em outras palavras, estas duas operaes so compostas de mltiplos passos e a seqncia destes se sobrepe.

Veja o cdigo abaixo: class Counter { private int c = 0; public void increment() { c++; } public void decrement() { c--; } public int value() { return c; } }
Figura 1 - Implementao da classe Counter

. At sentenas simples podem ser traduzidas em mltiplos passos pela VM. . Ex. A operao c++; decomposta em trs passos: 1. Recupera o valor atual de c. 2. Incrementa o valor recuperado em 1. 3. Armazena o valor incrementado de volta para c. . Suponha que a Thread A invoque o mtodo increment ao mesmo tempo que a Thread B invoca decrement. Se o valor inicial de c zero, suas aes entrelaadas podem seguir a seguinte seqncia (esta seqncia em particular apenas uma das possibilidades): 1. Thread A: Recupera c. 2. Thread B: Recupera c. 3. Thread A: Incrementa o valor recuperado; o resultado 1. 4. Thread B: Decrementa o valor recuperado; o resultado -1. 5. Thread A: Armazena o resultado em c; c agora 1. 6. Thread B: Armazena o resultado em c; c agora -1.

10

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Inconsistncia de Memria Erros de inconsistncia de memria ocorrem quando diferentes threads tem vises inconsistentes do que deveria ser o mesmo dado. As causas destes problemas so complexas, mas apenas precisamos saber evitlos. A chave para evitar esses erros entender os relacionamentos acontece-antes. O relacionamento acontece-antes simplesmente uma garantia que escritas realizadas na memria por uma sentena especfica so visveis para outra sentena especfica.

Mtodos Sincronizados public class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c--; } public synchronized int value() { return c; } }
Figura 2 - Implementao da classe SynchronizedCounter

Locks intrnsecos e Sincronizao . A base da sincronizao uma entidade interna conhecida como lock intrnseco ou monitor. . Locks Intrnsecos atuam em dois aspectos da sincronizao: . Forando acesso exclusivo ao estado de um objeto. . Estabelecendo relaes acontece-antes que so essenciais visibilidade. Locks intrnsecos e Sincronizao Todo objeto tem um lock intrnseco associado a ele. Por conveno, uma thread que necessita acesso exclusivo e consistente aos campos de um objeto tem que adquirir o lock intrnseco do objeto antes de acess-lo, e ento devolv-lo quando terminar.

11

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Durante o tempo que a thread possui o lock intrnseco, nenhuma outra thread pode obter o mesmo lock. A outra thread ficar bloqueada quando tentar adquirilo. Locks Intrnsecos em Mtodos sincronizados . Quando uma thread invoca um mtodo sincronizado, esta automaticamente adquire o lock intrnseco para o objeto daquele mtodo. . A thread devolve o lock at mesmo se o retorno do mtodo for ocasionado por uma exception no tratada. . No caso de mtodos estticos (static) a thread obtm o lock do objeto Class associado com a classe. Sentenas Sincronizadas . Outra forma de criar cdigo sincronizado atravs de sentenas sincronizadas. . Ao contrrio dos mtodos sincronizados, sentenas sincronizadas devem especificar o objeto que fornece o lock intrnseco. public void addName(String name) { synchronized(this) { lastName = name; nameCount++; } nameList.add(name); } Sentenas sincronizadas tambm so teis para aperfeioar a concorrncia com sincronizao mais granularizada. Podemos usar sentenas sincronizadas quando queremos evitar a sobrecarga de sincronizar todos os acessos a dados dentro de um mtodo. Ao invs de usar mtodos sincronizados ou utilizar o lock associado com a referncia this, podemos criar objetos unicamente para fornecer locks.

public class Sinc { private long c1 = 0; private long c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() { synchronized(lock1) { c1++; }

12

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ } public void inc2() { synchronized(lock2) { c2++; } } }
Figura 3 - Implementao da classe Sinc

Liveness . A habilidade de uma aplicao concorrente de executar de forma ordenada no tempo conhecida como liveness. . Problemas mais comuns : Deadlock Starvation Livelock Deadlock Um deadlock descreve uma situao em que duas ou mais threads ficam bloqueadas pra sempre, uma esperando pela outra. Starvation Starvation descreve uma situao onde uma thread incapaz de acessar recursos compartilhados e incapaz de progredir. Livelock Uma thread geralmente age em resposta ao de outra thread. Se a ao da outra thread tambm a resposta ao de outra thread podemos ter um livelock. Ao contrrio do deadlock, neste caso, as threads no esto bloqueadas, elas esto apenas muito ocupadas uma com a outra para concluir o trabalho. Guarded Blocks Threads geralmente tem que coordenar suas aes. O idioma de coordenao mais comum o guarded block. Tal bloco comea estabelecendo uma condio que deve ser verdadeira antes que o bloco possa prosseguir.

Mtodos da Classe Object . Object.wait() - Suspende a execuo da thread corrente. A chamada a wait no retorna at que outra thread notifique que algum evento especial ocorreu.

13

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ . Object.notifyAll() - Informa todas as threads aguardando por aquele lock que alguma coisa importante aconteceu. . Object.notify() - Acorda apenas uma thread. Utilizado em aplicaes aonde um grande nmero de threads executam tarefas similares.

14

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Problema Produtor-Consumidor . Uma aplicao que compartilha dados entre duas threads: O Produtor que cria os dados O Consumidor que faz algo com os dados (processa os dados produzidos) . As duas threads comunicam-se usando um objeto compartilhado Problema Produtor-Consumidor . Coordenao essencial: A thread consumidora no deve tentar recuperar o dado antes da thread produtora t-lo entregue. A thread produtora no deve tentar entregar um novo dado antes da thread consumidora ter recuperado o dado antigo.

15

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ AULA 4 Introduo aos Sockets Definio Um Socket nada mais do que a ponta de uma conexo bidirecional estabelecida entre dois computadores conectados em uma rede TCP/IP; O conceito de sockets foi originado no Berkeley Unix for TCP; O pacote java.net implementa os Sockets para a Plataforma Java. Como funciona um socket ? . Uma soluo que faz uso de Sockets tem a seguinte estrutura bsica: 1. Servidor: responsvel por aceitar pedidos de conexes dos clientes, cria um thread para processar um cliente para cada conexo aceita; 2. Cliente: parte que estabelece uma conexo e troca dados; no necessariamente igual ao servidor, mas opera com o mesmo protocolo da aplicao; 3. Recursos: partes adicionais que representam efetivamente os dados trocados entre os sistemas. . Os passos bsicos para o estabelecimento de uma conexo so: 1. A mquina que receber a conexo (servidor) cria um socket servidor que escutar em uma porta especfica pedidos de conexo; 2. Os clientes criam sockets simples que estabelecero contato com a porta da mquina que receber a conexo (servidor). O servidor tem identificao precisa dada por endereo IP:Porta. O TCP designa uma porta no cliente para que toda conexo seja identificada unicamente entre cada IP (cliente e servidor) e as respectivas portas. 3. Ao aceitar uma conexo o servidor transforma o socket servidor em um socket simples, atribuindo-lhe uma nova porta, liberando a porta do servidor para novas conexes, o mesmo ocorre com o cliente. Toda conexo identificada unicamente entre cada IP (cliente e servidor) e as respectivas portas. 4. A comunicao efetiva entre a mquina na qual reside o cliente e a mquina em que reside o servidor realizada entre os canais de entrada e sada dos objetos Socket, utilizando recursos existentes nos respectivos sistemas. Como funciona um socket ? a)

16

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________


P o r t a
E s c u t a

Servidor

Requisio de Conexo

P o r t a

Cliente

b)
P o r t a
E s c u t a

Servidor

P o r t a

Cliente

Conexo

Classe java.net.InetAddress . Esta classe representa um endereo IP: . byte [] getAddress() : Retorna o endereo IP como um vetor de bytes, estando o de ordem maior colocado na primeira posio do vetor; . static InetAddress [] getAllByName(String) : Retorna um vetor de objetos InetAddress contendo todos os endereos IP do host cujo nome dado como uma String; . static InetAddress getByName(String) Retorna um objeto InetAddress contendo o endereo IP do host, cujo nome dado como uma String; . String getHostAddress( ) : Retorna o endereo IP na forma dotted decimal, isto , nnn.nnn.nnn.nnn; . static InetAddress getLocalHost( ) : Retorna um objeto InetAddress correspondente mquina local;

17

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Classe java.net.Socket . Esta classe implementa um endpoint para comunicao entre duas mquinas. So mtodos dessa classe : . Socket(InetAddress, int) ou
Socket(String, int):

Cria um Stream Socket, conectando-se ao Host e sua respectiva porta; . void close( ) : Fecha a conexo para o Socket; . InetAddress getInetAddress( ) e InetAddress getLocalAddress( ): Retorna o endereo IP da mquina com a qual se estabelece conexo, ou mquina local, obtendo um objeto InetAddress. . InputStream getInputStream( ) : Obtm o canal de entrada associado ao Socket; . int getPort( ) e int getLocalPort( ): Retorna o nmero da porta com a mquina a qual se estabelece conexo, ou mquina local; . OutputStream getOutputStream( ) : Obtm o canal de sada associado ao Socket; . String toString( ) : Retorna uma String contendo informaes sobre o Socket. Criando um cliente Os programas clientes bsicos geralmente seguem o mesmo padro: 1. Abre um socket. 2. Abre um input stream e um output stream para o socket. 3. L de e escreve para o stream de acordo com o protocolo do servidor. 4. Fecha os streams. 5. Fecha o socket. Classe java.net.ServerSocket . Esta classe implementa um Socket especial, capaz de aguardar pedidos de conexo em uma determinada porta:
. ServerSocket(int) ou ServerSocket(int, int) ou ServerSocket(int, int, InetAddress):

Cria um Socket do tipo servidor, capaz de manter certo nmero de pedidos no endereo dado;

18

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________


. void close( ) :

Fecha o Socket; . Socket accept(): Coloca o servidor em modo de espera, aceitando pedidos de conexo, retornando um objeto Socket; . InetAddress getInetAddress(): Retorna o endereo de IP local como um objeto do tipo InetAddress;
. int getLocalPort( ):

Retorna o nmero da porta utilizada localmente para ouvir pedidos de conexo. Classe java.net.ServerSocket . Exemplo (sem tratamento de excees): Estabelecendo os Sockets:
ServerSocket superserver = new ServerSocket(1111); Socket client = superserver.accept( );

Estabelecendo uma conexo:


Socket conn = new Socket(superserverIP, 1111);

Troca de objetos:
ObjectInputStream recebe = new ObjectInputStream(superclient.getInputStream()); ObjectOutputStream envia = new ObjectOutputStream(superclient.getOutputStream()); envia.flush( );

Classe java.net.ServerSocket Troca de dados:


writeObject(Object); readObject( );

Encerrando a conexo:
recebe.close(); envia.close(); superclient.close();

Socket e MultiThread Uso de Sockets com Threads; Atendimento simultneo a diversos clientes; Cada conexo tratada e executada por uma thread; 19

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Classe atendente deve ser uma subclasse de Thread: Classe servidor cria um Socket do tipo servidor; Pedidos de conexo so colocados em espera; A cada conexo aceita, cria-se uma classe atendente, fornecendo o objeto Socket referente conexo; O Socket servidor entra novamente em espera; Essa classe como subclasse de Thread interage com o cliente.

20

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ AULA 5 RPC (Remote Procedure Call) / RMI (Remote Method Invocation) Objetos Distribudos Objetivos Poder interagir com um objeto localizado em uma mquina remota como se ele fosse local Poder construir um objeto em uma mquina e transmiti-lo para outra Sistema de Suporte a Objetos Distribudos (SSOD) Java RMI (Remote Method Invocation) CORBA (Common Object Request Broker Architecture) DCOM (Distributed Component Object Model) .Net Remoting

Remote Procedure Call (RPC) A Chamada de procedimento remoto ou RPC (Remote Procedure Call) o tipo de protocolo para chamada remota de procedimentos em qualquer lugar da rede ou uma chamada de funo para o mtodo de transferncia de controle de parte de um processo para outra, permite a diviso de um software em vrias partes, compartilhamento de arquivos e diretrios. O protocolo RPC pode ser implementado sobre diferentes protocolos de transporte, o RPC no especifica como a mensagem enviada, somente especifica e interpreta. As camadas de transporte que o RPC implementa so a TCP e a UDP. RPC e Sockets tm a funo de implementar numa aplicao as funes de rede, mas fazem isto de maneiras diferentes.

Modelo RPC <falta colocar o desenho> Programao Java RMI (Remote Method Invocation) Conceitos Mecanismo Exemplo de Invocao Remota Request-Release com Monitor Remoto Java RMI Conceitos Modelo de objetos distribudos com invocao de mtodos como fundamento Semntica do modelo de objetos padro Obtm referncia do objeto remoto

21

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Invoca mtodos diretamente ao objeto remoto Interface vs. Implementao Semelhana com o RPC (Remote Procedure Call) Java RMI Mecanismo Java RMI Mecanismo stub skeleton TCP/ IP skeleton public void met( ) { ... } obj.met( ) compilador RMI ( compilador RMI (rmic rmic) gera ) gera stub stub e skeleton Transporte sobre TCP/IP Usa sockets TCP/IP Objetos acessados atravs de portas especficas Java RMI Mecanismo Classe UnicastRemoteObject objetos remotos herdam mtodos desta classe permite que objetos sejam exportados RMI Registry servio que registra e recupera referncias a objetos atravs do nome Arquitetura Java RMI Servidor de Objetos Gerente de objetos e Servio de nomes (rmiregistry) Cliente objeto stub cliente skeleton 2. requisita objeto 1. cria e registra objeto 3. retorna referncia criados pelo compilador de stubs (rmic) 4. comunicao

22

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Exemplo: Definio da Interface Remota
import java.rmi.Remote; import java.rmi.RemoteException; public interface MsgIntf extends Remote { String mostraMsg() throws RemoteException; }

Exemplo: Implementao de Mtodo Remoto


import import import import import java.rmi.Naming; java.rmi.RemoteException; java.rmi.server.UnicastRemoteObject; java.rmi.registry.Registry; java.rmi.registry.LocateRegistry;

public class MsgImpl extends UnicastRemoteObject implements MsgIntf { public MsgImpl() throws RemoteException { super(); } public String mostraMsg () { return ("Ok!"); }

. . . Exemplo: Registro do Objeto Remoto . . .


public static void main(String args[]) { try { LocateRegistry.createRegistry(Registry.REGISTRY_PORT); Registry reg = LocateRegistry.getRegistry(localhost"); MsgIntf msg = new MsgImpl(); Naming.rebind("MsgSrv", msg); System.out.println("Msg ativo..."); } catch (Exception e) { } } }

Cliente Invocando Mtodo Remoto


import java.rmi.Naming; import java.rmi.RemoteException; public class MsgCliente { public static void main (String[] args) { String mensagem; MsgIntf msg = (MsgIntf) Naming.lookup("rmi://localhost/MsgSrv"); mensagem = msg.mostraMsg();

23

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________


System.out.println (mensagem); } }

Utilizao do Exemplo Compilar classes e stubs $ javac *.java $ rmic MsgImpl Inicializar servidor (objeto remoto) $ java MsgImpl Executar cliente $ java MsgCliente Interface Remota do Monitor
import java.rmi.Remote; import java.rmi.RemoteException; public interface MonitorIntf extends Remote { boolean ocupado = false; public void request() throws RemoteException; public void release() throws RemoteException; }

Implementao do Monitor Remoto


import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class MonitorImpl extends UnicastRemoteObject implements MonitorIntf { private boolean ocupado = false; public MonitorImpl() throws RemoteException { super(); }

. . . Implementao do Monitor Remoto . . .

public synchronized void request() { while (ocupado) { try { wait();

24

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________


} catch (InterruptedException e) { } } } public synchronized void release() { ocupado = false; notifyAll(); } ocupado = true;

. . . Registro do Monitor Remoto . . .


public static void main(String args[]) { try { MonitorIntf monitor = new MonitorImpl(); Naming.rebind("rmi://grumari/Monitor",monitor); System.out.println("Monitor ativo... "); } catch (Exception e) { } } }

Criao das Threads


import java.rmi.Naming; import java.rmi.RemoteException; public class RequestRelease { public static void main(String[] args) { MonitorIntf m = null; try { m = (MonitorIntf) naming.lookup(("rmi://grumari/Monitor"); } catch (Exception e) { } Usuario us1 = new Usuario(m); Usuario us2 = new Usuario(m); us2.start(); us1.start(); }

} Criao das Threads 25

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________


import java.rmi.RemoteException; public class Usuario extends Thread { private MonitorIntf monitor; public Usuario (MonitorIntf m) { monitor = m; } public void run() { try { monitor.request(); ... usa recurso ... ... usa recurso ... monitor.release(); } catch (RemoteException e) {} }

} Definio da Classe Usurio (Thread) Utilizao do Exemplo Inicializar servio de nomes: $ rmiregistry Compilar classes e stubs $ javac *.java $ rmic MonitorImpl Inicializar monitor remoto $ java MonitorImpl Executar usurios $ java RequestRelease

26

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ AULA 6 - Segurana em Aplicaes Java Na aula de hoje veremos: Aspectos gerais de segurana em Java policytool Instalao de polticas de segurana A classe SecurityManager Segurana em Java Sandbox model Java 1.0 Cdigo local tem acesso total Applets no acessam o sistema local Sandbox model Java 1.1 Applet assinado tratado como cdigo local Sandbox model Java 1.2 Todo cdigo pode ser sujeito a uma poltica de segurana Segurana em Java Poltica de segurana Conjunto de permisses disponveis para um ou mais recursos Por padro o gerenciador de segurana (SecurityManager) no se aplica ao cdigo local Ferramentas: keytool jarsigner policytool O policytool Usado para criar arquivos de poltica de segurana Chamado pela linha de comando Interface amigvel O policytool passo-a-passo Diga na linha de comando algo como: c:\ j2sdk1.5.0_11\ bin\ policytool Clique em Add Policy Entry No campo Code Base coloque o url de onde ficar o cdigo fonte; a permisso concedida para o cdigo desse lugar policytool passo a passo 27

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Clique em Add Permisson Escolha o tipo de permisso, o recurso que receber essa permisso e as aes permitidas e clique Ok Caso queira inserir outra permisso clique Add Permission, seno de Ok e salve o arquivo como algo.policy na pasta de sua preferncia Poltica de segurana apenas um arquivo de texto com codificao ASCII Poderia ser editado com qualquer editor de texto Uma poltica poderia ser implementada utilizando-se uma forma constante Alterao do arquivo de propriedades de segurana SecurityManager Implementa e impem uma poltica de segurana para uma aplicao Determina se operaes potencialmente perigosas podem ser executadas Cada aplicao Java pode ter seu prprio gerenciador de segurana No est implementado por default exceto em browsers e no appletviewer Pode proteger com senha a leitura e/ou a escrita ao sistema de arquivos Escrevendo um SecurityManager Deve- se subclassificar SecurityManager e sobrescrever seus mtodos de verificao Alguns ou todos se for necessrio Toda verificao, se falhar, lanar uma SecurityException Verificaes possveis Operao sobre: Socket Aprovao por: checkListen(int port) checkConnect(String host, int port, Object executionContext) checkConnect(String host, int port) checkAccept(String host, int port) checkAccess(ThreadGroup threadgroup) checkAccess(Thread thread) threads checkCreateClassLoader() class loader checkWrite(String filename) checkWrite(FileDescriptor filedescriptor) checkRead(String filename, Object executionContext) checkRead(String filename) checkRead(FileDescriptor filedescriptor) checkLink(String library) checkDelete(String filename)

Threads Class loader File system

28

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ System commands checkExec(String command) system commands Interpreter Package Properties checkExit(int status) interpreter checkPackageDefinition(String packageName) checkPackageAccess(String packageName) checkPropertyAccess(String key, String def) checkPropertyAccess(String key) checkPropertiesAccess() checkSetFactory() networking checkTopLevelWindow(Object window)

Networking Windows

Instalando um SecurityManager System.setSecurityManager(arg) Determina que arg seja o SecurityManager atual arg seja o gerenciador de segurana durante a execuo da aplicao atual O gerenciador de segurana s pode ser determinado uma vez o Chamar esse mtodo novamente resultar em uma SecurityException

O que voc precisa saber: O que so polticas de segurana Editar os arquivos java.policy e java.security Usar o policytool Subclassificar a classe SecurityManager

29

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Sistemas Distribudos

AULA 7 WebServices
INTRODUO Os Web Services so na essncia interoperabilidade-conectando programas e aplicaes a outros programas e aplicaes, especialmente quando estes so desenvolvidos usando diferentes linguagens, ferramentas ou plataformas. A tecnologia chave para esse fim, o XML, tem todo um potencial de implementao e integrao com a tecnologia J2EE. A TECNOLOGIA CONCEITO como um tipo de arquitetura da internet atravs de protocolos abertos (HTTP e SOAP) funcionando e respondendo requisies HTTP vindas de qualquer ponto e plataforma conectada na internet. Definio WebServices Um web service representa uma funo de negcio ou um servio que pode ser acessado por uma outra aplicao, sobre redes pblicas e, geralmente, disponibilizado por protocolos conhecidos". De maneira mais simples, podemos definir como um software com capacidade de se comunicar com pessoas, aplicaes ou outros web services atravs de uma rede.

Implementao O ponto principal o fato de a tecnologia ser baseada em padres abertos, como XML e SOAP.

Alguns conceitos importantes dos Web services SOAP (Simple Object Access Protocol): o protocolo de comunicao, j estabelecido padro de comunicao trabalha com os dados no formato XML, utilizando o protocolo HTTP para transporte de dados. 30

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ UDDI (Universal Description, Discovery and Integration): so a "lista dos classificados" dos Web Services. Esse servio possibilita uma forma padro, rpida e fcil de empresas e usurios encontrarem Web Services que sejam teis de acordo com seus interesses. Atualmente vrias empresas mantm esse servio de busca e registro de Web Services: UDDI Org., Microsoft, IBM, SAP, dentre outras. Os principais papis nesse tipo de arquitetura O Funcionamento O Web Service provider onde se implementa uma aplicao do tipo web service, como um servidor de aplicao web, por exemplo. O UDDI registry o local onde se publica os web services.

E o Web Service requestor o ponto onde se localiza a aplicao que necessita usar um web service, isto , o cliente. Ciclo de Vida Publicao: Processo, opcional, atravs do qual o fornecedor do Web Service d a conhecer a existncia do seu servio, efetuando o registro do mesmo no repositrio de Web Services (UDDI). Descrio: Processo pelo qual o Web Service expe a sua API (documento WSDL); desta maneira a aplicao cliente tem acesso a toda a interface do Web Service, onde se encontram descritas todas as funcionalidades por ele disponibilizadas, assim como os tipos de mensagens que permitem aceder s funcionalidades.

Ciclo de Vida Comparativo Graas ao fato de XML e Java trabalharem de maneira to coesa (juntas), ambas tecnologias aos poucos se tornaram um ponto central para os Web Services. Em Java, j na verso J2EE 1.3, j se era encontrado todos os recursos necessrios para infraestrutura de Web Services. A verso 1.4, de 2004, apresenta integrao nativa com Web Services. Consideraes Finais Consideraes Finais Destacam-se APIs como: JAXP (Java API for XML Processing), para

31

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ leitura, criao, manipulao, transformao de XML, e JAXB (Java API for XML Binding), que mapeia classes Java a documentos XML. As APIs para XML e por conseqncia para Web Services complementam as APIs da plataforma J2EE APIs. O Java Web Services Developer Pack (Java WSDP) disponibiliza todas essas APIs em um nico pacote, facilitando assim a implementao na plataforma da interoperabilidade.

32

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________

Sistemas Distribudos
AULA 8

Arquitetura Orientada a Servios (SOA Service Oriented Object) Imagine se tivssemos que fazer tudo sozinhos, sem puder contar com servios de terceiros. Transformao do Arteso em Provedor de Servios

Muito do que nossa sociedade hoje provem da:


Especializao Padronizao Escalabilidade

Nossa sociedade quase que exclusivamente orientada a servios


Transportes Telecomunicaes Planos de Sade Bibliotecas Virtuais / Buscas especializada

O que SOA (Service-Oriented Architecture) ? SOA uma arquitetura de software que est baseada nos elementos de repositrio de servios, BUS de servios e aplicao frontend.

Conectividade possibilita o processamento global da informao O que so Web Services

Servios Web so aplicaes de negcio modulares

Nele exposta a lgica de negcio em forma servios sobre a Internet atravs de interfaces programveis Utiliza de protocolos de Internet com o propsito de fornecer meios para buscar, assinar e acessar esses servios Modelo bsico operacional dos Web Services

33

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Servios Web podem ser conceituados em um modelo simples operacional que tem um pouco em comum com o modelo padro de comunicao

As operaes so concebidas em trs distintas regras e relacionamentos que definem os usurios e fornecedores dos servios: Service provider Service broker Service requestor Modelo bsico operacional Service provider: Desenvolvedor e publicador (publisher) dos servios (interage com o service broker); Service broker: Responsvel por registrar e descobrir os servios na Web. Ele lista os vrios tipos de servios, descries e locais dos servios que auxiliam o solicitante dos servios (service requestor) a encontrar e acessar os servios requeridos; Service requestor: Usurio dos servios. Ele localiza o servio usando o service broker, invoca o servio requerido e executa-o do service provider

rvore de Padres Arquitetura em camadas (WS Web Services) Entidade de Informao em SOA

No corao de um Web services est um problema complexo: como uma aplicao distribuda trata a necessidade de compartilhamento de dados

Identificao e equivalncia Autenticao Autorizao e privacidade Mediao Sincronizao

Entidades de informao em SOA

Diferentes dimenses esto presentes quanto a gerencia da informao agregada em uma SOA Padres Web vs. Padres Dataweb Padres Web vs. Padres Dataweb 34

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________ Projeto de SOA e WS (Web Services) Possibilidades com os Padres Especificando Contratos

Dois tipos diferentes de contratos:

Contrato de Utilizao: contrato entre a interface do objeto e seus clientes;

Contrato de Realizao: contrato entre a especificao do WS e sua implementao. Contrato de Utilizao

Define o relacionamento entre a interface do objeto WS e o cliente (usurio), e especificado em forma de uma interface. Operaes: uma lista de operaes que a interface dispe, incluindo suas assinaturas e definies; Modelo de Informao: a definio abstrata de uma informao ou estado existente entre o cliente e o objeto que d suporte a interface.

Contrato de Utilizao Onda SOA ou esperar pela tsunami

35

Sistemas Distribudos Prof. Gilmar Souza Jr. gilmar@policamp.edu.br ______________________________________________________________________

Segundo a Wikipedia:
Distributed computing is a method of computer processing in which different parts of a program run simultaneously on two or more computers that are communicating with each other over a network. Distributed computing is a type of segmented or parallel computing, but the latter term is most commonly used to refer to processing in which different parts of a program run simultaneously on two or more processors that are part of the same computer. While both types of processing require that a program be segmenteddivided into sections that can run simultaneously, distributed computing also requires that the division of the program take into account the different environments on which the different sections of the program will be running. For example, two computers are likely to have different file systems and different hardware components. Service-oriented Architecture (SOA) is an architectural design pattern that concerns itself with defining loosely-coupled relationships between producers and consumers. While it has no direct relationship with software, programming, or technology, it's often confused with an evolution of distributed computing and modular programming.

36

Das könnte Ihnen auch gefallen