O que devo fazer para manter um servidor de cache de arquivos comum? NFS é boa ideia? [fechadas]

2

Eu não sou um cara de networking ou devops, mas tenho que fazer isso para minha empresa porque minha empresa não pode pagar, então me perdoe por erros.

Tenho um aplicativo da web hospedado no google cloud e uso o balanceador de carga fornecido pelo google cloud, no backend Eu tenho 2 instâncias para o aplicativo da web. O problema é que estou usando o cache de arquivos e o cache é separado para ambos os servidores. Não é caching HTTP nem nada, é cache de back-end do aplicativo da Web não nginx.

Meus servidores estão executando o Ubuntu 16.04 LTS.

Como posso manter um servidor de cache de arquivos comum? Eu quero manter um terceiro servidor para armazenamento em cache de arquivos para que o cache seja comum para ambas as instâncias, e para isso eu estou pensando em usar o NFS, é uma boa idéia usar o NFS para cache de arquivos?

Eu pesquisei muito pela internet e foi aí que ouvi falar sobre o NFS.

    
por user1735921 01.10.2017 / 12:46

1 resposta

3

Um servidor de arquivos comum para todas as suas instâncias é uma ideia problemática porque pode se tornar um gargalo e um único ponto de falha. Dessa forma, pode acabar por derrotar o propósito de usar um balanceador de carga em primeiro lugar.

Para recomendar uma solução, seria necessário saber muito mais sobre a arquitetura do seu sistema. Eu posso dar algumas sugestões que podem ou não funcionar dependendo da sua arquitetura.

  1. Verifique se suas instâncias podem responder a todas as solicitações, mesmo que a VM do cache não esteja respondendo. Se os caches estiverem lá apenas para melhorias de desempenho, as instâncias provavelmente poderão responder sem depender dos caches - não com a mesma eficiência.
  2. Shard o cache. Se você puder calcular um hash da identidade do recurso que está sendo armazenado em cache e usá-lo para escolher entre várias VMs de cache, seu design será mais escalonável. E, usando o mesmo hash, você ainda pode se beneficiar de seus backends de LB com acesso a resultados armazenados em cache por outras instâncias.
  3. Cache nos backends de LB também. Mesmo se você tiver um cache compartilhado, é uma boa idéia fazer o cache nos backends de LB também. Ele pode proteger contra pontos de acesso em suas VMs de cache e torna seu serviço mais resiliente se uma das VMs de cache estiver indisponível.

Sua escolha de protocolo deve ser orientada por quão bem você pode atender aos requisitos acima. Eu não acho que o NFS é a melhor escolha porque é difícil para a camada de aplicação implementar tempos limite quando um dos servidores NFS não responde. E a possibilidade de um servidor NFS não responder, fazendo com que vários backends de LB se comportem mal, é um risco que eu preferiria não ter.

Um protocolo no qual o lado do cliente (executado nos backends de LB) é implementado no modo de usuário é provavelmente uma escolha melhor porque é mais provável que qualquer encadeamento fique preso por causa de um servidor de cache não respondente. E é mais simples implementar tempos limites no acesso às VMs de cache quando implementadas no modo de usuário.

    
por 01.10.2017 / 23:44