問題タブ [distributed-transactions]
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.
ruby - 分散トランザクションとキュー、ruby、erlang、scala
複数のマシン、メッセージ キュー、およびトランザクションに関連する問題があります。たとえば、ユーザーが Web ページをクリックすると、クリックによって別のマシンにメッセージが送信され、ユーザーのアカウントに支払いが追加されます。1 秒あたり数千回のクリックが発生する場合があります。トランザクションのすべての側面がフォールト トレラントである必要があります。
私はこれまでこのようなことに対処する必要はありませんでしたが、少し読んだところ、これはよく知られている問題であることがわかりました。
だから私の質問に。これを行う安全な方法は 2 フェーズ コミットであると想定するのは正しいですが、プロトコルがブロックされているため、必要なパフォーマンスが得られませんか? 私は普段 Ruby を書いていますが、redis のような DB や、Rescue、RabbitMQ などのメッセージ キューイング システムは、あまり役に立たないようです。何らかの 2 フェーズ コミットを実装したとしても、redis がクラッシュするとデータが失われます。基本的にメモリのみです。
これらすべてが私を erlang と scala に目を向けさせました - しかし、新しい言語を学び始める前に、これが努力する価値があるかどうかをよりよく理解したいと思っています. 具体的には、これらの言語は並列処理機能があるため、2 フェーズ コミットのようなブロッキング プロトコルを実装するためのより良い選択であると考えるのは正しいですか、それとも混乱していますか? はいの場合、どちらか一方を選択する理由はありますか (具体的には、このコンテキストで - 2 つをより一般的に比較するスレッドやブログがたくさんあることを知っています)。
相互投稿のお詫び - これは最初に stack-exchange に投稿されましたが、質問に追加しました。このバージョンはおそらくここに適しています
service - Web サービスを含む分散トランザクション
Web サービスで分散トランザクションを行う一般的な方法は何ですか? ある種のグローバル トランザクション内で他の 2 つの Web サービスと通信するアプリケーション/サービスがあるとします。このシナリオで 2 フェーズ コミットがどのように機能するかはよくわかりません。
java - HTTP ポスト リクエスト/レスポンスに基づくリモート アカウント システムでトランザクション管理を行うのは誰ですか?
独自のデータベースを使用し、XML に基づく http ポスト要求/応答を介してリモート アカウンティング システムとも連携するアプリケーションがあります。デビットとクレジットの http ポスト リクエストを投稿できます。
一部のユーザーがゲームをプレイするとき、私は彼にいくらかの賭け金をクレジットしなければならず、彼が勝った場合、私は勝利額を引き落とさなければなりません. http プロトコルなので、いくつかのタイムアウト再試行機能を実装しましたが、http 要求が正常で応答があった場合の処理方法を尋ねたいのですが、その後、私の側で何かが失敗しましたか? これは分散トランザクションのケースに似ていますが、同じではありません :(...
より明確にするためのいくつかの擬似コード:
このコードの問題は次のとおりです。1) 最初に persistOutcome(..) が失敗し、catch 句で cancelStake が呼び出された場合、キャンセル リクエストの送信に失敗する可能性があります (再試行アルゴリズムがあっても)。2) 2 番目のキャッチ ブロックについても同様です。
そのような場合のベストプラクティスを提案してください。
ehcache - JTAを使用して動作する分散Ehcache
Terracotta Ehcache (オープン ソース)を使用して、分散トランザクション メモリのベンチマークを実行しようとしています。JTAでの動作を理解するのに問題があります。コードでは、分散トランザクションに関心のあるキャッシュが、JTA を使用して後で 2 フェーズ コミットを実行するリソースとして参加することがわかりました。
私の質問は、1 つのキャッシュのみがリソースとして登録されている場合、JTA が分散設定で他のすべてのキャッシュをアトミックに更新するにはどうすればよいですか? 他のキャッシュ参照を JTA に渡さないため、アトミックな更新は行われません。ここにいくつかの文字列が欠けているように感じます。誰かがそれがどのように機能するか説明できますか? 私も J2EE を初めて使用します。JTA への他のキャッシュの自動参照渡しを可能にする J2EE の概念が欠けていますか?
wcf - 複数のサーバーと 1 つのデータベースでの WCF 分散トランザクション
WCF でいくつかのサービスを実行している 2 つのサーバーがあります。すべてのサービスは共有データベースで動作します。すべてのサービスは、許可されたトランザクション フローで transport net.tcp を使用します
TransactionScope の使用を開始した後に問題が発生しました。最初の方法でユーザーが正常に作成され、2 番目の方法でプロファイルが正常に取得されました
しかし、3 番目の方法はエラー user not found in database で失敗します
しかし、そのようなシナリオ:
正常に動作しますが、私の仕事には適していません。
サーバー A で作成されたローカル トランザクションがサーバー B で表示されないという問題が見られます。誰かがこの問題を解決する方法を知っています。
java - j2eeで長時間実行分散トランザクションを実装する方法
あるデータベースから別のマシンにある別のデータベースにレコードを移動したいと考えています。レコードは最初のデータベースから削除し、2 番目のデータベースにアトミックに挿入する必要があります。
xa を使用できますか? xa は、リソースのブロック ロックを必要とする 2 フェーズ コミット アルゴリズムを使用していると思います
ターゲット データベースは EIS データベースであるため、最小限の時間ロックする必要があります。
mysql - XA/JTA トランザクションはまだ使用されていますか?
複数のデータベースといくつかのカスタム サービスをやり取りするアプリケーションがあります。一部の操作では、一連の変更がすべてのデータベース/サービスにわたってコミットされるか、エラーが発生した場合はすべてロールバックされる、トランザクションのような動作が必要です。
X/Open グループの XA 標準と Java JTA は、2 フェーズ コミット プロセスを使用してこの問題を正確に解決しているようです。一部のデータベース (mySQL、Postgres、Oracle) はこれらのインターフェースをサポートしていますが、あまり使用されていないか、人気が低下しているように感じます。本当?もしそうなら、なぜですか?
mySQL 上の XA にレプリケーション関連の問題がいくつかあったことは知っています。また、XA トランザクションは大幅に遅くなる可能性があります。XA が不人気/珍しい理由は他にありますか?
windows-server-2008 - 2 台のマシン間で MSDTC をテストする
2 つのマシン名を指定して、それらがトランザクションをやり取りするように適切に構成されているかどうかを判断できるユーティリティはありますか?
(これが別の Stack Exchange サイトのより良い質問である場合は、提案してください)
sql-server - NHibernate および分散トランザクションで「サーバーがトランザクションを再開できませんでした」を引き起こすデッドロック
NHibernate を分散トランザクションで使用すると問題が発生します。
次のスニペットを検討してください。
サーバーに極度の負荷がかかると、次のように表示されることがあります。
- cmd.ExecuteNonQueryで実行されたクエリはデッドロックの対象として選択されますが (SQL プロファイラーで確認できます)、例外は発生しません。
- session.Saveが失敗し、「The operation is not valid for the state of transaction.」というエラー メッセージが表示されます。
- その後、このコードが実行されるたびに、session.BeginTransactionが失敗します。最初の数回は、内部例外が異なります (手順 1 で発生するはずだったのがデッドロック例外である場合もあります)。最終的には「サーバーはトランザクションの再開に失敗しました。Desc:3800000177」に安定します。または「有効なトランザクション記述子が必要なため、新しい要求を開始できません。」
そのままにしておくと、アプリケーションは最終的に (数秒または数分後に) この状態から回復します。
ステップ 1 でデッドロック例外が報告されないのはなぜですか? それを解決できない場合、アプリケーションが一時的に使用できなくなるのをどのように防ぐことができるでしょうか?
以下の環境で問題が再現されました
- Windows 7 x64 および Windows Server 2003 x86
- SQL Server 2005 および 2008
- .NET 4.0 および 3.5
- NHibernate 3.2、3.1、および 2.1.2
問題を再現するテスト フィクスチャを作成しました。ここから入手できます: http://wikiupload.com/EWJIGAECG9SQDMZ
nhibernate - NHibernate の AdoNetTransactionFactory を分散トランザクションで使用できますか?
WCF サービスの NHibernate と分散トランザクションに関連する奇妙な問題に取り組んでいます。詳細については、NHibernate および分散トランザクションで「サーバーがトランザクションを再開できませんでした」を引き起こすデッドロックを参照してください。
私の問題を解決すると思われることの 1 つは、AdoNetWithDistributedTransactionsFactory の代わりに NHibernate の AdoNetTransactionFactory を使用することです。
AdoNetWithDistributedTransactionsFactory は、NHibernate の第 2 レベルのキャッシュ メカニズムを正しく機能させることに関与していると思いますが、私たちはそれを使用していません。分散トランザクションで AdoNetTransactionFactory を使用する場合、他にどのような問題がありますか?
御時間ありがとうございます!