críticas a RPC
• sincronismo
• modelo um a um
• dificuldades de tratamento de falhas
• dificuldades com arquiteturas não
cliente-servidor
volta ao modelo de troca de mensagens
Sistemas de mensagens
• suporte para ponto a ponto e grupos
• desacoplamento
– temporal
• persistência das mensagens – espacial
Comunicação em grupo
• primitiva única transmite msgs a grupo de procs
• grupos abertos e fechados
• grupos estáticos e dinâmicos
Comunicação em Grupo
• motivações
– replicação e tolerância a falhas – ferramentas para colaboração
• jogos
• conferências
• edição colaborativa
• um primeiro exemplo: no MPI, ligado a
modelo SPMD
MPI - message passing interface
MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) {strcpy(message, "Hello, world"); for (i = 1; i < size; i++)
MPI_Send(message, 13, MPI_CHAR, i, type, MPI_COMM_WORLD);
} else
MPI_Recv(message, 20, MPI_CHAR, 0, type,
MPI_COMM_WORLD, &status); printf( "Message from process = %d : %s\n",
rank, message); MPI_Finalize();
grupos no MPI
• todos os processos de uma aplicação pertencem a um comunicador (grupo)
– MPI_COMM_WORLD
• grupos fechados com comunicação sincronizada • operações coletivas têm como um de seus
parâmetros um comunicador
– MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
• novos comunicadores podem ser criados dentro do programa
Operações Coletivas no MPI
• Barrier: sincronização pura
• Broadcast
• Gather
• Scatter
• Reduction
Header for MPI_Scatterv
int MPI_Scatterv (
void *send_buffer,
int *send_cnt,
int *send_disp,
MPI_Datatype send_type,
void *receive_buffer,
int receive_cnt,
MPI_Datatype receive_type,
int root,
MPI_Comm communicator)
outros modelos de comunicação em grupo
• integração com modelos de chamadas de objetos • divulgação de um para muitos
– distribuição em escala geográfica – sistemas pub/sub
• replicação e tolerância a falhas – réplicas ativas X passivas
– necessidade de multicast ordenado e confiável "
RMI e grupos
• alguns trabalhos estendem o conceito de
chamada remota para chamada em um grupo
de objetos
– relação com programação SPMD • ProActive
• Charm++ • ...
programação SPMD no ProActive
• suporte a operações coletivas
– grupos tipados: coleções de objetos de determinada classe (ou subclasses)
A ag = (A) ProActiveGroup.newGroup (“A”, params, {node1, node2, node3}); ag.foo() // operação coletiva
...
V vg = ag.bar()
// vg é um grupo de classe “V” vg.f(); // outra operação coletiva
// chamadas sobre f’s disparadas a medida // em que resultados se tornam disponíveis
OO-SPMD Jacobi
• barreiras forçam sincronização antes da execução de nova
chamada assíncrona chamadas assíncronas
sistemas de comunicação em grupo
• forte vínculo com tolerância a falhas
– gerência do grupo – restrições de ordenação
• outros
– espaços de tuplas – sistemas pub/sub – ...replicação e grupos
FE C RM RM RM FE C • transparência • consistênciaGrupos de processos
– serviços de envio • envio atômico
• envios ordenados: fifo, causal e total
– serviços de controle de participantes
– servidor de grupo ou membership server
– saídas do grupo também podem ocorrer por falhas
ordenação com falhas
X
• multicast confiável
ordenação total
• todos os pontos devem processar as
mensagens em uma mesma ordem
– independentemente da real ordem de envio
ordenação causal
• aplicações só devem ser processar uma mensagem depois de ter visto mensagens "precedentes
causalmente"
– independentemente da real relação de causa e efeito – não implica ordem total
serviços de grupos
• relação com sincronização e coordenação
“grupos” com baixo acomplamento
• espaços de tuplas
• pub/sub
Notify() serviço de comunicação origem destinatáriosLinda
• Carriero and Gelernter, 1986
– Yale
• idéia de um espaço de tuplas compartilhado
por diversos processos
• inicialmente voltado para aplicações
paralelas
espaço de tuplas
Linda - primitivas
• out(tuple)
– coloca tupla t no espaço de tuplas • in (template)
– retorna retirando tupla que “case” com template do espaço de tuplas
– bloqueante
• rd(template)
– como in sem eliminar tupla do et • eval(t)
– dispara novo processo para calcular tupla e fazer out(t) • primitivas para C e FORTRAN
casamento de tuplas
• endereçamento por conteúdo (ou memória
associativa)
– valores e tipos:
int x; float y;
in (3, ?x, "blablabla", ?y)
exemplo em Linda
real_main (int argc, char *argv[ ]) { int procs, procid, hello( ), j;
procs = atoi (argv[1]); for (j=0; j<procs; j++)
eval ("worker", hello(j)); for (j=0; j<procs; j++) {
in ("worker", ?procid);
fprintf (stdout, "fim do proc %d\n",procid); }
}
hello (int i){ return i;
exemplo
N. Carriero e D. Gelernter. How to write parallel programs: a guide to the perplexed. ACM Computing Surveys, 21(3), set 1989.
interpretações do espaço de tuplas
• muitas vezes chamado de espaço virtual compartilhado
espaço compartilhado
interpretações do espaço de tuplas
• mas também podemos ver como um sistema de canais de comunicação out("canal1", tx) out("canal2", tz) in("canal1", ?t1) out("canal2", t1) in("canal2", ?t) out("canal1", ty) … out("canal3", tz)
espaços de tuplas em Java
• Tspaces e JavaSpaces
– space.write (entry, …) – space.read (template, …) – space.take (template, …) – read e take ainda bloqueantes – eval não existe
• entradas e templates são instâncias de classes – um objeto encapsula a antiga tupla
JavaSpaces
• distanciamento de programação paralela e
aproximação com sistemas distribuídos
– espaços "ainda mais" persistentes
• aplicação não precisa estar em execução para tupla ser retirada
• desacoplamento maior
– utilização simultânea de diferentes espaços • uso do registry RMI ou outros mecanismos de
localização
implementações
• em geral centralizadas
• algumas implementações distribuídas
– e muita discussão
• replicação completa de espaço, rd e in locais, e out com broadcast
Coordenação
• separação
– processamento X comunicação e sincronização – Gelernter, D. and Carriero, N. 1992. Coordination
languages and their significance. Commun. ACM 35, 2 (Feb. 1992), 97-107.
publish/subscribe
• sistema onde se registra interesse em receber
mensagens
– filtragem de assuntos
• diferentes níveis
– aplicação final: newsgroups – primitivas de comunicação
• modelos
– push e pull
– relação com orientação a eventos e arquitetura da aplicação
pub/sub
serviço de pub/sub P P P P A A P A A A A … …• P. Eugster, P. Ferrer, R. Guerraoui e A. Kermarrec. The many faces of publish/subscribe. ACM Computing Surveys, 35(2), jun 2003.
padrão básico de interação
• assinantes registram interesse em eventos
ou padrões de eventos
• publicação de evento gera notificação
assíncrona
• desacoplamento
– tempo – espaço
desacoplamento espacial
Notify() Notify() Notify() Notify() serviço de eventos publicador publicadesacoplamento temporal
Notify() Notify() Notify() serviço de eventos publicador publica Notify() serviço de eventos publicadordesacoplamento de sincronização
Notify() Notify() serviço de eventos publicador publica• estilo assíncrono permite que partes se comuniquem sem se sincronizar
usos
– exemplo clássico de bolsa de valores… – notícias em geral
– bancos de dados – jogos e simuladores
– monitoramento de recursos
• interesse de combinar paradigmas em uma
mesma aplicação
variações nos sistemas p/s
1. baseados em tópicos
– listas de interesse
– similaridade com grupos
– alguns sistemas p/s baseados no ISIS
– canais de comunicação
– em geral, strings usados como identificação de canal
public class StockQuote implements Serializable { public String id, company, trader;
public float price; public int amount; }
public class StockQuoteSubscriber implements Subscriber { public void notify (Object o) {
if (((StockQuote)o).company == 'TELCO'&& ((StockQuote)o).price < 100) buy(): } } …
Topic quotes = EventService.connect
("/LondonMarket/Stock/StockQuotes"); Subscriber sub = new StockQuoteSubscriber();
quotes.subscribe(sub);
variações nos sistemas p/s
2. baseados em conteúdo
– em geral atributos internos
– eventos são conjuntos de pares (atributo, valor) – uso de filtros para estabelecer registro
public class StockQuote implements Serializable { public String id, company, trader;
public float price; public int amount; }
public class StockQuoteSubscriber implements Subscriber { public void notify (Object o) {
buy(): }
} …
String criteria = ("company == 'TELCO'and price < 100") Subscriber sub = new StockQuoteSubscriber();
EventService.subscribe(sub);
linguagens com filtros
• filtros podem ser dados por:
– strings • SQL
• expressões lógicas – templates
– código executável • relação com strings
p/s e espaços de tuplas
• distinção feita qto ao sincronismo no acesso
à informação
– modelo pull
• interface de acesso adequada para p/s por
tópicos e por conteúdo
arquiteturas
• centralizadas e distribuídas
serviço de pub/sub serviço de pub/subarquiteturas centralizadas
• facilidade de ordenação
• consistência e transações
• problemas de escalabilidade
arquiteturas distribuídas
• redes de servidores
• rede de overlay
redes de servidores
• como distribuir trabalho?
• sistemas de tópicos: tópicos podem ser distribuídos entre servidores
– cada servidor fica responsável por disseminação de alguns tópicos
– ex: Scribe
• sistemas sem estruturas de tópicos – roteamento a partir de diferentes pontos – ex: Siena, Rebecca
roteamento
• inscrições usadas para estabelecer rotas
comuns
• uso de anúncios para facilitar roteamento
– Siena, Rebecca
val<10 val<5
relação com p2p
• contexto de p/s é um dos que estimulou
discussão sobre arquiteturas simétricas
• o que é um sistema p2p?
• disc. no contexto de distribuição de conteúdo
– Androutsellis-Theotokis e Spinellis. A Survey of P2P Content Distribution Technologies. ACM Computing Surveys, 36(4), dez 2004.
o que é p2p?
• sistemas onde todos os nós são equivalentes
em funcionalidade e no papel
desempenhado
• sistemas que utilizam recursos nas bordas da
Internet
.
.
.
características
• compartilhamento de recursos sem
necessidade de um elemento centralizador
– ciclos de CPU, armazenamento, banda ...
• instabilidade e conectividade variável como
normal
exemplos de uso
• comunicação entre usuários
– chat, trabalho colaborativo
• serviços
– específicos: multicast
– genéricos: infras de computação distribuída
• sistemas replicados
– bancos de dados – servidores web
p2p - questões
• localização de recursos
• adaptação a entradas e saídas • escalabilidade
• privacidade e confidencialidade • disponibilidade e persistência • …
diferentes objetivos criam diferentes necessidades… anonimato X reputação
p2p - arquitetura
• redes de overlay
– noções de vizinhança e conectividade
p2p - arquiteturas
• qto a centralização – híbridas
• servidores usados para algumas tarefas
– parcialmente centralizadas
• supernós escolhidos dinamicamente
– totalmente distribuídas
• servents
• qto a estrutura – não estruturadas
arquiteturas não estruturadas híbridas
• uso de um servidor central para informação
de disponibilidade de recursos
– em distribuição de conteúdo: • índices de arquivos
• listas de conexões correntes
• simplicidade
• falta de escalabilidade
ñ estruturadas descentralizadas
• todos os participantes têm papel simétrico
– uso de bases de dados ou até servidores para encontrar algum participante corrente