我经营着一家在线商店,经历了非常繁忙的流量。最近,整个系统在一次大型销售活动中陷入停顿,因为支付网关出现了某种问题,他们的API响应需要17秒,而不是正常的2-3秒。有数以百计的人同时尝试购买。这导致生产集群中每个web服务器中的所有web工作线程都被占用,等待来自支付网关的API响应。整个生产集群被锁定,无法为任何页面提供服务。
这个问题的一个解决方案是使用Resque在后台处理付款。web服务器会立即向用户返回一个响应,例如,“您的付款正在处理中……”web服务器将能够继续处理下一个web请求。
问题是,一旦付款被处理,结账就会继续进行。我不能使用AJAX来轮询事务是否已经完成,因为很多客户都没有JavaScript。我不能相信它。我不想使用JavaScript或任何一种可靠性较低的服务器推送技术,因为如果一定百分比的结帐在“处理……”上变得停滞,将会产生昂贵的客户支持问题。页面。
我如何设计页面流,以便事务可以在后台可靠地处理?
发布于 2012-05-14 11:49:32
查看基于事件的解决方案(例如EventMachine),并让它处理这些请求。在这种情况下,标准的RoR服务器将全部崩溃。使用javascript进行某种形式的后端处理绝对是解决这个问题的最简单的方法,但如果这不是一个选择,我会尝试将该流程转移到一些更好的设计中,以便处理像APIs永远不响应这样的事情。
发布于 2012-05-15 02:24:56
你试过Gearman了吗?
发布于 2012-05-15 14:20:01
我知道你说过你不能依赖于启用了Javascript的客户端,但是我不相信没有客户端脚本的情况下尝试和实现这一点是优雅的。
例如,你可以强迫你的用户不断点击刷新按钮来生成一个超文本传输协议请求,从服务器上拉回支付交易的状态(“正在处理”,“成功”或“失败”),直到它完成,但它很笨拙。
所有这些方法都应该消除您对支付服务器处理交易所需时间的担忧。如果您的服务器端有问题,那么需要解决的问题就不同了。
https://stackoverflow.com/questions/10577233
复制相似问题