Armazenamento de imagem escalável

Atualmente estou projetando uma arquitetura para um aplicativo baseado na web que também deve fornecer algum tipo de armazenamento de imagem. Os usuários poderão fazer upload de fotos como um dos principais recursos do serviço. Além disso, a visualização dessas imagens será um dos principais usos (via web).

No entanto, não tenho certeza de como realizar um componente de armazenamento de imagem tão escalável no meu aplicativo. Eu já pensei em soluções diferentes, mas devido à falta de experiências, estou ansioso para ouvir suas sugestões. Além das imagens, também metadados devem ser salvos. Aqui estão meus pensamentos iniciais:

Use um sistema de arquivos (distribuído) como o HDFS e prepare servidores web dedicados como "clientes do sistema de arquivos" para salvar imagens enviadas por upload e solicitações de serviço. Os metadados de imagem são salvos em um banco de dados adicional, incluindo as informações do caminho de arquivo para cada imagem.

Use um sistema orientado a BigTable como o HBase em cima do HDFS e salve imagens e metadados juntos. Novamente, os servidores da web fazem o upload de solicitações e uploads de imagens.

Use um banco de dados completamente sem esquema, como o CouchDB, para armazenar imagens e metadados. Além disso, use o próprio banco de dados para upload e entrega usando a API RESTful baseada em HTTP. (Pergunta adicional: O CouchDB salva os blobs via Base64. Pode, no entanto, retornar dados em forma de image / jpeg etc.)?

questionAnswers(11)

yourAnswerToTheQuestion