Casa > Q > Qual É A Melhor Maneira De Armazenar Imagens No Lado Do Servidor De Aplicações Móveis E Carregá-Las?

Qual é a melhor maneira de armazenar imagens no lado do servidor de aplicações móveis e carregá-las?

Tive recentemente que resolver o mesmo problema, então estou feliz em compartilhar minha solução.

O meu requisito era construir um sistema escalável para redimensionar e armazenar imagens em cache em tempo real com a resolução e qualidade que fosse necessária. Eu queria minimizar IO para imagens "quentes". Ou seja, se as imagens são solicitadas com frequência, elas devem se tornar "quentes" em todos os caches.

A minha solução é construída em groupcache. Groupcache é uma distribuição não expirada, lida através de cache LRU. Em contraste com a maioria das soluções de cache, você não pode adicionar pares de valores chave ao groupcache. Em vez disso, você define como recuperar o valor para uma chave específica.

O que torna o groupcache uma ferramenta tão boa para este problema é que quando vários servidores com o grupo groupcache solicitam a mesma chave, os dados são recuperados apenas uma vez e depois distribuídos automaticamente para os outros servidores. Carregar uma imagem nunca será mais do que um IO.

Esta solução é aplicável não só às imagens mas também a tudo o que pode ser traduzido para bytes. O time to live é possível através da adição de um timestamp arredondado à chave de cache.

Ocourse esta solução vem com tradeoffs. Você não pode armazenar dados para uma chave específica. Não (ainda) imagens quentes serão carregadas do disco ou precisarão de várias viagens de ida e volta à rede para buscar dados de outro membro do grupo de cache.

Outras performances podem ser alcançadas adicionando um balanceador de carga na frente que distribui a carga de acordo com o hash url, de modo que as chances são maiores de atingir um cache quente.

Estaria feliz em ouvir opiniões sobre esta solução.

De Lorollas

Porque é que os navegadores web usam tanto RAM? :: Como um desenvolvedor web pode ganhar dinheiro com a internet?