Comunicação orientada a mensagens

Documentos relacionados
STD29006 Sistemas Distribuídos

Vamos fazer um pequeno experimento

Sistemas Distribuídos Aula 2

Comunicação. Carlos A. G. Ferraz 25/6/2003. Sistemas Distribuídos 1. Tópicos. Camadas. Transmissão de dados. Marshalling/Unmarshalling.

Sistemas Distribuídos

Sistemas Distribuídos Capítulo 8 - Aula 14

Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP. Prof. Me. Sérgio Carlos Portari Júnior

Redes de Computadores e Aplicações

Protocolo Request-Reply

Message Oriented Middleware (MOM)

Dados em programas são estruturados, enquanto que mensagens carregam informação seqüencial: Linearização x Restauração de dados Requisição

Sumário. Message Oriented Middleware (MOM) Sincronização na Comunicação. Comunicação Assíncrona

Comunicação. capítulo

Sistemas Distribuídos

Sistemas Distribuídos

ach 2147 desenvolvimento de sistemas de informação distribuídos

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

Sistemas Distribuídos Aula 10

ach 2147 desenvolvimento de sistemas de informação distribuídos

Sockets e Threads em Java

AULA 3 - REDES. Prof. Pedro Braconnot Velloso

Rede de computadores Protocolos UDP. Professor Carlos Muniz

Sistemas Operacionais Distribuídos e de Redes

Sistemas Operacionais II

SPEEDMiddleware - MOM

Redes de Computadores

Desenvolvimento de Aplicações Distribuídas

Firewall - Inspeção com estado. (Stateful Inspection)

INTRODUÇÃO. RPC x RMI

UFG - Instituto de Informática

Sistemas Operacionais II

AULA ANTERIOR: MODELOS FUNDAMENTAIS

Comunicação Objetos Distribuídos e RMI

Endereços de transporte TPDU. Nível de Rede Endereço de rede. Figura 1. Entidade de transporte

Redes de Computadores

Prof. Marcelo Cunha Parte 6

Informática UFRGS. Programação com Objetos Distribuídos (C. Geyer) Java Comunicação 1

Programação com Sockets

Comunicação entre processos COMUNICAÇÃO ENTRE PROCESSOS. Comunicação entre processos - troca de mensagens

COMUNICAÇÃO ENTRE PROCESSOS

Comunicação entre Processos

Sistemas Distribuídos e Redes de Sensores. abril de 2013

TRANSPORTE. Prof. Me. Hélio Esperidião

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

User Datagram Protocol

COMUNICAÇÃO ENTRE APLICAÇÕES. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

comunicação entre processos distribuídos

UNIVERSIDADE. Sistemas Distribuídos

INTRODUÇÃO AOS SISTEMAS OPERACIONAIS SEMANA 10. Operações nos processos. Processos cooperativos, comunicação entre processos.

Sistemas Distribuídos

REDES DE COMPUTADORES

Sistemas Operacionais - Básico e Avançado - Prof. Celso Maciel da Costa Mestrado em Informática - PUCRS

Java Message Service (JMS)

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DO RIO GRANDE DO NORTE DEPARTAMENTO ACADÊMICO DE TECNOLOGIA DA INFORMAÇÃO

FUNDAMENTOS DE REDES DE COMPUTADORES. Lista de Exercícios AV2-01. Luiz Leão

FUNDAMENTOS DE REDES DE COMPUTADORES Unidade 5 Camada de Transporte e Aplicação. Luiz Leão

Projecto hipotético para resolvermos hoje

Redes de Computadores

SISTEMAS DISTRIBUÍDOS. CAPÍTULO 4 COMUNICAÇÃO Slides cedidos pela professora Aline Nascimento e do livro texto

Arquitetura de sistemas distribuídos

Comunicações por transações. Grupo 3. Lisiê Tieko Nakasone Tatiane Fernanda Silva Galinari. Orientador: Profº Norian Marranguello

Redes de Computadores. Prof. André Y. Kusumoto

Comunicação em Sistemas Distribuídos. Conceitos: Paradigma C/S. Conceitos: Paradigma C/S. Paradigma Cliente/Servidor

Direto ou Indireto Monolítico ou Estruturado Simétrico ou Assimétrico Padronizado ou Não-Padronizado

Redes de Computadores e Aplicações Camada de aplicação IGOR ALVES

