Comunicação Distribuída

Fazer download em docx, pdf ou txt
Fazer download em docx, pdf ou txt
Você está na página 1de 6

4.

Comunicação Distribuída
É um paradigma de comunicação em que múltiplos participantes interagem diretamente
entre si, sem depender de uma entidade centralizada para coordenar a troca de informações. Isso
promove autonomia, resiliência e eficiência na comunicação.
A comunicação em sistemas distribuídos é um campo de estudo e prática que lida com a
troca de informações entre os diversos componentes de um sistema distribuído. Um sistema
distribuído é composto por vários computadores interconectados em uma rede, cada um
executando suas próprias tarefas e compartilhando recursos. A comunicação entre esses
computadores é essencial para que você possa cooperar, coordenar suas ações e atuar.
Existem diferentes abordagens e tecnologias para viabilizar essa comunicação de forma
eficiente. Protocolos de comunicação, como TCP/IP, UDP e HTTP, são frequentemente usados
para garantir a transferência de dados de forma confiável e segura. Além disso, padrões e
metodologias, como REST, SOAP e gRPC, são usados para definir como os sistemas podem
interagir e trocar informações
A comunicação em sistemas distribuídos é um aspecto fundamental para a construção de
aplicações modernas e complexas, como sistemas de computação em nuvem, redes de sensores,
aplicações web escaláveis e muito mais. Ela permite que os diferentes componentes de um
sistema distribuído trabalhem juntos de forma harmoniosa, compartilhando dados, recursos e
serviços para atender às necessidades dos usuários.
Conceito de porta
Uma porta é um ponto de interação entre uma aplicação e o sistema operacional da máquina que
proporciona à aplicação uma forma de estabelecer um canal de comunicação com o sistema
operacional da máquina e é representada por um endereço numérico.

As portas são usadas para permitir que diferentes aplicativos e serviços em um sistema
compartilhem recursos de rede, como conexões de rede TCP/IP. Quando um aplicativo ou
serviço em um sistema distribuído deseja se comunicar com outro aplicativo ou serviço em outro
sistema, ele especifica o endereço IP do sistema de destino e a porta associada ao serviço ou
processo que deseja acessar. Por exemplo, quando você acessa um site da web, seu navegador
envia uma solicitação HTTP para o servidor web do site, especificando o endereço IP do servidor
e a porta padrão para o protocolo HTTP, que é a porta 80. O servidor web, por sua vez, está
ouvindo na porta 80 e responde à solicitação do navegador enviando os dados solicitados de
volta através da mesma porta. O uso de portas permite que vários serviços e aplicativos sejam
executados simultaneamente em um sistema distribuído, cada um respondendo a solicitações em
portas designadas. Isso ajuda a garantir que as comunicações entre os componentes distribuídos
sejam direcionadas corretamente e que os recursos de rede sejam utilizados de forma eficiente.

Sockets

Os sockets são uma maneira de permitir a comunicação entre processos, seja na mesma máquina
ou em máquinas diferentes, através da rede. Eles são uma interface de programação de
aplicativos (API) usada para criar conexões de rede bidirecionais, onde cada extremidade da
conexão pode enviar e receber dados. Os sockets são geralmente implementados usando TCP
(Transmission Control Protocol) ou UDP (User Datagram Protocol). O TCP fornece uma
conexão confiável e orientada a fluxo, garantindo que os dados sejam entregues na ordem correta
e sem erros. Por outro lado, o UDP oferece uma comunicação mais rápida e sem conexão, mas
não garante a entrega ou a ordem dos dados. Na programação, os sockets são usados para criar
conexões de rede entre aplicativos, permitindo que eles troquem dados de forma eficiente e
confiável. Eles são amplamente utilizados em uma variedade de aplicações, incluindo servidores
web, transferência de arquivos, jogos online e comunicação entre processos distribuídos.

Um socket é um mecanismo de baixo nível, definido como uma extremidade de um canal de


comunicação em que um par de processos (thread) se comunica em uma rede utilizando um par
de sockets – um para cada processo.

O mecanismo do TCP/IP que permite que processos distribuídos se comuniquem em uma


rede.Um socket é formado por um endereço IP concatenado com um número de porta. Um
mecanismo de baixo nível, entre processos ou threads distribuídos, que permitem a troca de um
fluxo não-estruturado de bytes entre os threads em comunicação.

