問題タブ [distributed-lock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 分散 .Net アプリケーションで一度に 1 人のユーザーのみがリソース (画面) にアクセスできるようにする方法は?
管理者専用の画面を必要とするクライアント サーバー ベースの Windows フォーム アプリケーションがあります。管理者機能は、常に 1 人の管理者だけがその画面にアクセスできるように実装する必要があります。Windows フォーム クライアント アプリケーションは、.NET Remoting を使用してサーバーと通信します。また、サーバー側は複数のマシンに分散されています。
java - 分散ロックサービス
どの分散ロックサービスを使用しますか?
要件は次のとおりです。
- 異なるプロセス/マシンから見られる相互排除(ロック)
- ロック...リリースセマンティクス
- 特定のタイムアウト後の自動ロック解放-ロックホルダーが死んだ場合、X秒後に自動的に解放されます
- Javaの実装
- ありがたい:.Netの実装
- 無料の場合:デッドロックの検出/軽減
- 簡単な展開。以下の注を参照してください。
「データベースを介して実行できる」や「JavaSpacesを介して実行できる」などの回答には興味がありません。すぐに使える、すぐに使える、実績のある実装に興味があります。
.net - .NET での分散ロック
複数のマシンで機能するロック メカニズムの推奨事項を探しています。私の場合、サービス マシンがダウンした場合に冗長性を確保する簡単な方法として、2 台のマシンでサービスを開始し、もう一方が終了するまで 1 つのブロックを保持できるようにしたいだけです。
Distributed Lock Serviceと同様ですが、人々が .NET との統合に成功したプロジェクトを特に探しています。
distributed-computing - 競合状態を処理するための一貫したハッシュと分散ロック
ワークロードが複数のノードに分散される分散システムでは、複数のリクエストが同時に同じデータを操作する競合状態に対処する 2 つの方法は、コンシステント ハッシュと分散ロックを使用することです。コンシステント ハッシュにより、1 セットのデータを操作するすべてのリクエストが同じワーカーに送信され、分散ロックにより、一度に 1 つのワーカーだけが任意のデータ セットを操作できることが保証されます。
私の質問は、どちらのアプローチの長所と短所、そしてどちらが有利であるかということです。
hazelcast - Hazelcast:分散ロックキーに使用しても問題ないオブジェクトは何ですか?
のために
メソッド、期待される/許容されるキーオブジェクトは何ですか?たとえば、文字列を使用して、クラスター内のさまざまなノードからこのロックを参照しても大丈夫ですか?それとも、ある種の分散オブジェクトである必要がありますか?
完全に正確に言うと、Hazelcast.getLock( "myLock")の呼び出しは、2つの異なるクラスターメンバーから呼び出されたときに、同じ分散ロックを参照しますか?
distributed - 分散ロックに ZooKeeper を使用していますか?
毎秒最大 1000 個のロック (主に異なるロック名) をサポートできる分散ロック サービスが必要です。誰かが ZooKeeper を使用して本番環境に分散ロックを実装したことがあるのだろうか。もしそうなら、いくつかのベストプラクティスと制限を教えていただけますか? たとえば、1 秒あたりにサポートできる分散ロックの数、教訓、またはベスト プラクティスはありますか? ありがとう!
java - Java の有効期限を設定できるグローバル分散ロック
グローバルに分散されたロックが必要なユースケースがあります。を使い始めましたSELECT .. FOR UPDATE
が、サーバーの数を増やしていくと、すぐに問題が発生し始めました。また、ロックをチェックアウトした後に終了し、ロックを返せなかったプロセスも考慮されていませんでした。
ロックに有効期限を設定できるようにする必要があります (つまり、ロックをチェックアウトしたプロセスが 2 時間以内にロックを返さない場合、ロックは自動的にプールに返されます)。これにより、ロックを無視するという問題が発生することは認識していますが、2 時間以内に完了しない場合、プロセスが終了したことはほぼ確実です。また、ジョブはべき等であるため、複数回実行されても大したことではありません。
私は多くの分散ロック システムを調べ、非常に役立つこの質問に出くわしました。すべてのソリューションはJavaのjava.util.concurrency.locks.Lock
. MongoDB のfindAndModifyを使用するmongo-java-distributed-lockと同様の戦略があります。検討中:
私たちの分散ロックメカニズムとして (すべてがたまたま実装されていますjava.util.concurrency.locks.Lock
)。
最大の問題はjava.util.concurrency.locks.Lock
、ロックを期限切れにするオプションがないため、これらがすべての目標に適合しないことです。この答えはおそらくhazelcastに最も近いものですが、スレッドに時間がかかりすぎるだけでなく、サーバー全体の障害に依存しています。別のオプションは、ここで説明されているように、hazelcast を使用した Samaphore を使用することです。時間がかかりすぎる場合に他のロックをキャンセルできる死神スレッドを作成できます。Mongo と Redis を使用すると、オブジェクトを期限切れにする機能を利用できますが、最終的に実装するだけなので、どちらのライブラリにも含まれていないようですjava.util.concurrency.locks.Lock
。
つまり、これは長ったらしい質問方法でした。N 秒後に自動的に有効期限が切れる分散ロック メカニズムはありますか? java.util.concurrency.locks.Lock
この状況とは別のメカニズムを検討する必要がありますか?