Invocação Remota. Prof. Leonardo Barreto Campos. 1/29

Infra-Estrutura de Software

Canais de Comunicação

Sistemas Distribuídos Capítulo 8 - Aula 13

Protocolos TCP e UDP. Protocolo TCP. Protocolo TCP. A necessidade de uma comunicação segura: Transmission Control Protocol

Camada de Transporte Protocolos TCP e UDP

Redes TCP/IP. Prof. M.Sc. Alexandre Fraga de Araújo. INSTITUTO FEDERAL DO ESPÍRITO SANTO Campus Cachoeiro de Itapemirim

Fundamentos de Sistemas Operacionais

PTC Aula Princípios das aplicações de rede 2.2 A Web e o HTTP. (Kurose, p ) (Peterson, p ) 21/03/2017

Exemplo Cliente-Servidor. Cliente. Servidor 1/ Requisição / Resposta Enlace 2 Físico 1. Kernel. Kernel

Camada de Rede Fundamentos e Protocolos. 6/7/18 Organizado por Bruno Pereira Pontes brunopontes.com.br

UFG - Instituto de Informática

Sistemas Operacionais II

INFO3M ARQ REDES. Prova 1 Bimestre. Obs: Questões RASURADAS são consideradas como ERRADAS GABARITO

Camada de Transporte. Protocolos TCP e UDP

Redes de Computadores I. Sockets e Arquitetura HTTP

INFO ARQ REDES. Prova 2 Bimestre. Obs: Questões RASURADAS são consideradas como ERRADAS GABARITO

Sistemas Distribuídos. Coulouris Capítulo 4

15/4/15. Processamento Paralelo Middleware Orientado a Objetos. Sistema operacional é a única infraestrutura para interação. Middleware é adicionado

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

Resumo P2. Internet e Arquitetura TCP/IP

Redes de Computadores

Novas Propostas para Protocolos de Streaming Luiz Eduardo Fontes Mello de Almeida

Sistemas Distribuídos baseados em Coordenação. Pedro Ferreira DI - FCUL

Arquitectura de Sistemas Paralelos e Distribuídos Comunicação Multicast

Message Oriented Middleware & Message Brokers

Resumo. Redes de Computadores. História da Internet. História da Internet. História da Internet. História da Internet

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Sistemas Distribuídos Capítulo 8 - Aula 15

Comunicação Inter-Processos. Prof. Adriano Fiorese. Conceitos Iniciais

Redes de Computadores e Telecomunicações - Camada de Transporte

Fornecer serviços independentes da tecnologia da subrede; Esconder do nível de transporte o número, tipo e a topologia das subredes existentes;

Redes de Computadores I Internet - Conceitos

Transcrição:

Comunicação orientada a mensagens STD29006 Engenharia de Telecomunicações Prof. Emerson Ribeiro de Mello http://docente.ifsc.edu.br/mello/std 31 DE AGOSTO DE 2018

Revisão das aulas anteriores

Alguns pontos na comunicação cliente/servidor Protocolo de comunicação Podem ser definidos como acordos/regras para comunicação Podem ser orientados a conexão ou não (Ex: TCP x UDP) Modelo de comunicação cliente/servidor Servidores oferecem serviços aos clientes Paradigma pedido e resposta Implementação: Socket, RPC e RMI Servidor concorrente x sequencial Sequencial: servidor atende um pedido por vez Concorrente: servidor dispara uma thread ou processo filho para lidar com cada pedido que chega 1/30

Alguns pontos na comunicação cliente/servidor Endereçamento Como localizar o servidor? Conhecimento prévio, broadcast ou serviço de nomes Bloqueante x não bloqueante Síncrono emissor/receptor fica bloqueado até enviar/receber mensagem Assíncrono emissor não fica bloqueado e o retorno também não bloqueia Área de armazenamento temporário (buffer) - com x sem Servidor precisa ficar esperando uma mensagem antes que o cliente possa enviá-la (consumo imediato) Cliente envia para uma área de armazenamento temporário e o servidor depois consulta esta área 2/30

Comunicação orientada a mensagens

Comunicação transitória por mensagens Embora RPC e RMI contribuam para esconder a comunicação no sistema distribuídos (transparência), estes assumem que ambas as partes estarão ativas no mesmo instante para permitir a comunicação 3/30

