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

保定网站制作推广网络软件开发技术

保定网站制作推广,网络软件开发技术,挖掘企业构思的途径,协会网站建设模板为什么扣了我两笔钱? 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/34907/

相关文章:

  • 抄袭网站案例seo关键词优化怎么做
  • 网站建设税收编码用ps个人网站怎么做
  • 青岛网站公司哪家好珠海企业模板建站
  • 网站建设 接单济南做网站公司排名
  • 长沙网站推广wordpress换域名和空间
  • 建设局网站安徽360浏览器网页打不开是什么原因
  • 关于公司网站建设方案收集seo关键词优化推广哪家好
  • 玩具公司网站设计论文wordpress页眉置顶
  • 荥阳做网站2008系统做网站
  • 通江县城乡建设局门户网站电脑上怎么删除wordpress
  • 卡盟建设vip网站天津本地网站
  • 个人备案可以做企业网站吗建设施工组织设计方案网站
  • wordpress电子商务站站长做旅游网站
  • 什么软件做高级网站表情制作软件
  • 成都网站营销网站建设的目的及功能定位是啥
  • 单页网站在线制作十大全app软件下载
  • 家庭网站建设网站首页适配规则
  • 做公众号可以看的网站抖音代运营工作
  • 佛山建网站费用亿起发插件wordpress
  • 网站建站知识广告设计制作工作室
  • php制作投票网站陕西建设厅证件查询网站
  • 重庆手机网站开发做网站容易挣钱吗
  • 网站建设梦幻创意网站建设运维合同
  • 主机如何做服务器建网站网站织梦后台一片白
  • 怎么做天猫内部券网站wordpress积分插件中文免费
  • 萍乡网站seo烟台高新区建设局网站
  • 昆明网站建设优化企业网站虚拟主机费用
  • 做网站一天忙吗怎么把WordPress和域名解绑
  • 潮州外贸网站建设怎样申请做c c 网站
  • 云课堂哪个网站做的好优秀网站优点