分布式之接口幂等性

前言

什么是幂等性?一次和多次请求某一个资源,对资源本身所产生的的影响均与一次执行的影响相同。

幂等性是系统服务对外的一种承诺,承诺只要调用接口成功了,多次调用对系统的影响是一致的。

幂等性与重复提交比较

幂等性 更多使用的情况是第一次请求知道结果,但是由于网络抖动或连接超时等情况未进行正常返回,在这种情况下系统自动再次发起请求,其目的是确认第一次是否请求完成。

重复提交 更多使用的情况是第一次请求成功或请求结果暂未返回的情况下,人为的进行多次操作。

SQL 语句幂等性

SELECT

SELECT * FROM `user` WHERE id = 1
复制代码

无论执行多少次都不会对资源造成影响,查询具有天然的幂等性。

UPDATE

UPDATE `user` SET status = 1 WHERE id = 1;
复制代码

无论执行成功多少次状态都是一致的,这种场景是幂等操作。

UPDATE `user` SET score = score+1 WHERE id = 1;
复制代码

每次执行的结果都会发生变化,这种场景不是幂等操作。

根据具体场景看能否写成这样的 SQL

UPDATE `user` SET score = score+1 WHERE id = 1 AND score = 59;
复制代码

无论执行成功多少次分数都是一致的,这种场景是幂等操作。

DELETE

DELETE FROM `user` WHERE id = 1;
复制代码

无论执行成功多少次数据都是一致的,这种场景是幂等操作。

INSERT

INSERT INTO `user` (`name`, `status`, `score`) VALUES ('tom', 1, 80);
复制代码

每次执行的结果都会发生变化,这种场景不是幂等操作。

根据具体场景看能否为 name 创建一个唯一索引,或执行类型这样的 SQL

INSERT INTO ... values ... ON DUPLICATE KEY UPDATE ...

// 注意,要使用这条语句,前提条件是这个表必须有一个唯一索引或主键。
复制代码

实现方案

方案一

下游系统提供相应查询接口。

上游系统在 timeout 后,首先去查询一下,如果查到了,就表明已经做了,成功了就不用做了,失败了就走失败流程。

方案二

将这个查询操作交给下游系统,上游系统只管重试,下游系统保证一次和多次的请求产生的影响是一样的。这时我们就说下游系统提供的接口支持幂等性。

小结

幂等性关注的是多次请求是否对资源产生了副作用,而不是关注的结果。SELECT 语句有可能每次查询的数据不一致,但是它是幂等性的。

关于 实现方案 -> 方案二 的具体实现方案,根据业务的实际情况考虑合适的解决方案,比如:通过 SQL 语句就可以实现幂等,就没必要引入 全局唯一ID 的解决方案。

推荐阅读

  1. 分布式事务之理解篇
  2. 分布式事务之最终一致性实现方案
  3. 分布式之异步通讯组件选择
  4. 分布式之配置中心

免责声明:务必仔细阅读

  • 本站为个人博客,博客所转载的一切破解、path、补丁、注册机和注册信息及软件等资源文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。

  • 本站为非盈利性站点,打赏作为用户喜欢本站捐赠打赏功能,本站不贩卖软件等资源,所有内容不作为商业行为。

  • 本博客的文章中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.

  • 本博客的任何内容,未经许可禁止任何公众号、自媒体进行任何形式的转载、发布。

  • 博客对任何脚本资源教程问题概不负责,包括但不限于由任何脚本资源教程错误导致的任何损失或损害.

  • 间接使用相关资源或者参照文章的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 博客对于由此引起的任何隐私泄漏或其他后果概不负责.

  • 请勿将博客的任何内容用于商业或非法目的,否则后果自负.

  • 如果任何单位或个人认为该博客的任何内容可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明至admin@proyy.com.我们将在收到认证文件后删除相关内容.

  • 任何以任何方式查看此博客的任何内容的人或直接或间接使用该博客的任何内容的使用者都应仔细阅读此声明。博客保留随时更改或补充此免责声明的权利。一旦使用并复制了博客的任何内容,则视为您已接受此免责声明.

您必须在下载后的24小时内从计算机或手机中完全删除以上内容.

您使用或者复制了本博客的任何内容,则视为已接受此声明,请仔细阅读


更多福利请关注一一网络微信公众号或者小程序

一一网络微信公众号
打个小广告,宝塔服务器面板,我用的也是,很方便,重点是免费的也能用,没钱太难了,穷鬼一个,一键全能部署及管理,送你3188元礼包,点我领取https://www.bt.cn/?invite_code=MV9kY3ZwbXo=


一一网络 » 分布式之接口幂等性

发表评论

发表评论

一一网络-提供最优质的文章集合

立即查看 了解详情