Comunicação transitória por mensagens Embora RPC e RMI contribuam para esconder a comunicação no sistema distribuídos (transparência), estes assumem que ambas as partes estarão ativas no mesmo instante para permitir a comunicação Server socket bind listen accept read write close Synchronization point Communication socket connect write read close Client 3/30

Tornando mais fácil o uso do sockets Desenvolver com sockets consiste em uma tarefa de baixo nível e erros de programação podem ser comuns A forma de uso do sockets geralmente segue o modelo cliente/servidor 4/30

Tornando mais fácil o uso do sockets Desenvolver com sockets consiste em uma tarefa de baixo nível e erros de programação podem ser comuns A forma de uso do sockets geralmente segue o modelo cliente/servidor ZeroMQ uma alternativa para desenvolvimento com sockets Biblioteca com abstração de alto nível para trabalhar com pares de sockets Um socket para enviar mensagens do processo P e um par correspondente no processo Q para receber mensagens Toda comunicação é assíncrona 4/30

ZeroMQ ou MQ Suporte a comunicação many-to-one ao invés do one-to-one Suporte a comunicação one-to-many (multicast) Protocolos de transporte Threads em um único processo inproc://nome Processos em uma mesma máquina ipc:///tmp/arquivo Processos em máquinas diferentes tcp://host:port Comunicação multicast epgm://;239.0.0.1:1234 Implementa os seguintes padrões Request-reply Publish & Subscribe Pipeline 5/30

ZeroMQ: Request-reply Comunicação tradicional via sockets TCP 6/30

ZeroMQ: Request-reply Servidor usa um socket REP e cliente usa um socket REQ Cliente precisa receber resposta de um pedido antes de fazer um novo pedido para o mesmo servidor pedidos são persistidos em uma fila Servidor precisa enviar resposta antes de receber um novo pedido do mesmo cliente respostas são persistidas em uma fila Cliente pode conectar em um ou mais servidores 6/30

ZeroMQ: Request-reply import org.zeromq.zmq; public class Servidor{ public static void main(string args[]){ ZMQ.Context ctx = ZMQ.context(1); ZMQ.Socket socket = ctx.socket(zmq.rep); socket.bind("tcp://*:1234"); while(true){ byte[] req = socket.recv(0); socket.send("world", 0); } } } import org.zeromq.zmq; public class Cliente{ public static void main(string args[]){ ZMQ.Context ctx = ZMQ.context(1); ZMQ.Socket socket = ctx.socket(zmq.req); socket.connect("tcp://localhost:1234"); socket.send("hello", 0); System.out.println(socket.recv(0)); } } 6/30

ZeroMQ: Publish & Subscribe Produtor usa socket PUB e consumidor usa socket SUB PUB envia mensagem para todos assinantes Pode assinar todas mensagens do produtor (SubscribeALL) ou somente mensagens específicas Consumidor pode ser assinantes de múltiplos produtores Se produtor enviar uma mensagem e não houver assinantes, essa será perdida 7/30

ZeroMQ: Pipeline Usado em cenários que se deseja processamento de dados em paralelo Tarefas são distribuídas para processos trabalhadores usando varredura cíclica (round-robin) PUSH envia mensagem para um dos trabalhadores 8/30

Comunicação persistente por mensagens

Comunicação persistente por mensagens Middleware orientado a mensagem (MOM) sistema de fila de mensagens Provê suporte a comunicação assíncrona e persistente Cliente e servidor não precisam estar ativos no mesmo instante para permitir a troca de mensagens Comunicação entre aplicações é feita por meio de filas de mensagens Mensagens podem ser roteadas por diversos servidores intermediários e eventualmente ser entregue ao destino 9/30

Comunicação persistente por mensagens Middleware orientado a mensagem (MOM) sistema de fila de mensagens Provê suporte a comunicação assíncrona e persistente Cliente e servidor não precisam estar ativos no mesmo instante para permitir a troca de mensagens Comunicação entre aplicações é feita por meio de filas de mensagens Mensagens podem ser roteadas por diversos servidores intermediários e eventualmente ser entregue ao destino Quando usar? Quando as partes estiverem interconectadas por meio de uma WAN, cuja probabilidade de desconexão temporária não for desprezível 9/30

Modelo de fila de mensagens Comunicação persistente e assíncrona desacoplamento temporal Mensagens ficam armazenadas até que o receptor possa consumi-las Emissor só tem garantia que a mensagem será eventualmente inserida na fila do receptor Quando a mensagem será consumida ou se será consumida, isto depende do comportamento do receptor Sender running Sender running Sender passive Sender passive Receiver running Receiver passive Receiver running Receiver passive (a) (b) (c) (d) 10/30

