問題タブ [2phase-commit]
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.
java - XA をネイティブにサポートしていないデータベースで XA を使用していますか?
XA をネイティブにサポートしていないデータベースに XA サポートを追加するオープンソースの Java ライブラリはありますか? つまり、非 XA JDBC データソースをラップし、2 フェーズ コミットの背後で必要なコミット/ロールバックを処理しますか?
transactions - 2 フェーズ コミット - キューを効果的に使用するには?
私が説明しようとしているのは、基本的に 2 つの異なるシステム間の 2 フェーズ コミットの問題であり、その処理方法についてアドバイスを求めています。私たちの Web アプリケーションでは、電子メールの送信など、一部の高価な/サードパーティの操作を帯域外のバックグラウンド ワーカー プロセス (ジョブ インフラストラクチャと呼んでいます) にオフロードします。
たとえば、電子メールを送信するには、データベースに電子メール オブジェクトと電子メール ジョブの両方を作成します。次に、ジョブ モニターがメール ジョブを取得して送信するのを待つ必要があります。ジョブ モニターは基本的に、データベースがアイドル状態のときに数秒ごとにデータベースをポーリングすることによって機能します。
ただし、これにより電子メールの送信に遅延が追加され、ポーリングによるデータベースへの過度の負荷と見なされるものが追加されます。電子メールが作成されたらすぐに電子メール ジョブをキューに入れることができれば、さらに便利です。
ただし、これは現在 2 つの理由で失敗しています。まず、キューは多くの場合、Web 要求よりもはるかに高速です。Web 要求がデータベース トランザクションをコミットする前に電子メールが処理のために取得されるため、電子メールを適切に生成できません。次に、Web 要求が失敗すると、データベース トランザクションがロールバックされます。これは、電子メールが送信されないことを意味します。ただし、すでにキューに入れられている場合は、リクエストの制御下にはありません。
キューとデータベースの間で 2 フェーズ コミットを作成するための適切な戦略はありますか? 参考までに、InnoDB テーブルで RabbitMQ と MySQL を使用しています。私が頭に浮かんだアイデアの 1 つは、データベース トランザクションがコミットされた後に電子メール ジョブをキューに保持することでしたが、それでは電子メールがキューに入れられない可能性が残ります。送信されるべきで送信されなかった電子メールを監視するポーリング プロセスを作成する必要があります。
php - 2フェーズコミット-実装を探しています
2フェーズコミットプロトコルの実装を探していますが、分散トランザクションは初めてです:) 2フェーズコミットは、phpアプリケーションとリモートの「アプリケーション」(システム)の間に実装する必要があります。
2フェーズコミットを最初から実装する必要がありますか?私に有利なスタートを切ることができる言語で実装されたモジュールを知っていますか?
-これまでこれについて多くを見つけることができませんでした:)
助けてくれてありがとう。
jakarta-ee - 複数の REST 呼び出しが分散トランザクションに参加できますか?
これがシナリオです。ちなみに、Java中心の回答を探しています。
- クライアント コードは、プロバイダー アプリケーション #1 から REST サービス A (POST) を呼び出します。
- クライアント コードは、JDBC を使用して内部データベースを直接更新します。
- クライアント コードは、プロバイダー アプリケーション #2 から REST サービス B (POST) を呼び出します。
- ステップ 1 から 3 は、2 フェーズ コミットをサポートする分散トランザクションで実行する必要があります。つまり、ステップ 2 のデータベースの更新が失敗した場合、ステップ 1 の POST を元に戻す必要があります。ステップ 3 の POST が失敗した場合、ステップ 1 の POST とステップ 2 のデータベース更新を元に戻したいと考えています。
独自の補正コードを記述せずに (ステップ 1 と 2 を元に戻すため)、JTA を使用してこれを達成する方法はありますか?
jakarta-ee - XAException : XA 例外が原因で 2 フェーズ コミットのロールバックが失敗しました
2 フェーズ コミットの一見単純な実装に問題が発生しています。私のセットアップは、Websphere 6.1 でホストされるアプリケーションである DB2 サーバー上の 2 つのデータベースです。アトミコスが取り扱う取引管理。jndi を介したデータベース接続。UserTransaction を開始し、DB1 で更新を実行し、DB2 への更新中に DB への接続を失い、ロールバックを呼び出すStaleConnectionExceptionを取得します。理想的には、TM はトランザクションのロールバックを実行する必要があります。ただし、次のように XAException が発生します。
この後、更新を行った DB1 テーブルは LOCKED になります。私は今まで次のことを試しましたが、まだロールバックを実行できません:
- クエリはコミットされていない読み取り ('ur') を使用しています
- 接続の自動コミットは false に設定され、IsolationLevel は *TRANSACTION_READ_UNCOMMITTED* に設定されます
- Datasource と Transaction Service のさまざまなタイムアウト値を増やしました。
- 接続プールの最小接続数を 0 に設定、パージ ポリシー: EntirePool
- StaleConnectionExceptionがキャッチされ、キャッチ ブロックから UserTransaction.rollback() が呼び出されます。
2 フェーズ コミットと XAtransactions を使用して DB クラッシュから回復するにはどうすればよいですか? これに対して何をすべきかについての指針はありますか?
java - データベース障害をシミュレートして Java で 2 フェーズ コミットをテストする方法
分散リソースを含む 2 フェーズ コミットを実装しています。参加しているデータベースの障害をシミュレートするにはどうすればよいですか? テーブルのデッドロックが発生するため、ネットワーク ケーブルを引き抜くことはできません。StaleConnectionException
現在、アプリケーション コードでフックを使用しており、クエリの実行前、クエリの実行後など、さまざまな時点でスローされます。このアプローチに関する私の懸念は次のとおりです。
- DB 障害をシミュレートするより良い方法はありますか?
- DB接続がうまくいかない場合、接続オブジェクトはどうなりますか? その値を保持しますか、それとも null になりますか?
- アプリケーションが DB に再接続しようとすると、実際には何が起こるでしょうか?接続オブジェクトはどのような値を取得しますか?接続プールの既存の値を使用しますか?
また、クエリの実行中、コミット中(準備が送信された後など)のような中間点でテストしたいと思います。今、私はアプリケーションをデバッグ モードにし、関数呼び出しにステップ インして、その間にプラグをプルします。ただし、このアプローチは手動であり、大規模なテストには適していません。
これを行うのに役立つシミュレーター/エミュレーターまたはツールはありますか?
spring - Atomikosを使用した2フェーズコミット(2PC)構成
2フェーズコミット(2PC)をテストするためのサンプルアプリケーションを作成しています。ここで使用されているコードビットをインターネットから取得しました。私はバックエンドとしてMySQLでSpring、Hibernate、Atomikosを使用しています。2つのデータベースを使用していますが、意図的に2番目のデータベースを呼び出すと、最初のデータベース呼び出しがロールバックされるかどうかを確認できません。残念ながら、うまくいかないようです。サンプルコードを含むリンクを教えてもらえますか?
以下は私の構成です:
Hibernateセッションファクトリ:
dataSource構成:
Spring JTA構成:
上記で定義した2つのsessionFactoriesを挿入する2つのDAOImplがあります。以下は、Javaコードからの呼び出しです。
どんなポインタも大いに役立ちます。
ありがとう
database - 2フェーズコミットは最終的なコミットの失敗から保護しますか?
2フェーズコミットで実装された分散トランザクションに関係するすべてのデータベースが、コミットの準備ができており、必要なロックを持っていることを示しているとします。コーディネーターはコミットするように信号を送り、すべてのデータベースがトランザクションの一部を実行しますが、プログラミングの監視がその可能性を考慮しなかった結果、1つのSQLデータベースでゼロ除算エラーが発生します。コーディネーターはすでに全員にコミットを通知しているので、ゼロ除算の結果として何が起こるでしょうか?
couchdb - グラフデータベースとドキュメントデータベースの両方を使用する
ドキュメント データベース (CouchDB など) とグラフ データベース (Neo4j など) の両方にエンティティを格納するセットアップを検討しています。理論的根拠は、各エンティティ情報 (データ、ブロブ、値、複雑な内部構造) をドキュメント データベースに格納し、エンティティ関係 (親、子、関連エンティティ) をグラフ データベースに格納することです。
誰かがこのような設定をした/見た/噛まれたことがありますか? どのような問題が予想されますか? 最初に気になったのは、2 フェーズ コミットです。しかし、ここでもバックアップに問題があります。
ejb-3.0 - weblogic ejb3 2 フェーズ コミット
ejb3 チュートリアルを使用した weblogic の優れた 2 フェーズ コミットを誰か教えてもらえますか?
周りを見回して見つけたのは1 つだけですが、XA を使用していません。