2011-09-09 11 views
0

これはJavaベースのバックエンドシステムです。まず、既存のシステムについて説明しましょう。逐次処理を実現する方法

キューから注文を消費する注文プロセッサーシステムがあります。注文が到着すると、item_idに基づいてアイテム行のロックを最初に取得する支払いシステムが呼び出されます。 キューに1000件の注文がある場合、注文プロセッサはそれらを消費し、支払い処理担当者を呼び出し続けます。

注文プロセッサーと支払いプロセッサーは、Webサービス経由で通信する独立したシステムであることに注意してください。

支払処理担当者が同じ明細に対して複数の注文を行った場合、処理が失敗してLockAcquisitionエラーが発生し、注文処理業者にも伝播し、後で失敗した注文を支払処理担当者に再送します。 24時間から48時間以内に注文を再試行することができます。

このロジックを改善する必要があります。私は、同じitem id(ロックが解放されたときにpaymentProcessorを呼び出す)を持つ注文に対して、この処理がどのように順次行われるかを調べなければなりません。

注文プロセッサが1000個のアイテムを処理していて、複数のスレッドが処理を実行している可能性があります。私はこれらの注文のそれぞれの商品IDを知っています。私は最近、バックエンドの開発に移りました。私は専門家の洞察を必要と思って、可能な限り最良の方法でそれを行う方法を知りました。どんなポインタも非常に高く評価されます。

ありがとうございます!

答えて

1

アーキテクチャを完全に理解していないと良いアドバイスをするのは難しいです。効率を犠牲にして問題を解決する1つの戦略は、特定のディスパッチ戦略(例えば、ディスパッチ戦略)に基づいて注文を特定のスレッドにディスパッチすることである。スレッドが10個ある場合は、100を法とする注文ID(または注文IDのハッシュ)を取り、そのスレッド番号に発送することができます。

あなたのスレッドは、配布が完全に均等になるわけではないが、問題が解決されるため、いくらか活用されていないことがわかります。

あなたがそのルートに行く場合は、処理スレッドの作成/終了/クラッシュを適切に処理するように注意してください。

関連する問題