当前位置: 首页 > news >正文

大同网站建设优化推广西安市在建工程项目

大同网站建设优化推广,西安市在建工程项目,wordpress 电影模版,教育网站建站为什么扣了我两笔钱? 2010年,美国加利福尼亚州的两兄弟打算创办一家公司,但他们发现建立网上支付十分困难。于是,他们决定开发一款在线支付服务,并将其命名为Stripe。 随着用户数量的不断增长,重复付费问题…

为什么扣了我两笔钱?

2010年,美国加利福尼亚州的两兄弟打算创办一家公司,但他们发现建立网上支付十分困难。于是,他们决定开发一款在线支付服务,并将其命名为Stripe。

随着用户数量的不断增长,重复付费问题逐渐显现。所谓的重复付费指的是对同一笔交易错误地向用户收取了两次甚至多次费用。可能造成重复付费的原因很多,下面看一种典型的场景。

当客户端发送一个请求后,服务器已成功处理该请求。但在返回响应给客户端之前,由于网络故障导致响应没有成功发送给客户端。

但是客户端不知道请求已被成功处理,它只要没收到响应,就当作请求处理失败,因此就会重试,这种情况下就会出现重复付款。

除此之外,框架的一些重试机制同样会导致重复付费。

幂等 API

为了解决重复付费问题,他们决定采用最简单也是最有效的解决方案:他们决定将API设计成幂等的。

幂等 API可以保证同一个请求可以重试多次且不会产生副作用。这意味着即使经过多次重试,这些请求也只会被处理一次。Stripe 实现幂等 API 的方式如下:

1.幂等key

幂等key是一个唯一的标识符,用来标识每一次请求。通过使用幂等key,服务器可以识别出同一个请求,即使这个请求被重复发送多次,也只会处理一次。

客户端(比如用户的浏览器或手机应用)发起支付请求时,会生成一个唯一的字符串作为幂等key。这个字符串通常是一个UUID(通用唯一标识符)。此后客户端发送请求时需要将这个key随请求的 HTTP 头部一起发送。

POST /pay
Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000
Content-Type: application/json
{"amount": 100,"currency": "USD","card_number": "4111111111111111","expiry_date": "12/23","cvv": "123"
}

服务端接收到请求后,先检查这个幂等key是否已经存在于数据库(或缓存)中,如果不存在,说明这是一个新的请求,服务器处理请求,并将幂等key和响应结果一起缓存在数据库中(如Redis)。如果幂等key存在于数据库中,说明这个请求之前已经被处理过了。服务器直接返回缓存中的处理结果,而不再重复处理。

如果服务器在处理请求时发生错误,他们会使用ACID数据库的事务回滚功能来撤销交易。幂等性key会在内存数据库中保留24小时(这个时间根据自己业务确定),以便在这个时间段内可以重试失败的请求。过了24小时后,幂等性key会被移除,这样可以减少存储成本,并允许在这个时间段后重复使用同一个key。

为了帮助您理解,我再举一个更具体的例子,假设你正在用Stripe支付一笔费用,但由于网络问题,没有响应回来,你以为付款失败了,于是你就重新点击了一次支付按钮。

  • 第一次请求:服务器生成一个幂等性键 12345,并处理这个请求。请求成功后,响应会被缓存,并且幂等性键 12345 被存储在内存数据库中。

  • 第二次请求:由于你不确定第一次是否成功,所以又发了一次请求。这次请求带着相同的幂等性键 12345。服务器查询内存数据库,发现这个请求已经处理过,因此直接返回缓存的响应,而不会再次处理请求。

2. 重试失败的请求

虽然使用幂等key之后,重试变的安全了,不会造成重复付费问题了,但是过多的重试请求可能会导致服务器过载。

因此系统重试使用了指数退避算法:每次重试之间的等待时间会逐次增加。

此外,为了防止大量客户端同时发起重试请求,导致服务器过载。还在指数退避的基础上给重试等待时间增加了随机时间,这称为抖动。

为了更好的理解指数退避算法和抖动,举两个例子来说明。

示例1:指数退避

第一个例子是用来解释指数退避算法,假如你在用Stripe支付,但服务器暂时不可用,导致请求失败。

  • 第一次请求失败:系统等待1秒后重试。
  • 第二次请求失败:系统等待2秒后重试。
  • 第三次请求失败:系统等待4秒后重试。
  • 依次类推,等待时间逐次增加。

示例2:抖动

这个例子是用来解释抖动。假设有很多用户同时在用Stripe支付,服务器暂时不可用。

  • 用户A的请求失败后,系统会根据指数退避算法等待一段时间,然后加上一个随机的额外等待时间。例如,第一次等待1秒加0.5秒的随机时间(总共1.5秒)。
  • 用户B的请求失败后,系统等待1秒加0.3秒的随机时间(总共1.3秒)。
  • 用户C的请求失败后,系统等待1秒加0.7秒的随机时间(总共1.7秒)。

由于加入了抖动,不同用户的重试时间就会有所不同,这样可以防止服务器在同一时间受到大量重试请求的冲击,从而减轻服务器的压力,防止过载。

幂等性对于可靠的在线支付至关重要。它给系统带来了安全性和更好的用户体验。Stripe,作为全球最大的在线支付服务提供商之一,正是通过这样的方法确保其支付系统的可靠性和稳定性。

http://www.yayakq.cn/news/864652/

相关文章:

  • 鲜花网网站开发的意义抖音短剧推广怎么做
  • 外贸网站建站要多少钱做数学题赚钱的网站
  • 网站建设属于行政那个模块做调查的有哪些网站
  • 中国建设部门官方网站网站动态静态
  • 最火的网站开发语言安远县城乡规划建设局网站
  • 做视频上传多少个网站服务公司取名最好的名字
  • 做笔记的网站源码wordpress新版编辑
  • 2014最新网站模板-网页模板免费下载-风格吧无人在线观看高清视频8
  • 苏州网站建设搜王道下拉网站的图片怎么制作
  • 如何在国外推广自己的网站wordpress 幻燈片 插件
  • 淘客网站+wordpress免费自学编程的app
  • 精品课程网站开发的开题报告网站自创
  • 备案网站建设方案网站的出站连接数
  • 门户网站的建设和管理情况自查具有品牌的做pc端网站
  • 网站标签是什么高端建站神器
  • 台州市建设监理协会网站个人网页设计html论文
  • 新加坡网站制作擅自给公司做网站有什么责任
  • 网站备案贵州电话wordpress文章显示时间
  • 医疗网站建设基本流程图网站建设设计制作公司
  • 网站sem网站刷单账务处理怎么做
  • 黄冈公司做网站企业网站制作报价
  • 免费自助建站哪个最好网站制作优化推广
  • 大气的企业网站源码福建建设信息网站监理企业招聘
  • 网站建设费用大全汽车创意logo设计
  • 内设网站青岛公司网站制作
  • 商城网站开发流程微信上的网站怎么做的
  • 化妆品企业网站建设的缺点网络管理系统的特点
  • 网站设计的重要性百度做网站为什么上阿里云备案
  • 做侵权视频网站长泰597人才网最新招聘信息
  • 公司seo是什么级别seo描述是写什么