Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arquiteturas #3

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Arquiteturas #3

wants to merge 2 commits into from

Conversation

marappoli
Copy link

@marappoli marappoli commented May 12, 2024

Arquitetura Cliente-Servidor

É um modelo fundamental em sistemas distribuídos, onde as responsabilidades são divididas entre duas categorias de entidades: os clientes e os servidores.

Clientes

  • Iniciam solicitações de serviço ou recursos a um servidor.
  • Consistem em interfaces de usuário ou aplicativos que interagem com os usuários finais.
  • São responsáveis por enviar solicitações para os servidores e receber as respostas correspondentes.

Servidores

  • Entidades que recebem solicitações dos clientes e respondem a elas fornecendo serviços ou recursos.
  • Tipicamente máquinas de alta capacidade e desempenho, projetadas para lidar com múltiplas solicitações de clientes de forma eficiente.
  • Fornecem uma variedade de serviços, como armazenamento de dados, processamento de dados, hospedagem de sites, fornecimento de conteúdo multimídia, entre outros.
  • Responsáveis por processar as solicitações dos clientes, executar as operações correspondentes e retornar os resultados aos clientes.

Comunicação Cliente-Servidor

  • Geralmente ocorre por meio de protocolos de rede como HTTP, TCP/IP, UDP, entre outros.
  • Os clientes estabelecem uma conexão com o servidor, enviam solicitações por meio dessa conexão e aguardam as respostas correspondentes do servidor.
  • A comunicação pode ser síncrona ou assíncrona, dependendo dos requisitos da aplicação e do protocolo de comunicação utilizado.

Vantagens

  • Escalabilidade
  • Desempenho
  • Flexibilidade
  • Facilidade de manutenção

Limitações

  • Dependência de rede
  • Custo de infraestrutura
  • Ponto único de falha (se o servidor falhar, todos os clientes que dependem dele podem ser afetados)
  • Latência de rede

Sistemas Peer-to-Peer (P2P)

Conceito de Peer-to-Peer

Em sistemas peer-to-peer, todos os nós (ou "peers") na rede têm capacidades e responsabilidades equivalentes. Não há um servidor central ou uma hierarquia fixa; em vez disso, cada nó pode atuar tanto como cliente quanto como servidor. Esses sistemas são caracterizados por sua descentralização, onde a gestão e distribuição dos recursos são realizadas coletivamente pelos próprios nós da rede.

Autonomia e Descentralização

A principal característica dos sistemas P2P é a descentralização. Cada nó na rede é independente e pode se comunicar diretamente com outros nós sem a necessidade de passar por um servidor central. Isso aumenta a robustez e a resiliência do sistema, pois a falha de um ou mais nós não compromete necessariamente toda a rede.

Arquitetura P2P

A arquitetura P2P pode variar desde modelos completamente descentralizados até modelos híbridos, onde existem alguns servidores centrais que facilitam a descoberta de peers ou a inicialização da comunicação. Em redes P2P puras, todos os nós têm a mesma função e podem se comunicar diretamente entre si. Já em redes P2P híbridas, há componentes adicionais que ajudam na organização e na eficiência da rede.

Distribuição e Compartilhamento de Recursos

Em sistemas P2P, os recursos, como arquivos, dados, ou capacidade de processamento, são distribuídos entre os nós da rede. Cada nó pode compartilhar seus próprios recursos e acessar recursos compartilhados por outros nós. Isso permite a construção de sistemas altamente escaláveis e eficientes na utilização de recursos, uma vez que a carga é distribuída de maneira equilibrada entre os nós.

Protocolos de Comunicação

A comunicação em redes P2P é geralmente baseada em protocolos específicos que permitem a descoberta de nós, a troca de mensagens e a transferência de dados. Alguns exemplos de protocolos P2P populares incluem BitTorrent, Gnutella e Kademlia. Esses protocolos garantem que os nós possam se encontrar e se comunicar de maneira eficiente, mesmo em redes dinâmicas e altamente distribuídas.

Aplicações de Sistemas P2P

Os sistemas P2P têm uma ampla gama de aplicações, incluindo compartilhamento de arquivos (e.g., BitTorrent), comunicação e mensagens (e.g., Skype), redes sociais descentralizadas, sistemas de armazenamento distribuído (e.g., IPFS), e computação distribuída (e.g., SETI@home). Eles são especialmente vantajosos em cenários onde a escalabilidade, a robustez e a ausência de um ponto único de falha são essenciais.

Vantagens dos Sistemas P2P

  • Escalabilidade: Podem lidar eficientemente com um grande número de nós e usuários, pois a adição de novos nós contribui com recursos adicionais à rede.
  • Robustez e Resiliência: A ausência de um servidor central elimina o ponto único de falha, tornando a rede mais resistente a falhas de nós individuais.
  • Distribuição de Carga: A carga de trabalho é distribuída entre todos os nós, evitando sobrecarga em um único ponto e melhorando o desempenho geral.

Limitações dos Sistemas P2P

  • Gerenciamento de Recursos: A descentralização pode dificultar o gerenciamento e a coordenação eficiente dos recursos distribuídos.
  • Segurança e Confiabilidade: Garantir a segurança e a confiabilidade pode ser desafiador devido à natureza aberta e distribuída dos sistemas P2P, tornando-os vulneráveis a ataques como malware e peers maliciosos.
  • Descoberta de Peers: Encontrar e conectar-se a peers relevantes pode ser complexo, especialmente em redes muito grandes ou dinâmicas.

Os sistemas P2P representam uma abordagem poderosa para a construção de redes distribuídas resilientes e escaláveis, oferecendo uma alternativa descentralizada aos modelos tradicionais cliente-servidor.

Sistemas Baseados em Agentes

Entidades autônomas chamadas Agentes interagem para alcançar objetivos comuns.

Conceito de Agentes

  • São entidades computacionais autônomas que têm capacidade de perceber o ambiente, tomar decisões e agir de acordo com seus objetivos e o contexto em que estão inseridos.
  • Caracterizados por sua capacidade de autonomia, reatividade, proatividade e habilidade de aprendizado.

Autonomia dos Agentes

  • Capacidade de agir independentemente, sem intervenção direta de usuários ou outros agentes.
  • Podem perceber o ambiente por meio de sensores, analisar informações, tomar decisões com base em seus objetivos e executar ações para alcançar esses objetivos.

Comunicação entre Agentes

  • Os agentes podem se comunicar uns com os outros por meio de mensagens ou protocolos de comunicação específicos.
  • A comunicação entre agentes pode ser síncrona ou assíncrona, dependendo dos requisitos da aplicação e do contexto em que os agentes estão operando.

Tipos de Agentes

  • Agentes reativos (que respondem a estímulos do ambiente)
  • Agentes cognitivos (que têm capacidade de aprendizado e raciocínio)
  • Agentes sociais (que interagem e colaboram com outros agentes)

Aplicações

  • Inteligência Artificial
  • Robótica
  • Sistemas de informação
  • Automação industrial
  • Jogos
  • Simulação

Úteis em cenários onde é necessário lidar com complexidade, incerteza e dinamicidade, pois permitem uma abordagem descentralizada e adaptativa para resolver problemas.

@marappoli marappoli changed the title Arquitetura Cliente-Servidor Arquiteturas May 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant