分散トランザクションの経験をお寄せください。どのようなフレームワーク(java)を使用することをお勧めしますか?分散トランザクションのベストプラクティス(java)
答えて
プラクティスをお勧めしますナラヤナプロジェクトにQAとして働いとしては、これまでの理論の背後にあります。分散トランザクション(2PC)へのアプローチのうちの1つだけが、さまざまなライブラリとフレームワークを選択できます。他のものは自分で実装する必要があります。残念なことに2PCは最先端のアルゴリズムでもありませんので、パーティションの許容範囲とパフォーマンスを犠牲にして、開発の利便性とスピードを上げてください。
分散トランザクションの領域で他の主要なアルゴリズムを見てみましょう。それらのすべてを使用すると、複数のデータソースにまたがるトランザクションを実行できます。
2フェーズアルゴリズム(2PC)
2PCが最も発達したアルゴリズムであるコミット。 X/Open XA標準の中心は、汎用の2PCベースの分散トランザクション処理をモデル化し、クライアント、コーディネーター、およびリソース間の相互作用を形式化します。 XAは、ベンダーがソリューションを他のすべてのソリューションと統合するのではなく、標準に準拠して、自由に統合できるようにします。 JTAは、X/Open XAモデルに対するJavaインターフェイスです。
2PCのいくつかの問題は、コーディネータが単一障害点であるという事実から生じます。ネットワークパーティションが存在し、コーディネーターがクライアントおよびリソース以外のパーティションに存在する場合、システムは使用不可能になり、システムも使用できなくなります。
アルゴリズムのもう1つの問題は、ブロックする性質です。リソースが合意メッセージをコーディネータに送信すると、コミットまたはロールバックが受信されるまでブロックされます。その結果、システムは使用するハードウェアの可能性をすべて利用することができません。
パーコレーターの取引
パーコレーターの取引は、シリアライズ楽観的トランザクションを分散されています。それらはGoogleによってLarge-scale Incremental Processing Using Distributed Transactions and Notifications論文に紹介され、後にAmazonのTransaction Library for DynamoDBとCockroachDBデータベースに実装されました。 2PCパーコレーターの取引とは異なり
:ネットワーク分割し、トランザクションを実行するクライアントが存在するとき、彼らは仕事とトランザクションの影響を受けたリソースが同じパーティションであることが起こるので
- がコーディネーターを必要としません彼らは、非ブロッキングと優れたクラスタ
それはパーコレーターの取引は、クライアント側で実装することができることを非常に便利ですのハードウェアを利用しているので、ロックフリーのアルゴリズムに似
Visualization of the Percolator's transactionをご覧になると、その動作を理解できます。
RAMP取引
RAMPのトランザクションがコミット分離レベル分散トランザクションを読んでいます。それらはPeter BailisによってScalable Atomic Visibility with RAMP Transactions論文に紹介されました。彼らはかなり新しいので、データベースにはまだ入っていませんが、Cassandraがサポートするかもしれないrumorsがあります。また、彼らは、複製やクロスシャードの取引のためのCRDT & RAMPのためのPaxosを使用していますアポロデータベース上で作業しているFacebookのreported。
だけでなく2PC、RAMPの取引は、コーディネーターのようなサーバを必要としますが何の可用性への影響がないように、それらとは異なり、このようなサーバの数に制限はありません。 RAMPは、非ブロックアプローチを使用し、リラックスした分離レベルは、それが競合の問題を回避し、詳細については、ペーパーを参照してください信じられないほどのパフォーマンスを達成するのに役立つだけでパーコレーターの取引のように
。不可分操作と比較-とセットの操作:
RAMPも同じパーコレーターの取引などのストレージへの要件があります。
あなたは、彼らがどのように機能するかを理解するためにVisualization of the RAMP transactionに見てみることができます。
- 1. 分散開発のSVN - ベストプラクティス?
- 2. トランザクションを含む分散ストア
- 3. JMeterでのトランザクションの負荷分散
- 4. MSSQL 2000とMySQLの間の分散トランザクション
- 5. Reallifeの分散ストリーミングアプリケーション(グラフとトランザクション)
- 6. EhCacheの分散退去の推奨ベストプラクティス?
- 7. Java共分散
- 8. Java分散キャッシュ
- 9. 分散トランザクションは、同じ接続
- 10. SSIS Oracleおよび分散トランザクション
- 11. ロードバランシングを伴うWCF分散トランザクション
- 12. TSQL - 分散トランザクションまたはローカルトランザクション?
- 13. MySQLはsql-serverの**分散トランザクションの開始**のような分散トランザクション(ボックス外)が可能ですか?
- 14. トランザクションのベストプラクティス
- 15. ジェネリックタイプのJavaタイプ分散、
- 16. クライアントコールバックメソッドの分散Javaベストメソッド
- 17. Docker swarmの分散Javaアプリケーション
- 18. JTAを使用した分散(グローバル)トランザクションにおける分離
- 19. Java EE 6分散トランザクション - Glassfish v3.0.1でJTS5031例外を取得する
- 20. Java:非分散イベント処理
- 21. 汎用分散スケジューリングライブラリ(Java用)
- 22. Entity Framework ObjectContextsの1つの分散トランザクションを中断する
- 23. NHibernateとの分散トランザクションに参加できません
- 24. .NETの分散トランザクションでMQQueueMangerを再利用する
- 25. WCF net.tcpバインディングを介した分散トランザクションのタイムアウト問題
- 26. プロードレベルのJavaアプリケーションの分散キャッシュのHazelcast
- 27. javaの画像ヒストグラムの分散
- 28. 分散キャッシュ製品内で複数の分散マップ上で動作するトランザクションを伝える方法
- 29. 小規模のJava分散プログラミング
- 30. SpringデータJPA - Java 8ストリームのサポートとトランザクションのベストプラクティス
私は、フィールド上の経験を持っていないが、私はあなたには、いくつかの要件を与えることを示唆しています。意見に基づく質問はここでは大歓迎ではなく、通常は閉鎖されます。 – UDKOX
特定の質問もお勧めします。 Javaでトランザクションを実行する方法を記述した書籍があります。たとえば、Springを使用すると、プログラムでトランザクションを作成しようとする場合と大きく異なる場合があります – borjab