美文网首页
分布式服务的幂等性的个人见解

分布式服务的幂等性的个人见解

作者: 是王威啊 | 来源:发表于2019-07-09 21:54 被阅读0次

概念

幂等的概念来自于抽象代数,比如对于一元函数来说,满足如下条件:
f(f(x)) = f(x)即可称为满足幂等性。在计算机科学中,一个操作多次执行和一次执行的影响相同,这样的操作即符合幂等性。在分布式的系统中,服务消费方调用服务提供方的接口,多次调用的结果应该与一次调用的结果相同,这就是分布式环境下的幂等性的语义。为什么都在强调幂等性?因为分布式服务系统有可能因为网络不稳定原因导致一个服务的接口被重复调用,避免产生未知的异常。

考虑如下场景是否要保证幂等性:
a.运营发起打款操作,由于网络原因或者重试机制,重复打款了;
b.提交表单,由于浏览器卡顿,用户多次点击提交按钮导致重复提交;
经过分析可知上面两种场景必须保证幂等性,不然会造成系统的数据异常。我们再从数据库的操作层面分析上面的两种场景,都是写操作,于是我们可以分析得出数据库的CRUD有如下特点:
新增:不具备幂等性
查询:天然具备幂等性,因为查询不会影响数据库里的任何结果
修改:不具备幂等性
删除:具备幂等性

那如何解决幂等性呢?

1,全局唯一ID
根据业务生成全局唯一的ID,调接口的时候传入该ID,服务方会从存储系统查询是否存在这个ID,如果不存在则可调用接口,否则拒绝本次请求。
2,利用数据库的去重
如在mysql中设置关键属性为UNIQUE,当业务中重复插入的时候,抛出唯一约束异常,操作就会回滚。
3,状态机控制
适合在有状态机流转的情况下,比如订单的创建和付款,订单的创建肯定在支付之前,这样可以添加一个int类型的字段表示订单的各个状态,创建为0,付款成功为100,失败为99,则更新订单的语句可以如下表示:
update order set status=#{status} where id=#{id} and status<#{status}
4,插入或者更新
在mysql中有个功能是存在则更新,不存在则插入,即在insert into语句后跟上on duplicate key update,mysql会判断插入语句的主键值和数据库现有的记录是否重复,如果重复,则会修改原有的记录,不重复则添加一条数据。

相关文章

  • 接口的幂等性的N种考虑

    分布式服务接口的幂等性如何设计 什么是幂等性 一个分布式系统中的某个接口,要保证幂等性,该如何保证?这个事儿其实是...

  • 分布式服务的幂等性的个人见解

    概念 幂等的概念来自于抽象代数,比如对于一元函数来说,满足如下条件:f(f(x)) = f(x)即可称为满足幂等性...

  • 幂等性

    理解 HTTP 幂等性(15')系统幂等以及常用实现方式(10')分布式系统互斥性与幂等性问题的分析与解决(30')

  • 接口设计的幂等性考虑

    分布式系统接口幂等性 1.幂等性定义 1.1 数学定义 在数学里,幂等有两种主要的定义:- 在某二元运算下,幂等元...

  • JAVA开发知识点集合

    分布式 分布式系统学习资料(ing) 理解HTTP幂等性消费幂等 Dubbo Dubbo架构设计详解 跨域 关于跨...

  • 分布式服务 API 的幂等设计方案 & Spring Boot

    分布式服务 API 的幂等设计方案 & Spring Boot + Redis 拦截器实现实例 什么是幂等? 简...

  • 分布式服务接口幂等性

    接口幂等性问题产生的原因: 假如有个服务提供一个接口(服务部署在多个服务机器),接着有个接口是付款接口。用户在前端...

  • 幂等性

    1.幂等性 幂等性是分布式环境下常见的问题;幂等性指的是多次操作,结果是一致的。(多次操作数据库数据是一致的。)常...

  • 美团-分布式系统互斥性与幂等性问题的分析与解决

    分布式系统互斥性与幂等性问题的分析与解决

  • 高并发下接口幂等性解决方案

    一、幂等性概念 二、分布式系统 中的幂等性 在编程中,一个幂等操作的特点是其任意多次执行所产生的影响与一次执行的影...

网友评论

      本文标题:分布式服务的幂等性的个人见解

      本文链接:https://www.haomeiwen.com/subject/pnpzhctx.html