Rede centralizada vs descentralizada

A computação centralizada é análoga à topologia em estrela nas redes em que há n pontos de entrada e n-1. Vemos todo o cálculo sendo realizado pelo processador dinâmico e também incorporamos uma rotina de decisão para transmitir a mensagem a outros sistemas vinculados. Esses sistemas são apenas o espelho, enquanto a computação é feita pelo processador de pivô.

A computação descentralizada é análoga ao processamento baseado em nó distribuído, onde a topologia para interação entre os nós é aleatória e, portanto, algumas vezes há atraso devido à orientação dos nós, uma vez que a computação é dispersa, compensa o tempo no processamento, armazenamento e recuperação .

Você pode definitivamente consultar a IBM e a Amazon Research para obter exemplos da computação centralizada e descentralizada.

Computação em nuvem x computação distribuída

Etimologicamente, a computação centralizada implica computações feitas centralmente (presumivelmente em um sistema / subsistema singular). Descentralizado seria o oposto - ou seja, o cálculo é feito em vários sistemas / subsistemas.

Usando o sistema de palavras aqui - pode significar uma unidade de processamento (CPU), uma máquina de turing, um sistema fortemente acoplado / em cluster etc. A parte importante é que não é necessário se preocupar com nenhuma comunicação, estado e divisão do sistema. cálculos dentro desse sistema centralizado.

Em um sistema descentralizado, a divisão do trabalho (cálculos feitos por diferentes participantes “nós” do sistema de computação descentralizado), a distribuição das informações do estado e a comunicação entre os nós se tornam importantes. Algumas coisas que surgem como resultado disso são:

  • Os nós são fisicamente separados no espaço
  • A comunicação de uma mensagem levará algum tempo finito. Não é mais rápido que a velocidade da luz.
  • As mensagens levam algum tempo para percorrer algum meio, do nó de origem ao nó de destino.
  • nós podem
  • receba mensagens de outros nós,
  • executar um cálculo com base em seu estado (e alterá-lo),
  • e envie mensagens para outros nós. todos os nós não têm uma visão de todo o estado (ou imagem) o tempo todo.
  • as chances são de que nenhum nó tem a imagem completa de todo o estado a qualquer momento.
  • A implementação física de nós de computação envolve relógios. Relógios físicos sempre flutuam em comparação um com o outro.
  • Uma alternativa para separar o estado em processadores separados é ter o estado compartilhado (na memória compartilhada centralmente) - mas os nós ainda precisam sincronizar entre si usando bloqueios (no subsistema de memória compartilhada) ou alguma outra rede de sinalização.
  • Uma consideração prática é que os programadores humanos são péssimos ao escrever código sem erros em sistemas centralizados. Torna-se ainda mais difícil escrever o código correto em sistemas descentralizados com problemas de bloqueio / deadlocks, passagem de mensagens, sincronização e compartilhamento de informações e dedução do que está acontecendo no cenário geral (estado completo do sistema).

Computação centralizada:

Isso representa um servidor múltiplo como arquitetura, onde o servidor é aquele em que todo o processamento principal é realizado. Ele ainda tem mais recursos de computação que seus clientes.

As máquinas clientes se conectam ao computador servidor (também podemos chamá-lo como computador mestre) e envia suas solicitações.

Um exemplo típico de computação centralizada seria o NFS (Network File System). Existe uma única máquina NFS File Server que realmente hospeda todos os dados e metadados do sistema de arquivos. As máquinas clientes executam um componente do lado do cliente (NFS Client) que permite que as máquinas montem o sistema de arquivos remoto localmente nos respectivos sistemas operacionais.

O NFS Client intercepta solicitações do sistema de arquivos correspondentes à montagem NFS e usa o RPC para enviá-las pela rede ao servidor de arquivos NFS.

Não é que os clientes realmente tenham que ser leves. De fato, os Clientes NFS são muito agressivos quando se trata de armazenar metadados em cache e implementam muitas otimizações para reduzir o número de viagens de ida e volta ao servidor.

O conceito a ser entendido aqui é que todos os clientes NFS dependem muito da máquina do servidor NFS que hospeda os dados do sistema de arquivos. As solicitações de operação do sistema de arquivos que chegam nas máquinas clientes não são processadas localmente. Eles são enviados pela rede para o servidor de arquivos remoto. Portanto, a máquina cliente está fortemente acoplada à máquina servidor, onde todas as solicitações do sistema de arquivos são processadas.

Se a máquina do servidor cair, os clientes podem se tornar inúteis, pois não há servidor remoto para processar as solicitações, e os próprios clientes não têm recursos suficientes para manter o serviço no caso de uma falha desse tipo.