Message broker intermediador O broker é responsável por lidar com heterogeneidade de aplicações Transforma as mensagens que chegam para o formato da aplicação destino Pode implementar um conjunto de facilidades para as aplicações, por exemplo, roteamento de mensagens, serviço de assinatura e publicação (publish & subscribe) 11/30

Interface básica para sistemas de filas de mensagens PUT Colocar uma mensagem em uma fila GET Se a fila estiver vazia ficará bloqueada até chegar mensagem. Remove a primeira mensagem que estiver na fila POLL Verificar se existe mensagem em uma fila específica e remover a primeira. Neste caso, não fica bloqueado NOTIFY Definir uma função que será invocada sempre que uma mensagem for inserida na fila 12/30

Arquitetura básica de um sistema de filas de mensagens Cada fila possui um identificador único em todo o sistema distribuído e as mensagens são destinadas para uma fila Filas são distribuídas por diversas máquinas Identificar cada fila implica em fazer um mapeamento para endereços de rede e portas Cada máquina oferece uma interface para o envio e recepção de mensagens Máquinas clientes podem estar ligadas a uma ou mais máquinas servidoras responsáveis pelo encaminhamentos de mensagens (roteamento) 13/30

Organização de um sistema de filas de mensagens com roteadores Sender A Application Receive queue Send queue Message R2 Application Application R1 Application Router Receiver B 14/30

Java Message Service JMS Modos de operação: ponto a ponto Cada mensagem possui um único consumidor e é mantida na fila até ser consumida ou expire Modos de operação: Publish & subscribe Todos assinantes de um tópico recebem as mensagens publicadas e mensagens ficam retidas até serem entregues a todos os assinantes 15/30

Outras implementações de comunicações por mensagens Advanced Message Queuing Protocol AMQP Padrão aberto para middleware orientado à mensagens enfileiramento, roteamento ponto-a-ponto ou pub-sub, confiabilidade e segurança Apache ActiveMQ Apache Qpid RabbitMQ Message Queue Telemetry Transport MQTT Padrão ISO baseado em uma versão leve do publish-subscribe para ser usado sobre TCP/IP ambientes que exigem código pequeno & taxa de transmissão baixa Mosquitto 16/30

Exercício 01 Quero desenvolver um aplicativo de mensagens instantâneas para Android Apresente o modelo conceitual ilustrando como seria a troca de mensagens entre dois usuários Apresente as bibliotecas, serviços ou frameworks que precisariam ser usados para desenvolver tal solução, bem como os requisitos de rede para esses serviços funcionarem (caso existam) Quero desenvolver um aplicativo de mensagens instantâneas para ios. 17/30

Comunicação confiável: modelo cliente-servidor

Comunicação confiável: cliente-servidor Um processo é considerado falho se durante sua execução apresentar um comportamento diferente daquilo que foi especificado Omissão de recepção não recebe mensagens enviadas a ele Omissão de envio não envia mensagens que se espere que ele envie Parada (ou queda) deixa de funcionar Arbitrária continua a funcionar, porém produz saídas incorretas Canais de comunicação podem exibir falhas por queda, omissão, expiração de tempo (timeout) e arbitrárias Canais confiáveis mascaram falhas por queda e omissão 18/30

Comunicação confiável: cliente-servidor Comunicação ponto-a-ponto Cliente 1 Encontra servidor 2 Codifica mensagem 3 Envia mensagem 4 Recebe resposta Servidor 1 Recebe mensagem 2 Decodifica mensagem 3 Processa 4 Envia resposta 19/30

Comunicação confiável: cliente-servidor Comunicação ponto-a-ponto O que fazer se o pedido for perdido? 20/30

Comunicação confiável: cliente-servidor Comunicação ponto-a-ponto O que fazer se o pedido for perdido? Detectar que a mensagem foi perdida Aguardar pelo tempo de expiração (timeout) Enviar um novo pedido 20/30

Comunicação confiável ponto-a-ponto: cliente-servidor O que fazer se a resposta for perdida? Cliente irá aguardar pelo tempo de expiração e enviar um novo pedido 21/30

