我经营一家在线商店,流量非常大。最近,由于支付网关出现某种问题,整个系统在一次大型促销活动中陷入停顿,他们的 API 响应需要 17 秒才能响应,而不是正常的 2-3 秒。有数百人同时尝试购买。这导致生产集群中每个 Web 服务器中的所有 Web 工作线程都被占用,等待来自支付网关的 API 响应。整个生产集群被锁定,无法提供任何页面。
解决此问题的一种方法是使用 Resque 在后台处理付款。Web 服务器将立即向用户返回一个响应,该响应会说“您的付款正在处理中......” Web 服务器将能够继续进行下一个 Web 请求。
处理完付款后,问题是继续结帐。我无法使用 AJAX 轮询事务是否已完成,因为许多客户没有 JavaScript。我不能依赖它。我不想使用 JavaScript 或任何类型的可靠性低的服务器推送技术,因为如果一定比例的结帐在“处理...”页面上停滞不前,它会产生昂贵的客户支持问题。
我如何设计页面流以便可以在后台可靠地处理事务?