java - 怎么理解在生成订单的时候幂等性的控制
天蓬老师
天蓬老师 2017-04-18 09:25:43
0
8
1119

经常听人说在交易系统中,生成订单的时候要控制好两个:一个是幂等性的控制,一个是并发性的控制。
我的理解是这样的,并发性的控制,可以从数据库层面上,利用锁表中行的操作,分布式锁的方式来实现并发性,那么幂等性呢?查了一些资料对于幂等性这个概念的理解,还是越看越模糊,有没有什么通俗的对于幂等性的解释呢?此外怎么在生成订单的系统中做好幂等性的控制呢?
所以我的问题是:
1、怎么通俗的理解幂等性 ?
2、如何在项目中做到幂等性的控制,防止订单碎片的产生??

谢谢~~

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(8)
左手右手慢动作

ありがとうございます~実際、あなたの理解は間違っています~この情報をどこで見たのかわかりません...
実際には...同時実行の問題を解決することは...単純なデータベースロックではありません...それは、一連のキャッシュ、流用、フィルタリングなどを通じて実現されます。 ~
そして、冪等性は、同じ操作では 1 人のユーザーのみが有効になることが合意されています。ユーザーが乱暴に注文した場合、実際に有効になるのは 1 つだけです...解決策は非常に簡単です ~ 2 つのレイヤーに分かれています...フロントエンドのコントロール ポイントは再度クリックできません...バックエンドは一意に識別しますリクエスト ~ そしてそれをキャッシュに保存します ~ その後実際に有効になるのは 1 つだけです ~

ここ数回の質問は、教科書で取り上げられている内容とはかけ離れているように感じます。たとえば、フラッシュ セールに関するいくつかの記事に注目することをお勧めします。淘宝網によって書かれた原則、Alibaba Cloud が最近公開した、高同時実行下でのレッドエンベロープシステムのアーキテクチャと実際の運用でまとめられたその他の実用的な情報~

いいねを押す +0
Ty80

冪等性は、システムのインターフェースによって外部世界に対して行われる約束であり、インターフェースが正常に呼び出される限り、宣言されたインターフェースに複数の外部呼び出しが同じ影響を与えることを約束します。べき等であるため、外部呼び出しの失敗は正常であると見なされ、失敗後には必ず再試行が行われます。

あなたが言及した注文の断片化の防止に関して私が知っているのは、Alipay のような同時実行性の高い環境でトランザクションが何を使用しているのかがわからないということだけです。

いいねを押す +0
左手右手慢动作

トークンを使用すると、CSRF を防ぐだけでなく、UI レベルでのリプレイも防ぐことができます。

いいねを押す +0
Ty80

冪等性を理解するための簡単な例

リーリー

注文の印刷には冪等性が必要であることを理解しています。これは、同じ注文を何度印刷しても、他の注文の印刷には影響しない状態です。これは制御が簡単です。注文を印刷するときに、データベース側で断片化が発生しないように、データをアプリケーション側にフェッチして処理しないでください。

いいねを押す +0
洪涛

平等とは、複数の呼び出しが発生した場合でも、ビジネス システムに影響を与えないことを指します。
分散システムでは、ステータスが不明瞭な場合に、データベース自体がトランザクション制御を完了できないため、一部のメッセージ キューと非同期呼び出しがリモート呼び出しに使用されるため、この要件は非常に重要です。サービスに同等性が保証されていない場合、再試行メカニズムは使用できません。

注文を作成するシナリオは公平ではありません。複数回呼び出されると、複数の注文が表示されます。通常の解決策は、注文を作成する前に、渡された情報に基づいてクエリを実行し、注文が実行された場合は、成功した呼び出し情報を直接返し、注文の重複を防ぎます。

いいねを押す +0
洪涛

インポテンスは、HTTP の GET リクエストとして理解できます (同じ Web サイトにアクセスするとコンテンツが異なる場合があるとは言わないでください)。POST リクエストは非冪等です。したがって、ほとんどの場合、GET を使用するのが適切です。 POST は本体データを隠すから安全だと考えないでください。

いいねを押す +0
迷茫

インポテンスは、分散システムでタイムアウトなどのネットワーク理由が発生した場合に、クライアントがサーバーの実行が成功したか失敗したかを認識できないという問題を解決します。現時点では、クライアントは再試行する必要があります。インターフェイスが冪等でない場合。予期せぬ異なる結果が生じる可能性があります。

簡単に言うと、インターフェイスが冪等である場合、それを 1 回呼び出しても複数回呼び出しても、結果は同じになります。たとえば

UPDATE テーブル SET NAME="LILEI" WHERE UID='1'

いいねを押す +0
巴扎黑

リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート