`
rensanning
  • 浏览: 3515179 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37505
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604415
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:678191
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87346
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399876
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69090
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90521
社区版块
存档分类
最新评论

基础知识 - 系统设计的幂等性

 
阅读更多
幂等(idempotence)本来是一个代数中的概念。说的是,x为某集合内的任意数, f为运算子,如果满足f(x)=f(f(x)), 那么称f运算具有幂等性(idempotent)。比如: abs(a)=abs(abs(a))。

在计算机方面用来表示对同一个过程应用相同的参数多次和一次调用产生的效果是一样的,这样的过程被称为满足幂等性。系统接口对外的一种承诺,不用担心重复执行会对系统造成改变。

电商系统,支付系统中幂等性尤其重要!

(1)HTTP的幂等性

HTTP/1.1规范中幂等性的定义:
引用
Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.

https://tools.ietf.org/html/rfc2616#section-9.1.2

同一个请求,发送一次和发送多次效果一致。强调的是一次和N次效果(对系统的改变)是相同的,但不是每次的结果相同。

  • GET, HEAD 幂等且安全
  • PUT, DELETE 幂等但不安全
  • POST 既不幂等也不安全
*** 安全指的是不会修改资源

重复提交、定时任务、异步处理等都需要考虑幂等性。

(2)REST的冪等性

使用相同参数对同一资源重复调用的结果与调用一次的结果相同。一般,同一个URL返回的资源一定是一致的。

(3)分布式系统接口的幂等性

幂等性是分布式系统设计中十分重要的概念。

首先需要知道retry的必要性:
  • -对方服务器宕机
  • -对方程序负荷太高无应答
  • -内存消耗太大无法立即处理
  • -数据传输过程中出错

网络的不可靠性造成了系统间调用除了成功和失败外,有了第三个状态:超时。

(4)运维工具的冪等性

模块的执行具有幂等性。比如,自动化配置管理工具(Chef、Puppet、Ansible)

(5)如何保证幂等性
  • 请求唯一标识(Synchronized Token、Idempotent Receiver)
  • 事务(分布式事务)
  • 锁表(MVCC多版本并发控制,采用乐观锁通过version或updateTime等条件保证更新操作)
  • 消息队列

参考:
http://www.infoq.com/cn/news/2013/05/idempotent
http://www.cnblogs.com/weidagang2046/archive/2011/06/04/idempotence.html
http://frsyuki.hatenablog.com/entry/2014/06/09/164559
分享到:
评论

相关推荐

    分布式事务实践 解决数据一致性

    除此以外还介绍了一些分布式事务相关的技术,如幂等性、全局一致性ID、分布式对象等。... 6-1 分布式事务介绍 6-2 spring分布式事务实现_使用JTA 6-3 spring分布式事务实现_不使用JTA 6-4 实例1-DB-DB 6-5 实例1-DB-...

    数据结构(C++)有关练习题

    实验一 复习C++有关知识 实验目的: 通过实验掌握下列知识: 1、复习C++有关基本知识; 2、熟悉VC编程、编译和调试环境; 内容及步骤: 编写一个类Complex,定义复数的加法、减法、乘法和除法运算,...

    计算机基础教学设计.doc

    《计算机基础——冯·若依曼思想》教学设计 一、教材分析 本知识点为补充学习内容。主要介绍计算机的组成、工作原理以及信息的数字化表示 。本内容不是新课内容,主要以知识的传授即概念和原理的介绍为主。 二、教学...

    算法导论中文版

    第一部分 基础知识 第1章 算法在计算中的作用  1.1 算法  1.2 作为一种技术的算法  思考题  本章注记 第2章 算法基础  2.1 插入排序  2.2 分析算法  2.3 设计算法  2.3.1 分治法  2.3.2 分析分治...

    算法导论(part2)

    在不改动数学和分析重点的前提下,作者将第1版中的许多数学基础知识从第一部分移到了附录中。 二、本书的特点 本书在进行算法分析的过程中,保持了很好的数学严谨性。书中的分析和设计可以被具有各种水平的读者所...

    算法导论(part1)

    在不改动数学和分析重点的前提下,作者将第1版中的许多数学基础知识从第一部分移到了附录中。 二、本书的特点 本书在进行算法分析的过程中,保持了很好的数学严谨性。书中的分析和设计可以被具有各种水平的读者所...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

    《数字图像处理》冈萨雷斯 中文+英文 pdf

    第2章数字图像基础知识57 2.1视觉感知的要素58 2.1.1人眼结构58 2.1.2眼睛中的图像形成60 2.1.3亮度适应和歧视61 2.2光和电磁谱65 2.3图像传感和采集68 2.3.1使用单个传感器进行图像采集70 2.3.2使用传感器条带获取...

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    全书分为2个部分共10章,内容涵盖了编程必备的基础知识(如数据结构、常用算法等),编程实例介绍,常见算法和数据结构面试题等。可以使读者开阔眼界,提高编程的兴趣,提高读者的编程能力和应试能力。 目录: 第1...

    C#全能速查宝典

    分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用的属性、方法、类和各种技术,...

Global site tag (gtag.js) - Google Analytics