A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Comunicação entre processos: Mensagens Nazareno Andrade Universidade Federal de Campina Grande 02/2008 Sistemas Distribuídos.

Apresentações semelhantes


Apresentação em tema: "Comunicação entre processos: Mensagens Nazareno Andrade Universidade Federal de Campina Grande 02/2008 Sistemas Distribuídos."— Transcrição da apresentação:

1 Comunicação entre processos: Mensagens Nazareno Andrade Universidade Federal de Campina Grande 02/2008 Sistemas Distribuídos

2 2 Fundamentos Coordenando processos Construíndo sistemas Sistemas construídos

3 3 Fundamentos Coordenando processos –Mensagens (e fluxos): UDP, TCP, MPI, Enfileiramento, Gossiping –RPC e objetos distribuídos: RMI –Mensagens vs. RPC –Nomeação –Sincronização e replicação Construíndo sistemas Sistemas construídos

4 4 Objetivos Dominar primitivas usadas para a comunicação entre processos Visão geral de paradigmas de comunicação entre processos

5 5 Fundamental: Mensagens e RPC/RMI Tudo é construído com TCP e UDP Mensagens –Direto com primitivas TCP ou UDP –Primitivas mais sofisticadas: MPI, enfileiramento, multicast, epidemias, boatos RPC/RMI –Abstração de nível mais alto que mensagens

6 6

7 7 Transporte: TCP, UDP Tipicamente, um programador só lida com a camada de transporte As camadas inferiores são responsáveis por enviar dados brutos sem garantias de: –Recebimento –Ordem –Integridade A camada de transporte torna isso tratável para nós

8 8 TCP vs. UDP Em resumo, confiabilidade vs. desempenho –Propriedades do TCP não são sempre importantes

9 9 Antes de mais detalhes Lembremos 2 ou 3 coisas Camada de rede (no nosso caso IP): –Responsável por comunicação best-effort de pacotes entre nós –Pacotes podem seguir rotas diferentes ou não chegar Camada de transporte: –Comunicação entre processos –Multiplexamos a comunicação do IP com portas

10 10 As primitivas mais básicas da comunicação entre processos são send e receive –Se são bloqueantes, a comunicação é síncrona Uma última abstração é o soquete: message agreed port any port socket Internet address = 138.37.88.249Internet address = 138.37.94.248 other ports client server

11 11 UDP: como e pra quê UDP é o IP no nível do transporte –Transmissão de datagramas convertidos em pacotes –Checksum opcional –Nenhuma garantia de chegada ou ordenação –Não há retransmissão

12 12 Primitivas UDP Send() um datagrama, pode ser não-bloqueante Receive() bloqueante de um datagrama –Recebe de qualquer fonte –Pode ter um timeout de espera Mensagens são ‘enviadas’ quando dadas ao IP e são postas em um buffer de recebimento no destino até o receive() O que pode dar errado aqui?

13 13 Traduzindo em um modelo Mensagens podem ser perdidas –Nos buffers, por exemplo A comunicação está sujeita a falhas de omissão Mensagens podem sair de ordem –Seguindo caminhos diferentes no roteamento IP A comunicação está desordenamento das msgs Isso nos diz algo sobre que tipo de sistemas devemos construir sobre o UDP

14 14 O UDP é útil! Um monte de problemas pode ser solucionado no modelo UDP –DNS, DCHP, traceroute, SNMP, NTP –Transmissão de vídeo –Transmissão de áudio –Utilização eficiente de banda em alto desempenho –...

15 15 Exemplo UDP

16 16 TCP: como e para quê TCP soma ao IP –Confiabilidade –Fluxos de dados (em conexões) –Segmentação automática dos fluxos em pacotes –Garantias com retransmissões, ordenação e checksums –Controle de fluxo –Buffering (TCP é uma mãe) A que custo? O que disso poderia ser feito sobre UDP? Haveria ganhos?

17 17 Primitivas TCP accept() e connect() estabelecem uma conexão send() e receive() de bytes, não de datagramas Abstraem: –Tamanhos de mensagem –Perdas de mensagens –Diferenças na velocidade de envio e recebimento (fluxo) –Duplicação e ordenação de mensagens –Destino das mensagens! (outro lado da conexão)

18 18 E o modelo disso? Não há falhas de omissão ou desordenação de mensagens Timeouts escondem de você que o mundo é assíncrono Há falhas de fail-stop –Mas quando a conexão cai, falhou o canal ou o processo? Processos não detectam imediatamente que mensagem não foi recebida –Têm que esperar o ack não vir

19 19 Exemplo TCP

20 20 Quando TCP, quando UDP Comparemos quem usa um e outro: UDP: grupo 1: NTP, DHCP, DCP grupo 2: vídeo e áudio TCP: HTTP, FTP, SMTP Fora isso, hoje em dia, se usa UDP para driblar segurança que visa TCP –NATs e alguns firewalls

