本文主要抛砖引玉,简要分析「付钱拉」的架构设计理念,具体的技术实现和最佳实践后续会在其他系列文章详细介绍。

「付钱拉」支付系统每天平均处理订单量100w-200w笔,账单交易日交易量在300万笔以上、每个月处理支付交易流水在300亿左右、对接银行和三方有30多家以及接入商户几千个。从刚开始系统仅仅处于能用阶段,日交易量几千笔到现在,系统架构根据业务的不断发展迭代多个阶段。主要从以下几个方面来分享。

系统目标

「付钱拉」支付系统需要满足持续不断的业务增长,系统设计的时候有以下目标。

  • 可伸缩

随着业务量的增长,单个节点不足以满足性能问题,就要各个系统模块支持横向扩展和分部署部署。

  • 可测试

测试是代码质量的最后一道防线,「付钱拉」系统支持分布式部署,但是目前的框架给测试也带来许多困难,比如开发人员在本地测试的时候,不同的开发人员相互争抢MQ消息。

  • 可监控

作为支付系统,和钱打交道,不允许任何出错,实时性要求非常高。如果瞬间发送一个问题,可能影响的交易金额就不可估计了。所以如何及时发现问题,监控系统就是「付钱拉」的眼睛。

  • 可报警

满足了监控,报警就必不可少。但是往往监控项目和场景会非常多,如何选择哪些项目为出警项,哪些为关注项就非常重要。如果全部为出警项,对于报警接受人员,可能造成狼来了的效应,当出现真正需要报警的时候,重视度就会降低。

其次是报警方式,无非是推送和拉取模式,通过监控页面,监控室,短信,邮件等。

  • 可配置

在支付系统有很多的参数,并且随时可以发生变化,如果每次变化都需要重启系统,肯定是不可以的。比如响应码状态的配置,银行维护配置,交易处理时间段等等,可配置就可以解决此类问题,保证客户端无感知。

  • 安全性

安全性能对至于任何系统都是命脉,对于支付系统更加像心脏一样。安全性主要有两个方面,一个是用户数据安全,一个系统支付安全。用户数据安全要求展示层面、存储层面、内部交互层面和外部通信层面都必须是安全的;支付安全,包括人为操作导致的支付损失和系统bug导致的支付损失。

  • 高可用

高可用要求系统能够一直提供稳定的服务,满足SLA的要求。「付钱拉」为了提供高可用服务,所有的系统组件拒绝单点部署,从业务模块,数据库,消息中间,定时服务和Nginx等都做了集群功能。

  • 高性能

高性能要求提供快速的响应时间,「付钱拉」有大量的互联网类型的支付交易,对交易的实时响应时间要求非常高,不可以让用户端感觉支付非常慢。「付钱拉」对整个支付环节的做法是拆分,通过分步和异步提高并发能力。

业务痛点

以下就「付钱拉」系统随着业务的演变,不同阶段遇到的业务痛点,从而架构层面都做了哪些改变。

  • 业务量的突然增长

「付钱拉」系统刚上线的时候每天交易量最多也就1Q笔左右,不到两个月的时间系统每天的交易量从1w要增加到200W笔,这时候系统初始的架构不能够满足系统的业务增长量。

做的第一件事,分布式部署。系统业务模块做拆分,一个大的块功能模块拆分成好几个模块来实现,并且每个模块都是无状态的,这样才可以支持横向扩展。

做的第二件事,解决数据库大表问题。「付钱拉」系统有两张大表,一个是支付记录表,另外一个是支付日志轨迹表。系统刚开始支付记录只有一张表来存储,一个月的数据量这张表就已经6000W了,如果一个开发人员因为疏忽sql忘记按照索引查询,对数据库来说可能就像蝴蝶效应一样。为了快速解决问题,「付钱拉」做了一些改变,读写数据分离、冷数据清除和部分功能借助缓存来减少数据库压力。这些都是能够快速去解决问题的,长期方案「付钱拉」采用分库分表的方式。

  • 如何应对滚雪球效应

「付钱拉」系统最初消息队列是按照不同的支付类型来拆分的,但是随着后端三方和银行的不断接入,不同的三方网络和处理能力都不一样。导致同样的支付类型下面,一个三方宕机从而堵塞其他三方的交易,产生滚雪球效应,雪球越滚越大,最后直至拖垮所有交易。

针对这种情况,「付钱拉」做的改变是隔离,按照商户、三方、和支付类型做彻底隔离,确保不同的业务和商户各行其道,相互不受影响。这个改变就好比,原来是单行道,现在变成了多行道,就像高速公路一样。

  • 系统存在的单点故障

