2017-02-01 5 views
0

私はnodejsを実行する3台のサーバー、ngninxロードバランサ(リバースプロキシ)とフロントエンドコード用の4台目のサーバーを持っています。すべてが完璧に動作しますが、私はファイルのアップロードを管理したいと思います。私はこのinfastructureの下でこれをいかに管理できますか?複数のサーバー上のNodejファイル

たとえば、これら3つのnodejsサーバーの1つが同じサーバー上のファイルをアップロードする場合、このファイルにどうやってアクセスできますか?

nodejsサーバーはexample.com/apiリンクの下にありますが、リバースプロキシ要求が1つのサーバーに送られるため、どのサーバーが特定のファイルであるかわかりません。

すべてのnodejsサーバーにファイルをアップロードする必要がありますか?

+0

つのオプション: 使用MongoDBのGridFSストレージ - バイナリ は、Redisのようパブサブ/ブローカー/メッセンジャー/キューを使用して、サーバー・マップにファイルを維持し、サーバーを見つけるために、このRedisのをクエリとして、それは、大きなファイルを保存することができますファイルが存在する場所。 –

答えて

1

独自のストレージを持つ別々のサーバーに物理的にある3つのnode.jsサーバーがある場合、ファイルへのアクセスを共有する通常の方法は、3つのサーバーすべてがアクセスできる共有ストレージを持つことです。 .jsサーバーはファイルのアップロードを行い、誰でもアクセスできる共有ストレージにデータを保存します。

3つの別々のnode.jsサーバーが同じボックス上の別々のプロセスである場合、それらはすでにすべて同じディスクストレージにアクセスできます。

ストレージを別々のプロセスまたはサーバーから共有する場合、ファイル管理コードが並行処理に対して安全であることを確認する必要があります。書き込み時は適切なファイルロック、一意のファイル名の生成のための並行処理安全メカニズム、安全なキャッシュ..

または、すべてのnode.jsサーバーがアクセスできるストレージ用のデータベースサーバーを使用できますが、データファイルを格納するだけで、必要なメタデータがたくさんある場合クエリと共有ファイルシステムへのアクセスが本当に必要なものであれば、データベースはデータを格納する最も効率的な方法ではないかもしれません。

ファイルをすべてのnodejsサーバーにアップロードする必要がありますか?

これはあまり効率的ではないからです。通常、すべてのサーバーがアクセスできる共有ストレージの場所またはサーバーまたはデータベースに一度アップロードします。

関連する問題