文档章节

电商课题:幂等性

旁观者-郑昀
 旁观者-郑昀
发布于 2012/11/24 14:06
字数 810
阅读 135
收藏 7
@郑昀汇总
关键词:
idempotency,BASE,

一. 断言:
幂等性的数学表达:f(f(x)) = f(x)。
幂等性是系统接口对外的一种承诺。
幂等性指的是,使用相同参数对同一资源重复调用某个接口的结果与调用一次的结果相同。
幂等性的一个实现是,使你的接口必须返回 0(成功),即使这时资源或动作已经停止并且无工作要完成。

二. 电商常见问题:
2.1. 如何防范 POST 重复提交
HTTP POST 操作既不是安全的,也不是幂等的(至少在HTTP规范里没有保证)。
当我们因为反复刷新浏览器导致多次提交表单,多次发出同样的POST请求,导致远端服务器重复创建出了资源。 
所以,对于电商应用来说,第一对应的后端 WebService 一定要做到幂等性,第二服务器端收到 POST 请求, 在操作成功后必须302跳转到另外一个页面,这样即使用户刷新页面,也不会重复提交表单。
2.2. 集群环境下的定时任务幂等性
分布式环境下,定时任务或异步处理如何保持幂等性?

三. 把分布式事务分解为具有幂等性的异步消息处理:
电商的很多业务,考虑更多的是 BASE(即 Basically AvailableSoft state、和 Eventually consistent),而不是 ACID(Atomicity、Consistency、Isolation和 Durability)。即为了满足高负载的用户访问,我们可以容忍短暂的数据不一致。
那怎么做呢?
第一,不做分布式事务,代价太大。
第二,不一定需要实时一致性,只需要保证最终的一致性即可。
第三,“通过状态机和严格的有序操作,来最大限度地降低不一致性”。
第四,最终一致性(Eventually Consistent)通过异步事件做到。
如果消息具有操作幂等性,也就是一个消息被应用多次与应用一次产生的效果是一样的话,那么 把不需要同步执行的事务交给异步消息推送和订阅者集群来处理即可。假如消息处理失败,那么就消息重播,由于幂等性,应用多次也能产生正确的结果。
实际情况下,消息很难具有幂等性,解决方法是使用另一个表记录已经被成功应用的消息,即消息队列和消息应用状态表一起来解决问题。

参考资源:
1)weidagang2046,博客园, 理解HTTP幂等性
2)相关设计模式“Synchronized Token(简而言之,就是客户端的每一次 Request 里,必须携带一个服务器端给出的 Hash Code 作为 Token,这个 Token 只能用一次,不能重复使用) ”和“幂等接收器,Idempotent Receiver ”;
3)针对 POST ,请参考  HTTPLR(由Bill de hÓra提出)、 Mark Nottingham的POE(POST Once Exactly)和Paul Prescod的 HTTP中的可靠传递。(另一个值得一提的是Yaron Goland的 SOA-Rity);
4)淘宝核心系统团队博客,2010, 用消息队列和消息应用状态表来消除分布式事务

© 著作权归作者所有

旁观者-郑昀
粉丝 100
博文 77
码字总数 162700
作品 0
朝阳
私信 提问
关于 Multiget hole:spymemcached对此的实现方法

火丁说: 『 Multiget的无底洞问题 Facebook在Memcached的实际应用中,发现了Multiget无底洞问 题,具体表现为:出于效率的考虑,很多Memcached应用都已Multiget操作为主,随着访问量的增加,...

旁观者-郑昀
2013/02/08
127
0
spymemcached 的 useNagle 问题与 TCP/IP延迟发送数据

先说一下结论。 如果你没有特意在 spymemcached 的 client bean definition 里配置 useNagleAlgorithm 属性为 True, 那么默认 spymemcached 是不启用 Nagle 算法的。 所以默认情况下不会引发...

旁观者-郑昀
2013/02/08
167
0
spymemcached :某个mc节点操作连续超时超过998次就 Auto-Reconne...

spymemcached 中,一个 mc client 与某一个 mc node 之间已建立的 connection 上, 如果执行操作屡屡超时(net.spy.memcached.OperationTimeoutException), 那么,有一个计数器专门记录超时...

旁观者-郑昀
2013/02/08
162
0
中国电子商务区块链规范发展中心将成立。

中国电子商务区块链规范发展中心隶属于工信部主管中国电子商务协会中国电子商务应用推广中心,是"中国电子商务新经济产业发展课题组"的重要职能机构,致力于规范区块链市场环境、开展区块链技...

二进制财经
2018/07/03
0
0
如何理解TCC分布式事务

"TCC是分布式事务实现的一种方式 TRYING 阶段主要是对业务系统做检测及资源预留 CONFIRMING 阶段主要是对业务系统做确认提交,TRYING阶段执行成功并开始执行CONFIRMING阶段时,默认CONFIRMIN...

芝麻绿豆
2016/07/26
4.2K
4

没有更多内容

加载失败,请刷新页面

加载更多

83、Mybatis和Hibernate重要区别

Mybatis;入门简单,程序容易上手开发,节省开发成本。Mybatis需要程序猿自己编写sql语句,是一个不完全的ORM框架,对sql修改和优化非常容易实现。 Mybatis适合开发需求变更频繁的系统,比如...

lianbang_W
今天
5
0
设计模式之状态模式

定义 Allow an object to alter its behavior when its internal state changes.The object will appear to change its class.(当一个对象内在状态改变时允许其改变行为,这个对象看起来像改...

陈年之后是青葱
今天
6
0
Python常用模块之os.path

os.path.abspath(path) 输入相对路径,返回绝对路径 Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32Type "copyright", "credits" or "lic......

松鼠大帝
今天
11
0
001. JAVA程序运行原理分析

1. 先来看看JVM运行时数据区的结构 线程独占: 每个线程都有它独立的空间,随线程生命周期而创建和销毁。 线程共享: 所有线程能访问这块内存数据,随虚拟机GC 而创建和销毁。 JVM 用来存储加载...

紫穹
今天
24
0
SDN核心思想&Mininet

2.1ONF定义的SDN基本架构: 应用层:实现网络流量的灵活控制,使网络作为管道智能 控制层:网络虚拟化实现方式,核心技术OpenFlow 转发层新型创新架构,实现网络设备控制与转发分离 2与3之间...

Firefly-
昨天
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部