2

バックエンドとして Django を使用して安らかな Web サービスを構築しており、現在スケーリングに関心があります。次のようなアーキテクチャが必要です: http://www.djangobook.com/en/2.0/_images/scaling-4.png 高負荷でより多くの Django インスタンスを起動できます。私の問題は、ユーザーがアップロードしたコンテンツを外部化する方法がわからないことです(djangoではメディアと呼ばれます)。

私の基本的なアイデアは、Amazon S3、FTP アップロード、SMT または NFS マウント、または GridFS のようなある種のファイル データベースです。

EU はセーブ ハーバー協定を取り消し、EU 企業が EU 以外のサーバーにユーザー データを配置することについて法的な不確実性が多数存在するため、Amazon S3 や EU ベース以外のストレージ ソリューションを使用することはできません。S3 API対応のストレージサーバーであるMinioを見てきました。最新の(安定していない)リリースで動作するminioへの投稿のみを取得できましたが、取得はできませんでした。CEPH のような他の S3 互換サーバーは、私のユースケースには「大きすぎます」。

ファイルをftpサーバーにアップロードし、そこからnginxで提供することを考えました。問題は、django-storages の ftp 機能が安定していないように見え、django-resto が廃止され、メンテナンスされなくなったことです。

SMB/NFS マウントは不安定であり、ネットワーク障害のためにマウントが利用できない場合、django は書き込み対象のデータを失います。

GridFS は、非リレーショナルであり、django がリレーショナルである mongodb を使用しているため、動作しませんでした。非リレーショナル django フォークは十分に維持されていません。GridFS からファイルを提供するという点では、nginx-gridfs と mod_gridfs があり、どちらもメンテナンスされていません。

django のメディアを外部化する方法について何かアイデアはありますか?

4

1 に答える 1

1

さて、Minioライブラリを使用して問題を解決しました。django の FileStorageClass を継承する特別なストレージ クラスを作成しました。url() および save() メソッドをオーバーライドしました。外部モジュールに移動しました。

于 2016-06-29T12:45:27.250 に答える