一种行之有效的防错策略:在支付系统中实施防呆设计的实践

聊个支付人都会碰到的问题:资损防控。做支付如果还没有碰到过资损,那就是做得时间还不够久。资损防控是一个很大的话题,需要开几篇文章才能讲完,今天只从一件小事入手聊一个简单而又行之有效的防错策略:防呆设计的实践。

1. 一个线上事故

曾经处理过一个资损事件,很典型,值得说道说道。

一个研发同学在线下测试环境做测试,为图方便,直接从生产捞取一段日志的参数做为请求参数,不幸的是,线下测试环境竟然配置了外部第三方的生产环境参数,导致真实资金被错误地转入个人账户,造成了平台的资金损失。尽管损失金额不大,但由于操作不规范,事件的性质非常严重。

这类事件出来后,通常会发起所谓的复盘,然后给出一堆的整改措施,流程规范、管理制度、设计优化等。我们今天抛开那些大而全(或者华而不实)的整改措施,单单聊聊如何通过“防呆设计”来预防此类事件的发生。

2. 防呆设计定义及在工业界的应用

“防呆设计”(日语:ポカヨケ poka yoke)是一种预防性设计策略,目的是通过限制方法减少错误的发生。用户在无需额外注意力、经验或专业知识的情况下,也能准确无误地完成操作。

这个概念起源于日本,被广泛应用于丰田汽车的生产过程中,随着时间的推移,已成为全球范围内广泛采用的设计策略。

在工业设计中,防呆设计的例子比比皆是。例如,USB接口的设计确保了只有正确方向才能插入,而Type-C接口则进一步简化,支持双面插入。

第一版:使用字母标识,容易出错。

第二版:使用颜色标识,减少出错。

第三版(防呆):不同形状只能插到不同的位置,想错都错不了。

3. 针对事故的防呆设计措施

再说回到开头所说的故障,我们应该使用“防呆”设计的思想,彻底阻断使用者犯错的可能性。具体怎么做呢?如下:

  1. 环境隔离:确保所有测试环境均配置为外部渠道的测试参数,防止测试操作影响真实交易环境。
  2. 流量控制中间件:在系统中集成一个流量控制中间件,维护一个外部渠道的生产环境白名单。通过中间件筛选请求来源,若来源于测试环境,则自动阻断请求。
  3. 禁用线上环境的直接操作:关闭线上环境调试、手动直接调用能力。
  4. 增加操作审核:对线上环境的操作引入审核机制,由具备风险控制能力的团队成员负责审核。

通过实施上述防呆措施,即使是经验不足的新员工也能避免类似的资损风险。防呆设计并非只是解决问题的手段,而是一种预防性策略,旨在通过系统设计减少人为错误的可能性

4. 支付系统中防呆设计的应用

在支付行业中,防呆设计随处可见,举几个例子:

  1. 拆分输入框:信用卡绑卡页面将有效期拆分为两个输入框,分别用于输入月份和年份,从而减少输入错误。把用户的First Name和Last Name分开两个输入框。(我还真见过有支付平台提供的First Name和Last Name使用一个输入框,导致信用卡绑卡成功率持续很低)。
  2. 自动超时退出:在线支付系统在用户一段时间内无操作时,会自动退出,以防止未经授权的使用
  3. 限制尝试次数:支付系统会限制密码或验证码输入错误的次数,超过限制会暂时锁定账户,以防试图破解。
  4. 防止重复提交:为防止用户多次点击造成重复交易,支付系统通常会在首次点击后禁用提交按钮
  5. 可视化的交易流程:针对新用户第一次使用时给出指引页面,通过图形化界面展示交易流程,帮助用户轻松理解每一步操作。

5. 结束语

从业多年,见过太多的线上故障,得到一个朴素的道理:“人都是不可靠的,如果能通过系统解决的,就一定不要依赖人或流程来解决。”多引入一些防呆设计,让再“呆笨”的人都没有出错的可能性,那么系统就是健壮的,也就没有那么多的线上应急和复盘。

这是《百图解码支付系统设计与实现》专栏系列文章中的第(28)篇。关注墨哥,深入了解支付系统的方方面面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读_tinyllama_轻量级大模型

英文名称: TinyLlama: An Open-Source Small Language Model中文名称: TinyLlama: 一个开源的小型语言模型链接: http://arxiv.org/abs/2401.02385v1代码: https://github.com/jzhang38/TinyLlama作者: Peiyuan Zhang, Guangtao Zeng, Tianduo Wang, Wei Lu机构: 新加坡科技与设…

【C++】list容器迭代器的模拟实现

list容器内部基本都是链表形式实现,这里的迭代器实现的逻辑需要注意C语言中指针的转换。 list容器如同数据结构中的队列,通常用链式结构进行存储。在这个容器中,我们可以模仿系统的逻辑,在头结点后设置一个“ 哨兵 ”,…

14.2搭建ASP运行环境

14.2搭建ASP运行环境 可以使用WinXP来搭建ASP的运行环境,不过,WinXP不适宜作为商业用Web服务器。目前比较常用的Web服务器操作系统是Windows2003 Server,在Windows2003 Server上安装完IIS6.0并进行相关设置后,即完成了ASP运行环境…

【lettuce-排行榜】

背景&#xff1a; 这次游戏中台采用lettuce的zset完成游戏内的本服和跨服排行榜&#xff0c;因此写一下案例。 pom.xml <dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.2.4.RELEASE</ve…

【Redis】Redis基础

