私は Google App Engine で小さなプロジェクトに取り組んでおり、システムがリアルタイムの BID/ASK スプレッドを表示する株式市場と同様に、参加者が偽物を売買できるサイトを実装しようとしています。
簡単な例として:
- 売り手が 10 ボックスを 8.00 で販売する注文を出します (注文 1)
- 買い手はその後、最大 9.00 で 5 ボックスを購入する注文を出します (注文 2)。
2 番目の注文が行われると、システムは複数のタスクを実行する必要があり、すべてのタスクが正常に完了することが条件となります。
- 購入者から箱の代金を支払う資金 (8.00 x 5) を受け取って、販売者に渡します。
- 箱(5)を売り手から受け取り、買い手に渡す
- 注文を完了として更新 (OID 2 ) または一部約定 (OID 1) として更新して、二重に一致しないようにします。
- 各参加者から料金を受け取り、システム アカウントに追加します
ある参加者から別の参加者に資金を移動するだけなら、途中でシステムに障害が発生しても安全に移動できます。しかし、上記のすべてのタスクが正しく完了することを確認し、それらのいずれかが失敗した場合にロールバックすることは、App Engine では非常に複雑に思えます。
さらに、私の「オーダー ブック」とオーダー マッチング エンジンは現在シングル スレッドです (ロックにミューテックスを使用しています)。
だから(最後に) - 私の質問は:
- すべてのステップが正しく完了することに依存する複数のステップがある App Engine を使用する場合のベスト プラクティスはありますか?
- オーダーブックをマルチスレッド化する方法、またはシングルスレッドのままにする方法について、誰か提案はありますか?このコアピースがサイトのスケーリングにブロックされないようにするためのベストプラクティスはありますか? タスクを使用して注文の追加/更新/キャンセルをキューに入れ、本を直接の参加者の入力から切り離すことを考えました。
ありがとう、私はあなたの助けを楽しみにしています!