Prof-Calebe / livro-sistemas-distribuidos

E-Book de Sistemas Distribuído desenvolvido nas disciplinas de Computação e Sistemas Distribuídos
MIT License
0 stars 31 forks source link

Metas e Cliente-Servidor #4

Open CallmeHenrique opened 3 months ago

CallmeHenrique commented 3 months ago

Sistemas Distribuídos

  1. Metas/Desafios
  2. Arquiteturas
  3. Processos
  4. Protocolos

O que é um Sistema Distribuído?

“Um Sistema Distribuído é um conjunto de computadores independentes que se apresenta a seus usuários de maneira única e coerente”, ou seja, um sistema composto por vários computadores mas que mesmo assim parece que é apenas um único sistema.

Metas e Desafios

Sistemas Distribuído devem atingir as seguintes quatro metas (não necessariamente precisa ser feito em um bom nível, pode ser apenas cumprido superficialmente, mas deve ser cumprido):

  1. Acesso a recursos;
  2. Transparência da distribuição;
  3. Abertura;
  4. Escalabilidade.

Acesso a Recursos

Transparência de distribuição

Existem momentos em que ocultar totalmente do usuário não é uma boa ideia, visar a transparência de distribuição pode ser bom para um sistema, porém deve ser levado em conta aspectos como desempenho, por exemplo. Será que vale a pena fazer a replicação de recursos complexos constantemente do Japão para o Brasil e vice-versa?

Abertura

Um Sistema Distribuído Aberto é um sistema que oferece serviços de acordo com regras padronizadas que descrevam a semântica e sintaxe desses serviços, no qual são especificados por meio de interfaces em uma linguagem de definição de interface (Interface Definition Language).

Especificações adequadas são completas e neutras.

Ambas essas caracteristicas são importantes para Interoperabilidade e Portabilidade;

Um sistema distribuido aberto também deve ser extensível, ou seja, deve ser fácil para adicionar partes que são executadas em um sistema operacional diferente.

Escalabilidade

Como a conectividade mundial pela internet vem se tornando muito comum, a escalabilidade é uma meta importante para um sistema distribuído. Escalabilidade essa que pode ser medida em três dimensões:

  1. Tamanho: Facilidade em adicionar usuários e recursos;
  2. Distância Geográfica: Usuários e recursos podem estar longe um do outro;
  3. Gerenciamento: Facilidade em gerenciar e administrar sistemas.

É necessário resolver problemas quando se trata de ampliação de sistemas, considerando a escalabilidade em relação ao tamanho: para suportar mais usuários e recursos, os serviços, os dados e os algoritmos centralizados ficam muito limitados.

O problema fica evidente quando nos tratamos de ambientes centralizados, uma vez que a quantidade de usuários e recursos aumentando faz com que o único servidor apresente gargalos.

Protocolos

Regra de Comunicação é como eu vou construir uma mensagem, empacota-la, enviar essa mensagem e do outro lado, desempacotar.

Protocolo HTTP é composto por Header e Body (e uma linha em branco pra separar os dois).

20240412_214545.jpg

(Composição HTTP e REST)

20240412_214920.jpg

(Estrutura de comunicação de sistemas)

Os sistemas de baixo possuem a mesma regra de comunicação, uma das opções de conversas entre eles é o Cliente-Servidor

Sistemas Computacionais Diferentes

Sistemas computacionais diferentes possuem regras de comunicações diferentes, como elas conversam entre si? Através de conversores de dados.

Solução Cliente-Servidor

Em um Cliente-Servidor ligado ao REST, é necessário programar a comunicação entre ambos.

Requisição e Resposta

resp = f(req)

A resposta é o resultado de uma função f tal que a minha solicitação é o parâmetro requisição.

Em computação - CHAMADA REMOTA

Servidor s = Servidor.req(característica)

resp = s.send(informação)

Outro exemplo:

CLIENTE

resp = soma(A, B)

SERVIDOR

soma(x,y) {

return x + y

}

Antes:

CLIENTE —REQ—> SERVIDOR

SERVIDOR —RESP—> CLIENTE

Depois:

CLIENTE —REQ—> MIDDLEWARE —> SERVIDOR SERVIDOR —RESP—> MIDDLEWARE —> CLIENTE

Middleware que faz as conversões de um lado para o outro.

Revisão - Protocolos

Como o Cliente e o Servidor se conversam? Via HTTP

Desenho de uma arquitetura HTTP:

20240419_213338.jpg

Desenho da estrutura de uma mensagem HTTP:

20240419_213355.jpg

GET / HTTP/1.1

HOST: blahost

/n

Language: PT-BR

Nesse caso: http://blahost:8080/

URL: http://blahost:8080 >> / <<

Por isso que podemos converter o seguinte URL:

http://blahost:8080/minhaprimeirapagina.html

Para a requisição:

GET /minhaprimeirapagina.html HTTP/1.1

HTTP/1.1 200 OK

Content-Type: <Tipo do conteúdo que estou enviando>

Content-Lenght: <Tamanho do conteúdo>

/n

Body <Conteúdo em Si>

HTTP/1.1 404 Not Found

/n

Referências: Anotações das Aulas de Sistemas Distribuídos - 7º Ciclo de Ciência da Computação - Semestre 1/2024 - Centro Universitário FEI Livro: Andrew S. TANENBAUM, Maarten Van Steen - Distributed Systems: Principles and Paradigms, 2nd Edition, Pearson - Prentice Hall, 2007