任何的单点都是存在风险的,不要相信任何软件或者功能是多么的无坚不摧。举一个例子,「付钱拉」系统之前使用消息中间件是单节点,并且运行一直非常稳定,从来没有出现过故障。但是有一天,它所在的物理机器网卡掉了,瞬间它不能提供服务。所以从这个案例讲,单点故障也许不是你本身的故障,但是如果单点就可能发生风险,

「付钱拉」目前所有的节点包括中间件都是双备。

  • 如何避免操作风险

操作风险可以认为是人为风险。作为互联网系统,如果因为操作风险导致一个小bug,可能充其量就是影响用户体验,立即修复即可。但是对于支付系统,每笔交易都是真金白银,不可以有任何一个小小的操作风险。

「付钱拉」经验总结操作风险主要有以下几种:上线操作风险、代码未审核风险、生产环境变更风险、订单修改风险、测试风险。如何避免这些操作风险,其他系列会详细展开讨论。

  • 系统是否具备自我保护能力

系统具备自我保护能力,就是容错,快速失败,降级和限制使用。系统具备自我保护能力,就是当因为各种原因发生不可预期的问题的时候,它能够自己解决问题。

容错,比如发生一笔交易,发生了网络异常,如果明确知道这笔交易没有发往三方,那么就可以尝试在发送一次来提高成功率;「付钱拉」有一个自动重路由功能,第一次路由到的通道如果交易失败,符合一定条件,会自动重路由去尝试别的通道,这就是很好的容错;还有一种容错场景,一般系统如果发生OOM异常一定会死掉。如果能够在设计系统的时候,预留一部分内存,然后当发生OOM的时候,去catch住处理掉,这样一个小小的容错就能够避免系统一次OOM。

快速失败原则,如果系统启动的时候,明确知道缺少哪些东西,就算启动了服务也不可用,那这时候启动的时候就让启动直接失败;还有针对实时类交易,如果超过响应时间,就快速失败响应用户,而不是无休止等待。

服务降级是在系统达到一定访问量的时候,如果不能满足服务要求,必须要做的事情。「付钱拉」在针对商户活动日的时候,就做了服务降级。

限制,如果系统资源无限制使用,没有管控,一定会在某个时间点发生事故,比如数据库和内存等。「付钱拉」主要做了以下限制:限制各个模块的连接数的个数,因为横向扩展一定会引发这个问题;限制内存的使用,内存过大会导致频繁的GC和OOM; 限制woker线程的个数;限制三方的并发数量。

  • 外挂系统

外挂系统主要是用来支撑核心系统,但是它的引入又不可以影响核心系统。「付钱拉」有两个外挂系统个,一个是日志轨迹系统,一个是实时预警系统。具体的实现会在其他系列讨论。

  • 支付安全问题

「付钱拉」的支付安全主要来自外在安全和内在安全两个方面。外在安全包括用户敏感数据展示、存储、内部交互、外部通信和人为操作;内在安全主要指系统并发导致的资金支付风险。

  • 促销活动

在业务线做促销的时候,交易量剧增,但是受限于指定的支付通道和并发处理能力,如果交易量超过了处理能力,为了满足其他商户不受影响,「付钱拉」针对不同的商户做了服务降级处理。

  • 业务创新

现实业务场景往往比理想的业务场景复杂的多,「付钱拉」在不同的支付类型上做了多种业务创新和封装。比如超级快捷,Token支付,快捷服务化,鉴权服务化,动态重路由,代扣Plus等等的创新来满足各种各样的业务需求。在这个过程中还要处理各种特殊的接入的第三方。

在路上

系统架构和业务的演进是不间断的,没有终点,没有银弹。只要矢志不移的去改变,是适应才可以满足业务需求,「付钱拉」的架构和业务改进也将是持续不断的,比如动态路由,比如服务治理等等。虽然目前市面各家系统架构实际众多,但是也都各自有特性。本文以「付钱拉」系统实践来简要剖析支付系统的架构特点,后续会在其他系列对本文中提到的点进行详细讨论。

【作者简介:冯忠旗,付钱拉高级技术经理,曾经是IBM中国开发中心IaaS私有云技术负责人。2014年加入付钱拉,主导支付3.0技术平台的研发,付钱拉支付3.0平台目前日处理交易额200多亿,每天平均交易量400万笔。除此之外,负责支付平台相关的实时预警系统,报表系统,电商服务解决方案和理财服务解决方案等。】

转载于:https://my.oschina.net/vshcxl/blog/805173

