2016-03-14 2 views
2

Je construis un service web reposant avec Django comme backend et je suis actuellement concerné par la mise à l'échelle. Je veux avoir une architecture comme ceci: http://www.djangobook.com/en/2.0/_images/scaling-4.png où je peux juste commencer plus d'instances de django sur la charge élevée. Mon problème est que je ne sais pas comment externaliser le contenu téléchargé par l'utilisateur (dans django appelé Media). Mes idées de base sont: Amazon S3, téléchargement FTP, montage SMT ou NFS, ou un type de fichier db comme GridFS. Étant donné que l'UE a annulé l'accord Save Harbour et qu'il existe une grande insécurité juridique pour les entreprises de l'UE de mettre des données d'utilisateur sur des serveurs hors UE, je ne peux pas utiliser Amazons S3 ou toute solution de stockage hors UE. J'ai regardé Minio, un serveur de stockage compatible API S3. Je ne pouvais obtenir que les messages de minio fonctionnant avec la dernière version (non stable), mais pas le get. D'autres serveurs compatibles S3 comme CEPH sont "trop ​​gros" pour mon utilisation.Comment externaliser les données média de Django et les servir au frontend

J'ai pensé à télécharger les fichiers sur un serveur ftp et les servir à partir de là avec nginx. Le problème est que la fonctionnalité ftp de django-storages ne semble pas stable et que django-resto est obsolète et n'est plus maintenu.

Les montages SMB/NFS sont instables et django perdrait des données qu'il écrirait, lorsque le montage est indisponible en raison de pannes réseau.

GridFS je ne pouvais pas me mettre au travail car il utilise mongodb, qui est non relationnel et django est relationnel. La fourchette django non relationnelle n'est pas bien entretenue. En termes de fichiers de service de GridFS, il y a nginx-gridfs et mod_gridfs, les deux ne sont plus maintenus.

Avez-vous des idées sur la façon d'externaliser les médias django?

+0

Je ne suis pas sûr de la pertinence de mongodb étant non-relationnelle. L'utilisation de gridfs pour vos fichiers statiques n'exige pas que vous utilisiez mongodb pour le reste de vos données. –

+0

D'accord, bon point. Mais encore je ne serais pas en mesure de servir les médias de gridfs parce que les deux nginx-gridfs et mod_gridfs sont obsolètes –

+0

Des progrès avec ce problème? Actuellement, j'essaie d'utiliser Minio avec mon projet django. – belek

Répondre

1

Eh bien, j'ai résolu mon problème en utilisant la bibliothèque Minio. Classe de stockage spéciale créée, qui hérite de FileStorageClass de django. Méthodes url() et save() surchargées. Déplacé vers externe module.

+0

Est-ce que cela fonctionnera? https://github.com/tomhoule/django-minio-storage – sivabudh