Sockets Java

Sockets em Java são uma forma de comunicação de rede que permite que os programas troquem
dados através da rede. Eles são implementados na API java.net e são amplamente utilizados para
criar aplicativos cliente-servidor. Você pode criar tanto sockets de cliente quanto de servidor em
Java, usando as classes Socket e ServerSocket, respectivamente. Com essas classes, você pode
estabelecer conexões, enviar e receber dados, e gerenciar a comunicação entre diferentes
aplicativos em uma rede.

 Sockets orientados a conexão (TCP):

Classes: Socket, ServerSocket

 Sockets sem conexão (UDP):

Classe: DatagramSocket

 Socket de difusão (multicast):

Classe: MultcastSocket

Estrutura dos Dados na Comunicação

É responsabilidade da aplicação-cliente, o da aplicação-servidor impor uma estrutura de dados.


Existem dois métodos alternativos de comunicação em nível mais alto:

 RPC: Permite que um processo ou uma thread chame um procedimento ou função em


outro processo, que pode estar em um espaço de endereçamento separado na mesma
máquina ou pode estar executando em um computador remoto conectado por uma rede.
 RMI: É um recurso Java que permite que uma thread invoque um método em um objeto
remoto, o qual reside em uma máquina virtual Java (JVM) distinta que pode estar no
mesmo computador ou em uma JVM em um computador remoto conectado por rede.
RMI baseia-se em objetos: suporta a invocação de métodos em objetos remotos. Com
RMI é possível passar objetos como parâmetros para os métodos remotos. Torna possível
aos usuários desenvolver aplicações Java que sejam distribuídas por toda a rede.
Quando o programa-cliente invoca um método remoto, é esse stub para o objeto remoto
que é chamado. Um stub no cliente serve para criar uma mensagem consistindo do nome
do método a ser invocado no servidor e nos parâmetros desse método. O skeleton agrega
o valor de retorno (ou exceção) em uma mensagem e retorna-a ao programa-cliente.

Muitos sistemas existentes que talvez queiramos que seja distribuídos são escritos em C, C++,
Ada, COBOL, Smaltalk, ou outra linguagem.

Vantagem de RPC
 RPC: Gerencia o canal de comunicação, de forma que os programas aplicativos podem
ser escritos de modo que a localização de um procedimento, quer local ou remoto, seja
transparente.
 Simplicidade: Facilidade de uso e implementação, especialmente em sistemas
distribuídos;
 . Compatibilidade: Suportado por muitas linguagens de programação e sistemas
operacionais.
 Eficiência: Geralmente é mais eficiente em termos de desempenho do que algumas
outras abordagens de comunicação remota.

Desvantagens de RCP

 Complexidade de Rede: Pode ser afetado por latência de rede e congestionamento,


especialmente em redes instáveis ou de baixa largura de banda.
 Segurança: Vulnerável a ataques de segurança, como ataques de negação de serviço
(DDoS) e ataques de falsificação de identidade.
 Escalabilidade Limitada: Pode encontrar dificuldades em escalar para um grande
número de clientes devido à sobrecarga de rede e servidores.

Vantagens de RMI

 RMI (Remote Method Invocation): Permite que objetos Java sejam acessados e
manipulados remotamente, o que facilita a construção de sistemas distribuídos em Java.
2. Orientado a Objeto: Mantém as características de orientação a objeto, como
encapsulamento e herança, em ambientes distribuídos.
 Segurança: Pode ser integrado facilmente com mecanismos de segurança Java, como
autenticação e autorização.

Desvantagens de RMI

 Dependência de Java: Limitado ao ecossistema Java, o que pode restringir a


interoperabilidade com sistemas escritos em outras linguagens.
 Complexidade de Configuração: Requer configuração e administração adicionais
para garantir a comunicação correta entre os objetos remotos.
 Desempenho: Pode ter um desempenho inferior em comparação com abordagens
mais leves, devido à sobrecarga de objetos e serialização

CORBA

Permite a comunicação entre aplicações cliente e servidor heterogêneas, é uma parte do Common
Object Request Broker Architecture (CORBA).

