2017-04-21 12 views
0

複数のRedisデータベースにわたって分散トランザクションを設計しようとしています。これを達成するためにLuaスクリプトを使用することは可能ですか?データの損失を引き起こす可能性があるため、2フェーズコミットで実装する必要はありません。データを失うことはできません。Luaスクリプトを使用したRedis Distributed Transaction

シナリオ例:私は3つのRedis DBを持っています。 3つすべてを更新する必要があります。更新は順次でもかまいませんが、3つがすべて成功した場合にのみトランザクションを成功させたいと考えています。いずれかが失敗した場合は、それらのすべてをロールバックする必要があります。

答えて

0

いいえ、Redisがネットワークコール用のライブラリを公開していないため、Luaスクリプトのみに依存するRedisインスタンス間で分散トランザクションを実装することは不可能です。しかし、分散トランザクションを構築するソリューションの一部としてLuaスクリプトを使用することができます(私はLuaスクリプトを使用してRedisサーバーの上にPaxosを実装しました)。

ところで、あなたの質問では、データの損失を引き起こす2フェーズコミットに関する誤解があります。それは起こり得ない。 2PCの教科書実装は、システムがブロックされてもデータ損失を招かない状況につながる可能性があります。 GoogleのPercolator紙のような2PCの非ブロック版があるため、ブロックすることも問題ではありません。

私はa visualization of non-blocking 2PCを作成しました。その可動部分を理解するのに役立ちます。

関連する問題