2017-01-08 9 views
0

私は共有リソースにアクセスするすべての異なるサーバーで一連のサービスを実行しています。何らかの処理が必要な動画を含むフォルダのリスト。サービスのリストから矛盾のないフォルダのセットにアクセスする方法

サービスが同時に同じフォルダにアクセスするのを防ぐためのロック機構を実装したいと思っています。これまでのところ、フォルダ内にテキストファイルを「フォルダ内ロック」として作成し、ビデオファイルを処理する前に

私は、このテストでは、サービスがフォルダを検索する実際のプロダクション設定ではうまくいかないことは確かです。

アイデア?

ご協力いただきありがとうございます。

+0

「ロックファイル」のアイデアはうまく聞こえます。なぜそれは動作していないと思いますか?あなたが覚えておかなければならないのは、ロックをダブルチェックすることです(https://en.wikipedia.org/wiki/Double-checked_locking) –

+0

これらのサービスが同じマシン上にある場合は、適切なプロセス間同期を使用する必要があります。http ://stackoverflow.com/questions/229565/what-is-a-good-pattern-for-using-a-global-mutex-in-c。そうでなければ、FileShare.Noneでファイルベースのロックを作成しようとする可能性があります - http://stackoverflow.com/questions/5522232/how-to-lock-a-file-with-c - http:// stackoverflowを参照してください。 .com/questions/1746781/win-with-a-file-is-available-for-win32を参照してください。 **ファイルが存在するかどうかを確認しない** - 確実にロックする。 –

答えて

2

Redis RedlockConsul lockなどの分散ロックメカニズムを使用できますが、この共有フォルダに対して複数のサーバーが戦っている場合、(複数のフォルダ内のファイルをシャーディングすることは考えられません。あなたのサーバは(同じ整合性のあるハッシュアルゴリズムを使用して)専用のフォルダのためだけにファイルを処理しますか?こうすることで、すべてのN-1サーバがN番目のサーバがあなたが持っている単一フォルダ内のすべてを処理するのを待つのではなく、処理を並列化することができます。