O CORBA é uma arquitetura de software que permite que objetos distribuídos escritos em
diferentes linguagens de programação se comuniquem uns com os outros de forma transparente
em uma rede de computadores. O protocolo Cobra, especificamente, é uma parte do CORBA que
define como os objetos se comunicam uns com os outros através da rede. O protocolo Cobra
permite que os objetos CORBA troquem mensagens, invoquem métodos remotos e
compartilhem dados entre si, independentemente da linguagem de programação em que foram
escritos ou do sistema operacional em que estão sendo executados. Isso facilita o
desenvolvimento de sistemas distribuídos complexos, onde diferentes componentes podem ser
desenvolvidos em diferentes plataformas e linguagens de programação.

Princípios Fundamentais da Comunicação Distribuída:* 1. *Transparência:* Os sistemas


distribuídos devem ocultar as complexidades da comunicação entre os componentes distribuídos,
fornecendo uma interface simples e transparente para os usuários e aplicativos. 2. *Concorrência:* Os
sistemas distribuídos devem ser capazes de lidar com múltiplas operações simultâneas de forma eficiente,
garantindo a consistência e a coerência dos dados compartilhados entre os diferentes nós. 3.
*Escalabilidade:* Deve ser possível adicionar ou remover nós de forma dinâmica e escalável, garantindo
que o sistema possa lidar com um grande número de usuários e cargas de trabalho variáveis. 4.
*Tolerância a Falhas:* Os sistemas distribuídos devem ser robustos o suficiente para lidar com falhas de
hardware, software ou comunicação sem comprometer a disponibilidade e a consistência dos serviços
oferecidos. *Modelos de Comunicação:* 1. *Cliente-Servidor:* Um modelo em que os clientes
solicitam serviços a um servidor centralizado, que os fornece em resposta. É comumente usado em redes
de computadores e na internet. 2. *Peer-to-Peer (P2P):* Um modelo em que todos os participantes têm
capacidade para atuar tanto como cliente quanto como servidor, permitindo compartilhamento direto de
recursos e serviços entre os pares. 3. *Publicação-Subscrição:* Um modelo em que os participantes se
inscrevem em determinados tópicos ou eventos de interesse e recebem atualizações automaticamente
quando ocorrem esses eventos. É comumente usado em sistemas de mensageria e notificação. *Desafios e
Soluções:* 1. *Segurança:* Desafio: Garantir a confidencialidade, integridade e autenticidade dos dados
transmitidos em um ambiente distribuído. Solução: Implementação de protocolos de segurança robustos,
como criptografia e autenticação de usuário. 2. *Consistência de Dados:* Desafio: Manter a consistência
dos dados compartilhados entre os diferentes nós do sistema, especialmente em face de atualizações
concorrentes. Solução: Uso de técnicas de controle de concorrência, como bloqueios e transações, para
garantir a atomicidade, consistência, isolamento e durabilidade (ACID) das operações de banco de dados.
3. *Escalabilidade:* Desafio: Garantir que o sistema distribuído possa lidar com um grande número de
usuários e cargas de trabalho variáveis de forma eficiente. Solução: Adoção de arquiteturas escaláveis,
como microsserviços e computação em nuvem, e uso de técnicas como balanceamento de carga e
dimensionamento automático de recursos. *Aplicação Prática:* Um exemplo prático de comunicação
distribuída é um sistema de comércio eletrônico, onde clientes interagem com um servidor central para
realizar compras, enquanto o servidor se comunica com vários serviços distribuídos, como bancos de
dados de produtos, sistemas de pagamento e serviços de entrega, para atender às solicitações dos clientes
de forma eficiente e confiável. Este sistema deve lidar com desafios como segurança de transações
financeiras, consistência de inventário de produtos e escalabilidade para lidar com picos de tráfego
durante promoções e eventos sazonais.
Enter
Enviaste
Anulaste o envio de uma mensagem
Enter

22:09
Enviaste
*Introdução:* *Conclusão:* A comunicação distribuída é muito mais do que simplesmente enviar
e receber dados entre sistemas remotos; é a espinha dorsal de um mundo digital interconectado. Ao
compreender os princípios subjacentes, os modelos de comunicação, os desafios e as soluções
associadas, os profissionais da área podem projetar e implementar sistemas distribuídos robustos e
eficientes, capacitando a colaboração, a escalabilidade e a inovação contínua. Em um cenário
tecnológico em constante evolução, a comunicação distribuída continuará desempenhando um papel
central, moldando o futuro da computação e da conectividade global.

Você também pode gostar