专栏名称: 凤凰牌老熊
互联网金融,软件架构,资深Java工程师
目录
相关文章推荐
芋道源码  ·  代码更新不停机:SpringBoot应用实现 ... ·  17 小时前  
ImportNew  ·  1 个空指针,捅破谷歌云的天…… ·  昨天  
芋道源码  ·  务必立即拿下软考证(政策红利) ·  昨天  
ImportNew  ·  苹果抛弃 Java!转用 Swift ... ·  2 天前  
程序员晓梦  ·  卧槽!又是一个Java神器! ·  2 天前  
程序员晓梦  ·  卧槽!又是一个Java神器! ·  2 天前  
51好读  ›  专栏  ›  凤凰牌老熊

20170615-高并发支付场景分析及设计

凤凰牌老熊  · 公众号  · Java  · 2017-06-16 20:07

正文

请到「今天看啥」查看全文


场景4
xx演唱会抢票开始,小张顺利完成下单,迫不及待的点击支付按钮,成功跳转x宝完成支付。随后小张到我的订单中,看到订单状态是支付中,小张囧了,随后登录x宝平台,发现交易成功,小张又囧了。

场景5
xx演唱会抢票开始,小张顺利完成下单,迫不及待的选择x宝,点击支付按钮,发现没有反应,由于担心抢不到票,小张慌张的重新选择x信,点击支付按钮完成支付,随后小张到我的订单中,看到订单状态是支付中,小张囧了,随后登录x宝平台,完成支付,小张囧了,心想我付了2次款,心中顿时万马奔腾。

1.4 解决方案

++综合上述问题来看最主要的问题,来自服务之间的依赖、调用,需要重新规划服务、合理拆分服务。++

下图为服务治理整体思路

服务可用性方面(见下图),验证设计:符合特征规范、黑名单的用户过滤(利用redis做计数器)

限流设计(见下图),采用分布式限流:我们采用nginx+lua操作redis控制秒级并发数量(利用redis的原子性),排队规则先进先出的原则,采用redis消息队列;应用级限流:我们采用TPS/QPS阀值控制限流,防止大量请求冲垮系统。

令牌设计(见下图):可配合限流分发令牌数量,我们分成两个阶段,第一阶段用户进入提交订单页面前,需交易系统根据用户信息向分控系统发起一次申请token的请求,分控系统将token保存到redis缓存中,为第二阶段支付使用。 第二阶段交易系统带着申请到的token发起支付请求,支付系统会检查redis中是否存在该token,如果存在,表示第一次发起支付请求,删除缓存中token后开始支付逻辑处理;如果缓存中不存在,表示非法请求。

通道设计(见下图):vip、大客户或者提前把资金存入电子钱包的用户加强权重,根据交易金额,优先进入支付通道。

缓存设计(见下图):开启web服务器缓存,无状态页面静态化,查询结果分级缓存,定时覆盖静态页(可手动),如有CDN则推送静态页到CDN上(会有延迟)。







请到「今天看啥」查看全文