Uma empresa desenvolveu um sistema de votação em massa para milhares de usuários concorrentes e o implantou na nuvem do provedor AWS. A API de cadastro e acesso à informação dos usuários foi disponibilizada por meio de um serviço ECS, que mantém de 10 a 100 instâncias registradas no balanceador de carga. O cadastro de um usuário consiste nas seguintes informações: nome, e-mail, telefone e foto. As informações textuais são armazenadas em um banco de dados relacional, e os arquivos são armazenados no disco da instância. Recentemente foi identificada uma falha intermitente, na qual usuários reportam que a sua foto raramente é exibida. Considerando que os serviços estão corretamente dimensionados, a causa dessa falha é:
- A)a não utilização de uma abordagem serverless;
Errada, porque a ausência de serverless não explica a perda intermitente da foto; o problema é o local onde o arquivo foi armazenado.
- B)a não utilização de um serviço de cache para os arquivos;
Errada, porque cache não resolveria a falta de durabilidade do arquivo entre instâncias diferentes, no máximo aceleraria o acesso.
- C)o número de instâncias no balanceador de carga ser muito alto;
Errada, porque ter muitas instâncias no balanceador não é o defeito em si; o problema é salvar a foto em disco local sem compartilhamento.
- D)a utilização de um banco de dados relacional;
Errada, porque o banco relacional pode guardar normalmente os dados textuais e não é a causa da foto sumir.
- E)o arquivo da foto ser armazenado no disco da instância.
Certa, porque salvar a foto no disco da instância em ambiente com balanceamento faz o arquivo ficar preso a uma máquina específica e indisponível nas demais.
Gabarito: E
A falha descrita tem cara de arquitetura mal pensada para ambiente com várias instâncias. Quando voce coloca a aplicação atrás de um balanceador e tem 10 a 100 instâncias, qualquer dado salvo no disco local de uma máquina fica preso nela. Se a próxima requisição do mesmo usuário cair em outra instância, essa nova máquina não terá a foto, então a imagem “some” de forma intermitente. Por isso o problema não é de processamento nem de banco relacional, mas de persistência dos arquivos em um lugar que não acompanha o balanceamento. Em nuvem, principalmente em ECS, a regra de ouro é: instância é descartável. O disco da instância não deve guardar informação que precise sobreviver a troca, reinício ou redirecionamento de tráfego. Para arquivos, o padrão é usar armazenamento compartilhado e durável, como S3, EFS ou outro serviço apropriado, em vez de depender do disco local. Isso evita exatamente esse tipo de comportamento “aparece às vezes, some às vezes”. Se você pensar em termos de banco de dados, os dados textuais podem ficar no relacional sem problema, porque ele foi feito para isso. Já a foto é um arquivo e, em arquitetura distribuída, arquivo em disco local de instância é quase uma armadilha com laço bonito. A banca quer que voce perceba essa incompatibilidade entre balanceamento de carga e armazenamento local. Então o gabarito E está correto porque o arquivo da foto ser armazenado no disco da instância faz com que ele fique inacessível quando a requisição cai em outra instância. Em sistemas com múltiplas réplicas, o armazenamento precisa ser compartilhado ou externo à instância para garantir consistência de acesso.