付钱拉后台支付系统的架构设计理念和业务痛点相关推荐

  1. 一文读懂:完整的支付系统整体架构

    http://www.sohu.com/a/199827912_343156 支付产品模块是按照支付场景来为业务方提供支付服务.这个模块一般位于支付网关之后,支付渠道之前. 它根据支付能力将不同的支付 ...

  2. 厉害了!一文看懂各大互联网支付系统整体架构

    在互联网产品运营中,有很多小伙伴或许会遇到这样的困扰:产品好不容易推出来了,流量成本节节攀升,用户的活跃度.留存度却持续下降. 因此在瞬息万变的互联网产品环境中,需要研发接入支付系统来加入商业行为的闭 ...

  3. 互联网支付系统整体架构

    从产品分类.模块功能和业务流程,了解支付产品服务的设计 支付产品模块是按照支付场景来为业务方提供支付服务.这个模块一般位于支付网关之后,支付渠道之前. 它根据支付能力将不同的支付渠道封装成统一的接口, ...

  4. 支付系统整体架构详解

    2019独角兽企业重金招聘Python工程师标准>>> 支付系统整体架构详解 http://www.dataguru.cn/article-11263-1.html http://w ...

  5. 做后台支付系统,你要注意这些!!!

    咖友提问:后台支付系统考虑哪几方面? 最近要做个酒店的支付系统 需求是老板提出来的 预订的功能点有了几个 求后台支付系统还要怎么考虑?考虑哪些方面的功能,要怎么设计prd文档? 来自贺少 58到家 产 ...

  6. 某知名支付系统的架构演进权威分析

    知名支付系统自2011年搭建以来,在五年的时间里逐渐从一个高耦合的单一系统发展为众多子系统组成的高并发.高可用.支持多种交易支付业务的分布式系统.业务从最初的非代收到现在多种非代收.代收场景的支持,B ...

  7. roncoo-pay 开源支付系统全新架构升级

    百度智能云 云生态狂欢季 热门云产品1折起>>>   龙果支付系统是国内首款开源的互联网支付系统,其核心目标是汇聚所有主流支付渠道,打造一款轻量.便捷.易用,且集支付.资金对账.资金 ...

  8. 支付核心研发部 | POS支付系统技术架构解密

    点击「京东金融技术说」可快速关注 「团队介绍」 POS支付团队,支撑整个京东货到付款业务,配送小哥人手一台POS机就是我们支付工具,为京东数万台POS机提供更好的支付体验.更好的支付产品,是我们整个团 ...

  9. 【稳定性day8】付钱拉支付系统的高可用之路 - 避免和歼灭的两种打法

    本文来自当当付钱拉冯忠旗老师的分享. 对于互联网应用和企业大型应用而言,多数都尽可能地要求做到7*24小时不间断运行,而要做到完全的不间断运行可以说"难于上青天". 为此,对应用的 ...

最新文章

  1. 从一个servlet转发到另一个servlet_javaweb02-创建第一个Servlet
  2. python安装教程windows-Python for windows 安装教程
  3. GraphAPI 1.0中新增加的Teams API
  4. cmake学习(二)常用变量和常用环境变量
  5. 查看函数库.a函数符号信息
  6. ICCV 2019 | 首个镜子分割网络问世,大连理工、鹏城实验室、香港城大出品
  7. form表单重复提交
  8. 国内首家生鲜电商平台要凉了:阿里曾参投,7月底已申请破产重组
  9. 新建xml模板_库卡机器人之OrangeEdit加模板
  10. 让html的text输入框只能输入数字和1个小数点
  11. 星沙工业机器人_长沙县各种大型企业管道检测:管道排查机器人CCTV检测QV检
  12. 干货分享!12款响应式的移动网站模板免费下载
  13. 图片里的数学公式转换成word
  14. 基于 FPGA 的 UART 控制器设计(VHDL)(中)
  15. [PyG] 1.如何使用GCN完成一个最基本的训练过程(含GCN实现)
  16. 理解:iOS开发中锁的实现原理
  17. 虚拟机VMware安Mac OS时没有Apple mac选项
  18. MATLAB 数学应用 微分方程 常微分方程 求解非刚性ODE
  19. C语言直接驱动硬件实现PC机的串口操作
  20. 大数据毕业设计题目汇总 python毕设选题推荐

热门文章

  1. 深度相机分类及品牌型号调研
  2. 传感器的密封焊接方法比较
  3. jor oracle,[整理]sql语句一些实用技巧for oracle
  4. ArcBlock 课堂 ⑥ | 多步验证那些事 (全程视频 + 文字)
  5. 模块化多电平换流器(MMC)matlab完整仿真模型,包括电压均衡和电流抑制控制;换流器小信号建模,风机光伏直流等电磁暂态建模、机电暂态建模均有相关模型
  6. Java笔记(学习中。。)
  7. 职称计算机证书能折合多少继续教育学分,中级职称继续教育至少满足多少学时快捷有效_明运教育...
  8. 常见胸肌问题解答(七):胸部赘肉下坠
  9. 《数据库系统课程设计》
  10. Microchip(微芯)资料下载地址