专栏首页余威的专栏支付系统的洪峰应对之法
原创

支付系统的洪峰应对之法

导语: 随着科技和社会的进步,移动支付已经成为大众支付的第一选择,支付越来越便捷,公司在近几年也突飞猛进,随之诞生了一下巨型业务,加上各种节日,活动日的造势,支付量常常有10倍,20倍于日常量的突发支付量。在这个过程中,我们总结了一些经验。

1. 整体设计

1. 1 限流

整个支付流程下来,需要经历很多环节,如:加载商店页、加载订单页、下单、支付、发货等,其中如果涉及到活动的话,可能还有各种资格查询等。整个交易流程比较长,其中任何一个环节失败,都可能导致交易失败,最终所有已经完成的操作都浪费掉了。当洪峰流量来临时,各阶段均可能因超载而导致整个交易失败;更甚者,如果这种状况得不到有效的控制,用户反复重试,还会对系统造成进一步的伤害(风暴)。最终,大部分的人都不能交易成功。

通过扩容,是可以解决这里的问题的,但是任何方案都需要考虑成本因素。解决问题的阶段越早,成本越低。因此,在不大规模扩容的情况下,我们采用“及早拒绝”来解决一大部分问题。

及早拒绝:

为了避免进一步的伤害(风暴)导致整个支付系统瘫痪,我们采用了“入口竞争”的措施,海量用户通过竞争有限的机会,进入后续的支付环节,没有取得机会的用户被及时拒绝,保障已经取得机会的用户尽可能的完成整个支付流程。

友好反馈、频率控制:

对于没有获得机会的用户,我们会在1秒之内就给出拒绝的结果,并给出建议性的提示,将用户的页面冻结10秒,配上解冻倒计时,解冻后才能再次发起“竞争”购买的动作。

通过这些操作,用户可以迅速拿到结果,不用不知所措的傻等转菊花;并对自己的等待有一个预期,比如刷了几次都没有打开的话,用户可能会稍后再来,不用一直等。通过竞争和倒计时,也会增加以下用户抢购的紧迫感。

1.2 排队

在支付环节,用户已经通过竞争,进入了支付流程,后续的就需要尽力帮用户完成整个流程。我们引入了预下单的机制,让用户通过预下单进行排队,并引入一个查单cgi,用户可以通过查单cgi查询自己的排队进度。排队完成后,自动拉起支付密码输入框。以排队的体验代替竞争的体验,使用户有一个更好的预期,减少中途放弃的概率。

在发货环节,用户已经支付完成,待发放的物品,也通过排队进行发放,避免对后端发货系统的一个冲击。

1.3 有损服务

支付流程中,有涉及到用户体验的,如支付成功通知tips,各种提醒等体验性的流程。在洪峰情况下,可以选择性的关闭,保证支付系统核心功能的正常运转。

1.4 分离原则

主要涉及:业务分离、渠道分离、部署分离、快慢分离、用户分离等。尽可能的保证业务之间、渠道之间、不同的系统之间、用户之间的相关影响最小化。快慢系统分离,尽可能保证整体系统的高效运转。

2. 单系统设计

2.1 容量预估与资源监控

每个系统通过压测和现网演练,可以评估出一个容量,并针对cpu、内存、磁盘IO、网络IO等指标进行实时监控,并在负载告急之前能给出告警。

2.2 尽力而为

第一点的限流实际是整个支付系统的过载保护的一部分,这里再提一下单系统的过载保护。首先所有的系统,都具备保护自己的能力;同时所有的系统,也需具备一定的保护后端系统的能力。系统容量需要一定余量,并在70%左右的容量时进行预警,以提醒运维提前进行准备,在90%时,系统能够自己进行过载保护,确保系统不会被冲垮。

2.3 动态调节

基于监控,实现动态扩缩容,调节单个系统的容量。(目前还没完全自动化)

通过以上的设计计平在面对洪峰的情况下,顺利扛下了不断增长的业务需求。并在一次次实践检验后,我们会不断的完善和细化这方面的实践。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用WES和RNA-Seq数据提取到的somatic SNVs不一致

    其实两者均可用于检测遗传变异,特别是在单核苷酸变异方面(SNVs)。如果大家对RNA-seq数据如何找变异位点的流程不是很清楚,可以看我们生信技能树以前的教程:

    生信技能树
  • su root, incorrect password, 密码是正确的

    CentOs系统,在使用su 时提示:incorrect password, 但是密码确实是正确的.

    拓荒者
  • mac借用iTerm2使用rz sz

    皇上得了花柳病
  • 一分钟学会Linux用户管理

    wuweixiang
  • java学习之路:21.了解所有数字的父类Number

    抽象类Number是BigDecimal,BigInteger,Byte,double,float,Integer,Long和Short类的父类,Number的...

    花狗Fdog
  • 老牌运维教你如何快速分析Linux服务器的性能问题

    该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU的一个负载情况。

    lyb-geek
  • AIOps线下沙龙回顾

    前言 近年,人工智能和机器学习不断发展,传统的IT运维,也从自动化运维逐渐升级到未来的智能化运维时代。得益于此,AIOps应运而生,也就是基于算法的IT运维(A...

    织云平台团队
  • 【数据科学】如何学习数据科学

    本文翻译自一篇博客文章,作者是一名软件工程师,他描述了在五年时间内学习数据科学的经历和心得,他的学习途径包括了自学(书籍、博客、小项目),课程学习,教学讨论,会...

    陆勤_数据人网
  • 《Deep Learning with Python》第一章 1.1 人工智能、机器学习和深度学习

    第一章 什么是深度学习?本章涉及的知识点:基本概念的高层次(High-level)定义机器学习的发展历程深度学习兴起背后的关键因素以及未来的展望过去几十年,人工...

    企鹅号小编
  • 社交媒体战略制定十大反思

    随着社交媒体发展越来越迅速,当真是士别三日当刮目相待。如果你在管理公司的社交媒体,就一起来看看以下这10份统计数据带给我们对于社交媒体战略的反思: 1. Twi...

    小莹莹

扫码关注云+社区

领取腾讯云代金券