Comunicação confiável ponto-a-ponto: cliente-servidor Uso do TCP seria suficiente para garantir comunicação confiável? 21/30

Comunicação confiável ponto-a-ponto: cliente-servidor Uso do TCP seria suficiente para garantir comunicação confiável? TCP mascara falhas por omissão (uso de ack e retransmissões) TCP não mascara falhas por queda conexão é interrompida abruptamente 21/30

Comunicação confiável ponto-a-ponto: cliente-servidor Um sistema distribuído pode mascarar falhas de queda tentando estabelecer uma nova conexão 22/30

Comunicação confiável ponto-a-ponto: cliente-servidor Servidor demorou muito para enviar resposta e cliente reenviou o pedido 22/30

Comunicação confiável ponto-a-ponto: cliente-servidor Servidor demorou muito para enviar resposta e cliente reenviou o pedido Comportamento apropriado somente para requisições idempotentes 22/30

Comunicação confiável ponto-a-ponto: cliente-servidor Servidor demorou muito para enviar resposta e cliente reenviou o pedido Comportamento apropriado somente para requisições idempotentes Requisição idempotente sempre gera o mesmo resultado, mesmo se executada uma ou mais vezes Deixa o servidor no mesmo estado e produzindo o mesmo resultado Ex: HTTP GET, leitura em um servidor de arquivos, etc 22/30

Comunicação confiável ponto-a-ponto: cliente-servidor Servidor poderia manter um histórico com todos os pedidos anteriores ou mesmo exigir confirmação de entrega (ACK) Adequado para requisições não idempotentes 23/30

Comunicação confiável: Semânticas para requisições remotas Se uma operação ocorreu com sucesso... No máximo uma vez (at-most-once) Se o cliente recebeu resposta, então o pedido foi processado uma única vez Pode ser implementado por meio de histórico de mensagens no servidor (filtrar mensagens repetidas) ou simplesmente não reenviar os pedidos 24/30

Comunicação confiável: Semânticas para requisições remotas Se uma operação ocorreu com sucesso... Ao menos uma vez (at-least-once) Se o cliente recebeu resposta, então o pedido foi processado no mínimo uma vez, mas pode ser sido processado mais vezes Não é necessário histórico no servidor, bastaria reenviar pedidos até receber uma resposta 24/30

Comunicação confiável: Semânticas para requisições remotas No máximo uma vez (at-most-once) com reenvio de mensagens Simples de implementar, porém não é tolerante a faltas No máximo uma vez (at-most-once) com histórico Um pouco mais complexo para implementar, porém tolerante a faltas Ao menos uma vez (at-least-once) Simples para implementar e tolerante a faltas 25/30

Comunicação confiável: Semânticas para requisições remotas Uma chamada de procedimento local segue a semântica exactly once Maioria das implementações de RPC oferecem somente uma semântica at-least-once ou at-most-once É desejado projetar uma aplicação para idempotente e sem manutenção de estado (stateless) 26/30

Alguns pontos sobre a comunicação cliente/servidor Confiável x não confiável Canal não confiável: exige confirmação de todas mensagens (pedido e resposta) aplicação fica responsável Canal confiável: a resposta pode atuar como uma confirmação do pedido Comunicação confiável pode delegar para os mecanismos de transporte lidarem com mensagens perdidas 27/30

Receber (pull) ou enviar (push) Cliente: modelo pull (receber) Cliente responsável por obter dados do servidor (envia pedido) Ex: HTTP Vantagem: servidor não precisa manter estado Dificuldade: escalabilidade limitada Servidor: modelo push (enviar) Servidor envia dados para o cliente Ex: Streaming de vídeo Vantagem: mais escalável Dificuldade: servidor precisa manter estado 28/30

Comunicação em grupo: um para muitos Características de um grupo estáticos ou dinâmicos abertos ou fechados Endereçamento de um grupo Multicast, broadcast Multicast na camada da aplicação (unicast) Atomicidade, ordenação de mensagens e escalabilidade 29/30

Exercício 02 1 Servidores que implementam a semântica at-least-once podem ser considerados como stateless? Justifique sua resposta 2 Defina a semântica maybe 3 Faça um pseudo-código de uma comunicação com a semântica at-least-once (cliente e servidor) 4 Faça um pseudo-código de uma comunicação com a semântica at-most-once (cliente e servidor) 5 Java RMI adota qual semântica para requisições: at-most-once, at-least-once ou ambas? 30/30