当前位置: 首页 > 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/543242/

相关文章:

  • 哪个网站做h5最好html设计个人网页
  • 网站建设需要什么工具加强人社局网站建设
  • 网站向哪里备案深圳龙岗现在算什么风险地区
  • 营销型网站策划公司广州市公司网站建设报价
  • 贺州网络推广网站优化的常见问题
  • 自己的网站可以做淘客吗备案ip 查询网站查询网站
  • 网站支付怎么做虚拟币支付淘宝客 网站建设
  • 郑州网站制作公司名单哪个网站可以学做咸菜
  • 个人网站 备案 类型淮安市建设局网站首页
  • 营销网站制作方案天辰建设网站公司
  • win7 iis配置网站 视频教程wordpress菜单锚点定位
  • 做seo网站诊断书怎么做广州 骏域网站建设 陶瓷
  • 小组用jsp做的网站论文网站建设制作设计公司
  • wordpress免费网页建站移动端网站怎么做外链
  • 网站监控怎么做地方房地产网站seo实战案例分享
  • 微信网站怎么收款产品设计ppt案例
  • 钓鱼网站怎么制作html北京高端网站设计外包公司
  • 百度云 免费 网站主机网站建站公司模板
  • 出口手工艺品网站建设方案台州wordpress
  • 网站建设好公司哪家好网站后台域名登陆软件
  • 一般网站使用什么做的网站开发vs2015是什么
  • 重庆网站建设 狐灵分类用wordpress
  • 建设网站怎么学兖矿东华建设有限公司网站
  • 建晨网站建设有限公司优秀网站配色
  • 建设一个网站需要考虑什么怎么开小程序店铺
  • 中投建设官方网站查企业营业执照的网站
  • 天津网站建设费用免费商标设计网站
  • 做效果图常用的网站三大主流app开发平台
  • 北京网站开发服务seo软件推广哪个好
  • 软装潢.企业网站建设百度网页版入口官网