Redis基础 初识Redis 认识NoSQL SQL&#xff1a;结构化查询语言 > 关系型数据库 NoSQL&#xff1a;非关系型数据库 SQL与NoSQL的差异&#xff1a; 数据结构 SQL结构化&#xff1a;表的信息依赖于表的结构NoSQL非结构化&#xff1a;存储的信息为KV形式 数据关联 SQL关联…

Kubernetes实战(十八)-Pod亲和与反亲和调度

1 调度Pod的主要方式 Pod调度到指定Node的方式主要有4种&#xff1a; nodeName调度&#xff1a;直接在Pod的yaml编排文件中指定nodeName&#xff0c;调度到指定name的节点上。nodeSelector调度&#xff1a;直接在Pod的yaml编排文件中指定nodeSelector&#xff0c;调度到带有指…

Java和Redis实现一个简单的热搜功能

1. 前言 我们有一个简单的需求&#xff1a; 搜索栏展示当前登陆的个人用户的搜索历史记录&#xff0c;删除个人历史记录。用户在搜索栏输入某字符&#xff0c;则将该字符记录下来 以zset格式存储的redis中&#xff0c;记录该字符被搜索的个数以及当前的时间戳 &#xff08;用…

Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件

一、参考资料 stackoverflow qt - How to generate .sln/.vcproj using qmake - Stack Overflowhttps://stackoverflow.com/questions/2339832/how-to-generate-sln-vcproj-using-qmake?answertabtrending#tab-topqt - 如何使用 qmake 生成 .sln/.vcproj - IT工具网 (coder.wo…

《WebKit 技术内幕》学习之七(2): 渲染基础

2 网页层次和RenderLayer树 2.1 层次和RenderLayer对象 前面章节介绍了网页的层次结构&#xff0c;也就是说网页是可以分层的&#xff0c;这有两点原因&#xff0c;一是为了方便网页开发者开发网页并设置网页的层次&#xff0c;二是为了WebKit处理上的便利&#xff0c;也就是…

数据库复试—关系数据库标准语言SQL

数据库复试—关系数据库标准语言SQL SQL&#xff1a;结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11 关系模式 学生表Student(Sno,Sname,Ssex,Sage,Sdept) 课程表Course(Cno,Cname,Cpno,Ccredit) 学生选课表SC&#xf…

【Java】学习一门开发语言,从TA的Hello World开始

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《Java》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

【Android12】Android Framework系列---Adb和PMS安装apk源码流程

Adb和PMS安装apk源码流程 adb install命令 通过adb install命令可以将apk安装到Android系统&#xff08;注意&#xff1a;特定类型的apk&#xff0c;比如persist类型是无法通过adb安装的&#xff09; 下述命令中adb解析install命令&#xff0c;并调用Android PackageManagerS…

eNSP学习——部分VLAN间互通、部分VLAN间隔离、VLAN内用户隔离(MUX-VLAN)

MUX VLAN&#xff08;Multiplex VLAN&#xff09;提供了一种通过VLAN进行网络资源控制 的机制。通过MUX VLAN提供的二层流量隔离的机制可以实现企业内部员 工之间互相通信&#xff0c;而企业外来访客之间的互访是隔离的。 特点&#xff1a; 一、主VLAN端口可以和所有VLAN通信 二…

基本控件(一)

目录 控件的定义&#xff1a;使用控件的好处&#xff1a; setupUiwidget.hwidget.cppmain.cpp 控件的定义&#xff1a; QT控件是在QT框架下实现的一组用户界面元素&#xff0c;包括按钮、标签、输入框、列表框、滚动条、菜单等等&#xff0c;它们用于快速构建各种应用程序的图…

【Linux】gcc与g++的认识

gcc与g是linux下的编译器&#xff0c; 我们都知道写好了源文件gcc一下就可以得到.exe文件 那么其中会经过几个过程呢&#xff1f;也就是源文件翻译过程&#xff0c; 预处理&#xff08;预编译&#xff09;编译汇编链接 本篇文章的侧重点是围绕链接进行理解C语言标准库 目录 …

Java项目:ssm框架基于spring+springmvc+mybatis框架的民宿预订管理系统设计与实现(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm827基于SSM框架的民宿预订管理系统设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调…

POI及EasyExcel学习笔记

POI及EasyExcel学习笔记 组件、工具 POI-Excel概述 Apache POI 结构&#xff1a; HSSF &#xff0d; 提供读写[Microsoft Excel](https://baike.baidu.com/item/Microsoft Excel)格式档案的功能。XSSF &#xff0d; 提供读写Microsoft Excel OOXML格式档案的功能。HWPF &am…

93. 复原 IP 地址 - 力扣(LeetCode)

题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.255.245”、“…

matlab appdesigner系列-常用16-状态按钮

状态按钮&#xff0c;有两个状态&#xff0c;按下状态&#xff0c;返回值为1或true&#xff1b;未按下状态&#xff0c;返回值为0或false 示例&#xff1a;设置一状态按钮&#xff0c;用文本记录其状态 操作步骤&#xff1a; 1&#xff09;将状态按钮、文本区域拖拽到画布上…

LeetCode 热题 100 | 哈希

目录 1 基础知识 1.1 定义哈希表 1.2 遍历哈希表 1.3 查找某一个键 1.4 插入键值对 1.5 获取键值对的值 1.6 搜索功能 2 三道题 2.1 1. 两数之和 2.2 49. 字母异位词分组 2.3 128. 最长连续序列 菜鸟做题第一周&#xff0c;语言是 C 1 基础知识 1.1 定…