Outro exemplo de computação centralizada seria um servidor de aplicativos da web que hospeda toda a lógica de negócios, executa o banco de dados etc. Várias máquinas clientes se conectam ao servidor de aplicativos da web e enviam / recebem solicitações / respostas por meio do protocolo da camada de aplicativos HTTP (obviamente abaixo do HTTP executado sobre TCP).

Não é o caso de os clientes não executarem nenhum tipo de software. Eles geralmente são thin clients que são os principais responsáveis ​​pela lógica de apresentação - por exemplo, exibindo resultados, permitindo que o usuário personalize a interface do usuário etc. Mas toda a lógica principal do aplicativo é independente no software em execução no servidor de aplicativos da web

As principais desvantagens da computação centralizada são o ponto único de falha e a escalabilidade limitada.

  • Ponto único de falha - Se a máquina principal (servidor) ficar inativa, os clientes não poderão mais processar solicitações do usuário, pois a máquina que executa o software principal para processar solicitações está inoperante. Agora, o impacto dessa falha variará de sistema para sistema. Depende de quais recursos são fornecidos pelo componente cliente. Se os clientes não forem responsáveis ​​pela execução de nenhuma lógica principal e dependerem fortemente da máquina servidor, a disponibilidade será completamente comprometida para esse sistema, caso a máquina servidor falhe.
  • Escalabilidade limitada - Como toda a lógica do aplicativo principal é independente em uma única máquina para servidor, a única maneira que podemos imaginar de dimensionar o sistema é a escala vertical - adicionando mais armazenamento, largura de banda de E / S, poder de processamento (número de CPUs, número de núcleos) para a máquina do servidor. Quanto mais poderosa for a nossa máquina servidor, melhor será o desempenho do sistema em geral.
  • O problema é que é difícil criar, manter e confiar em uma única caixa mágica de computador que resolve todos os nossos problemas. Eventualmente, as tentativas de expandir uma única máquina adicionando mais hardware podem não ser econômicas.
  • Pode ser mais razoável adicionar outro nó de computação ao sistema - isso significa dimensionar (também conhecido como dimensionamento horizontal) adicionando outra máquina com recursos de computação suficientes.
  • Taxa de transferência - eu diria que a taxa de transferência é apenas mais um lado da escalabilidade limitada. Imagine que existe apenas um sistema e, com um determinado número de recursos e poder de processamento (número de núcleos, etc.), há apenas tantas solicitações de clientes que podem ser processadas em paralelo. Durante períodos de alta atividade, o modelo de servidor único logo se tornará um gargalo, pois será difícil acompanhar o fluxo de solicitações simultâneas de usuários e o número de solicitações que o sistema pode realmente processar.

Computação descentralizada

  • Não existe uma única máquina servidor que seja a única responsável por todo o processamento.
  • A arquitetura permite distribuir a carga de trabalho entre vários nós de computação (aka máquinas), e cada um deles é igualmente capaz de atender a solicitações.
  • O melhor exemplo que eu definitivamente deveria mencionar é o armazenamento de dados do Cassandra. Os dados são armazenados em vários nós e as solicitações do cliente podem chegar a qualquer nó (provavelmente aquele que estiver geograficamente mais próximo para minimizar a latência).
  • Não há realmente nenhum ponto único de falha porque as máquinas clientes não contam com um único servidor para atender a todas as solicitações. O sistema é composto por vários nós que ainda podem estar disponíveis para processar solicitações do usuário.
  • Podemos expandir o sistema adicionando mais nós (e, portanto, mais poder computacional, mais tolerância a falhas etc.).
  • Obviamente, nesses sistemas, encontramos as complexidades de problemas com sistemas distribuídos, como gerenciamento de réplicas, mantendo a consistência entre cópias de dados em vários nós, etc.
  • Portanto, meu entendimento é que conceitos fundamentais de sistemas distribuídos devem definitivamente ser entendidos e internalizados antes de se projetar um sistema descentralizado.
  • Devemos estar cientes dos desafios conhecidos no espaço do sistema distribuído. Na computação centralizada, temos um modelo mental simples e agradável, uma vez que existe apenas uma única máquina servidor que faz todos os trabalhos. Se isso acabar, estamos sem sorte.
  • Mas na computação descentralizada, o modelo mental não é fácil. Como agora temos mais máquinas, também temos mais problemas para resolver. Na verdade, eu chamaria de computação descentralizada semelhante à computação distribuída, pois realmente não vejo muita diferença. Normalmente, precisamos lidar com o mesmo conjunto de problemas e desafios nos dois espaços.