私は非常に急なトラフィックを経験するオンラインストアを運営しています。最近、ペイメントゲートウェイに何らかの問題が発生したため、大規模なセールイベント中にシステム全体が停止し、APIからの応答に通常の2〜3秒ではなく17秒かかりました。何百人もの人々が同時に購入を試みました。これにより、本番クラスター内のすべてのWebサーバーのすべてのWebワーカースレッドが、支払いゲートウェイからのAPI応答を待機することになりました。本番クラスター全体がロックされ、どのページも提供できませんでした。
この問題の1つの解決策は、Resqueを使用してバックグラウンドで支払いを処理することです。Webサーバーは、「支払いは処理中です...」などの応答をユーザーにすぐに返します。Webサーバーは、次のWeb要求に進むことができます。
問題は、支払いが処理された後もチェックアウトを続行することです。多くの顧客がJavaScriptを持っていないため、AJAXを使用してトランザクションが完了したかどうかをポーリングすることはできません。私はそれに頼ることができません。「処理中...」ページでチェックアウトの割合が停止すると、高価なカスタマーサポートの問題が発生するため、JavaScriptや信頼性の低いサーバープッシュテクノロジーは使用したくありません。
トランザクションをバックグラウンドで確実に処理できるように、ページフローをどのように設計できますか?