21 21 Primitivas mais apropriadas para desenvolvedores send() e receive() são primitivas Comumente, é mais conveniente usar abstrações de nível mais alto: –Comunicação 1 – N  Multicast –Comunicação eficiente em grupo  MPI –Observer-like  Enfileiramento –Disseminação de informação  Protocolos epidêmicos –... (Pra não falar em RPC/RMI)

22 22 Message Passing Interface: por que Queremos simular uma placa de ferro recebendo calor de duas fontes –Dividimos a placa em pedaços, pedaços em processadores –Simula t em um pedaço, comunica resultado com vizinhos –Até estabilizar Que tipos de primitiva são úteis para computação paralela? E se queremos poder rodar a aplicação em clusters de qualquer tamanho? –E se fôssemos físicos?

23 23 MPI: O que é Antes de MPI, mil empresas forneciam mil bibliotecas MPI é um padrão para o desenvolvimento de aplicações paralelas com passagem de mensagens –É muito usado –Hoje existem mil implementações do padrão Tudo que uma aplicação paralela pode querer: –Comunicação ponto-a-ponto transparente, comunicação em grupo, abstrações para escrever aplicações portáveis...

24 24 Uma idéia O básico para cada processo: –MPI_INIT –MPI_FINALIZE –MPI_COMM_SIZE –MPI_COMM_RANK –MPI_SEND –MPI_RECV –MPI_BCAST –MPI_REDUCE

25 25 int main( int argc, char *argv[] ) { int n, myid, numprocs, i; double mypi, pi, h, sum, x; MPI_InitMPI_Init(&argc,&argv); MPI_Comm_sizeMPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Comm_rank if (myid == 0) { printf("Enter the number of intervals: (0 quits) "); scanf("%d",&n); } MPI_BcastMPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) break; else { h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs) { x = h * ((double)i - 0.5); sum += (4.0 / (1.0 + x*x)); } mypi = h * sum; MPI_ReduceMPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf("pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT)); } } MPI_FinalizeMPI_Finalize(); return 0; }

26 26 Mais algumas primitivas MPI MPI_send bloqueia até msg estar em buffer para envio MPI_Ssend bloqueia até destino receber mensagem MPI_Rsend dispensa handshake e é mais eficiente –Só pode ser chamada se destino está em receive() Isso dá uma idéia do mundo da otimização de comunicação...

27 27 Enfileiramento (Message queueing) E se queremos comunicação sem que origem e destino tenham que estar online ao mesmo tempo? Email é assim Sistemas baseados em publish/subscribe podem ser assim O princípio é que clientes põem mensagens em filas –Filas são persistentes, implementadas por servidores –Destinos lêem mensagens de suas filas

28 28 Uso de enfileiramento Aplicações corporativas heterogêneas –Conectar diversas operações legadas Aplicações pouquíssimo acopladas Aka Message Oriented Middleware: IBM WebSphere MQ, Java Messaging System, JBoss Messaging Admin instala e administra filas, aplicações usam-nas para se comunicar

29 29 Multicast Comunicação 1  vários A priori, existe no nível da rede (IP Multicasting) –Quando tudo está configurado e permitido –Geralmente é feito sobre UDP –Processos entram em um grupo de multicast tudo que é enviado para o grupo é recebido por todos nele –Temos que limitar o alcance do multicast Freqüentemente, fazemos no nível da aplicação Note que broadcast é um caso particular de multicast Broad/Multicast confiável e ordenado é uma primitiva poderosa

30 30 Exemplo com multicast

31 31 Epidemias e Gossiping Objetivo: espalhar uma informação para um grande número de nós –Tipicamente uma atualização Protocolos epidêmicos inspirados na teoria das epidemias –Cada nó periodicamente escolhe outro e troca informação com ele –Em O(log(N)) rodadas, quase todos recebem a informação Protocolos baseados no espalhamento de boatos –Cada nó periodicamente escolhe outro e lhe passa novidades que recebeu –Se o outro já sabe da novidade, o interesse na propagação cai

32 32 Exemplos com epidemias e boatos Quem é o melhor servidor no sistema atualmente? –Em vez de todos os nós checarem o estado de todos os servidores, espalham o que acham para outros nós Estimando o tamanho do sistema –Todos os nós, ao trocar informações, fazem a média de um valor x que têm –Um nó líder faz x = 1, os demais fazem x = 0 –Após algum tempo, x será 1/N para todos

33 33 Onde estamos Mensagens –Primitivas básicas para envio e recebimento –Paradigmas mais sofisticados RPC e RMI

34 34 RPC (e RMI) Outra apresentação

35 35 RPC vs. Mensagens

36 36 Recapitulando

37 37 Mais sobre esse assunto

38 38 Cenas do próximo capítulo


Carregar ppt "Comunicação entre processos: Mensagens Nazareno Andrade Universidade Federal de Campina Grande 02/2008 Sistemas Distribuídos."

Apresentações semelhantes


Anúncios Google