Criando um sistema distribuído no Amazon Web Services

5

O simples uso da AWS para criar um aplicativo tornaria esse aplicativo um sistema distribuído?

Por exemplo, se alguém usa o RDS para o servidor de banco de dados, o EC2 para o aplicativo em si e o S3 > para hospedar mídia carregada pelo usuário,
isso faz com que seja um sistema distribuído?

Se não, então, o que deve ser chamado e qual é a falta deste aplicativo para ser distribuído?

Atualizar
Aqui está a minha opinião sobre o aplicativo para esclarecer minha abordagem para a construção do sistema:

  1. O aplicativo que estou criando é um jogo social para o Facebook.
  2. Eu desenvolvi o aplicativo localmente em uma pilha LAMP usando Symfony2 .
  3. Para a produção, usei uma única instância do EC2 Micro para hospedar o próprio aplicativo, o RDS para hospedar meu banco de dados, o S3 para os arquivos enviados pelo usuário e o CloudFront para hospedar conteúdo estático.

Sei que isso pode parecer uma abordagem ingênua, por isso não tenha vergonha de expressar suas ideias.

    
por Songo 23.12.2013 / 19:30
fonte

4 respostas

2

Existem (pelo menos) duas linhas de pensamento sobre sistemas distribuídos, e dependendo do seu ambiente o seu sistema pode ou não qualificar como tal:

  1. Ciência da computação - nesse caso, um sistema distribuído resolve um problema algorítmico de tal forma que cada nó faz parte do processamento, em alguns casos, mesmo sem um controlador coordenando a tarefa. Normalmente, o objetivo é encontrar um algoritmo distribuído para resolver um problema com mais eficiência.

  2. Sistemas de Informação - nesse caso, um sistema distribuído é aquele que distribui apresentação, aplicativo e banco de dados entre várias entidades autônomas que se comunicam através de uma rede (passando mensagens entre si).

(Note que em um nível sinceramente abstrato que é a mesma definição - qualquer problema computacional é de fato um problema algorítmico, mas vamos salvar este argumento para uma discussão diferente).

Então, sim, você pode considerar o seu sistema distribuído, e podemos argumentar de acordo com a definição encontrada em Wikipedia :

1. There are several autonomous computational entities, each of which has its own local memory.[7]

2. The entities communicate with each other by message passing.[8]

No seu caso, o servidor web junto com o código do seu aplicativo, o servidor de banco de dados e o servidor de imagem são todos entidades computacionais autônomas com sua própria memória local, e eles se comunicam pela passagem de mensagens (isto é , enviando mensagens de um lado para outro através da rede).

O mesmo artigo da Wikipedia também lista várias arquiteturas para a construção de sistemas distribuídos, uma das quais é a n-camadas Arquitectura :

In software engineering, multi-tier architecture (often referred to as n-tier architecture) is a client–server architecture in which presentation, application processing, and data management functions are logically separated.

Além disso, seu sistema claramente tem vários níveis (o aplicativo, o banco de dados e o armazenamento de imagens). Provavelmente também tem várias camadas, isto é, se você seguiu o modelo MVC do Symfony . O MVC, por definição, separa a lógica de apresentação e aplicação, e como (pelo menos parte) a camada de apresentação é certamente executada por um navegador da Web, isso é, na verdade, um arquitetura de 3 camadas :

Three tier systems move the client intelligence to a middle tier so that stateless clients can be used. This simplifies application deployment. Most web applications are 3-Tier.

    
por 02.02.2014 / 08:20
fonte
0

Os recursos são distribuídos, mas a lógica não é. O banco de dados e o repositório S3 são controlados pelo aplicativo e não há paralelismo na tarefa executada pelo aplicativo entre diferentes máquinas. De acordo com a Wikipédia, existem dois requisitos para um sistema distribuído, ambos faltando no sistema que você descreveu (ou não foi esclarecido):

  • Existem várias entidades computacionais autônomas, cada uma com sua própria memória local
  • As entidades se comunicam entre si por meio da transmissão de mensagens.

Nesse sentido, ele não é um sistema distribuído e exigiria que diferentes servidores EC2 executando esse aplicativo coordenassem suas ações sobre como acessar e sincronizar recursos.

Editar: a partir da pergunta, não fica claro se apenas uma instância do EC2 é usada ou muitas. Na minha resposta acima, assumo uma única instância.

EDIT: pergunta atualizada do OP deixa claro que é uma única instância do EC2. Academicamente, esses aplicativos são considerados de várias camadas. A camada de cliente está na máquina do usuário final, a camada da web é o servidor EC2 e a camada Enterprise Information System (EIS) é o banco de dados e o repositório S3. Novamente, para que um aplicativo seja distribuído, você precisa distribuir o processamento da camada da Web em vários servidores. No entanto, na indústria, essas aplicações podem ser consideradas distribuídas devido à separação de locais. Então, eu diria que o aplicativo em si que é executado no servidor EC2 não é um sistema distribuído, mas toda a configuração (navegador do cliente < - > aplicativo Web < - > base de dados / s3) pode ser considerada como uma distribuição arquitetura / aplicação.

Por favor verifique também esta questão: link

    
por 26.12.2013 / 00:38
fonte
0

Seu design é um pouco distribuído, mas de maneiras muito simples e mínimas. Você decompôs funcionalmente sua carga de trabalho em vários servidores. Em 1980, isso teria sido considerado um sistema distribuído. Mas você não distribui (aka, partição, shard) qualquer parte individual de sua carga de trabalho em vários servidores. Não há distribuição substancial de trabalho nem replicação significativa em vários nós ou datacenters. Seu armazenamento (S3 e o CDN do CloudFront) é a única exceção; esses serviços distribuem inerentemente seu acesso ao armazenamento.

Não hesite em chamá-lo de "aplicativo em nuvem" ou "serviço em nuvem", mas, de acordo com os padrões de hoje, ele não é muito distribuído.

    
por 30.10.2014 / 20:46
fonte
0

Seu exemplo descreve delegação, não distribuição. A delegação estaria atribuindo uma tarefa específica a um subsistema apropriado, onde a distribuição divide um processo em partes aproximadamente semelhantes que podem ser executadas em paralelo. Um simples teste decisivo: pergunte a si mesmo, se eu precisar escalar esse sistema, eu o dimensiono "up" (um computador maior) ou "out" (computadores pequenos adicionais). Eu poderia escalar esse 10x? 1000x? Essas são preocupações do mundo real que são resolvidas por sistemas distribuídos.

    
por 06.07.2016 / 21:16
fonte