电商课题:幂等性

标签: 电商 幂等 | 发表时间:2012-11-22 23:52 | 作者:旁观者
出处:http://www.cnblogs.com/zhengyun_ustc/
@郑昀汇总
关键词:
idempotency,BASE,
 

一. 断言:

幂等性的数学表达:f(f(x)) = f(x)。
幂等性是系统接口对外的一种承诺。
幂等性指的是,使用相同参数对同一资源重复调用某个接口的结果与调用一次的结果相同。
幂等性的一个实现是,使你的接口必须返回 0(成功),即使这时资源或动作已经停止并且无工作要完成。
 
二. 电商常见问题:
HTTP POST 操作既不是安全的,也不是幂等的(至少在HTTP规范里没有保证)。
当我们因为反复刷新浏览器导致多次提交表单,多次发出同样的POST请求,导致远端服务器重复创建出了资源。 
所以,对于电商应用来说,第一对应的后端 WebService 一定要做到幂等性,第二服务器端收到 POST 请求, 在操作成功后必须302跳转到另外一个页面,这样即使用户刷新页面,也不会重复提交表单。
2.2. 集群环境下的 定时任务幂等性
分布式环境下,定时任务或异步处理如何保持幂等性?
 
三. 把分布式事务分解为具有幂等性的异步消息处理:
电商的很多业务,考虑更多的是 BASE(即Basically Available、Soft 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, 用消息队列和消息应用状态表来消除分布式事务

本文链接

相关 [电商 幂等] 推荐:

电商课题:幂等性

- - 博客园_旁观者
幂等性的数学表达:f(f(x)) = f(x). 幂等性是系统接口对外的一种承诺. 幂等性指的是,使用相同参数对同一资源重复调用某个接口的结果与调用一次的结果相同. 幂等性的一个实现是,使你的接口必须返回 0(成功),即使这时资源或动作已经停止并且无工作要完成. 防范 POST 重复提交. HTTP POST 操作既不是安全的,也不是幂等的(至少在HTTP规范里没有保证).

HTTP幂等性概念和应用

- rockmaple - 酷壳 - CoolShell.cn
[ 感谢 Todd 同学投递本文 ]. 基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式. 无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多的SOA或RESTful的Web API. 为什么Web API如此流行呢. 我认为很大程度上应归功于简单有效的HTTP协议.

创建订单实现幂等的一点思考

- - 文章 – 伯乐在线
大部分文章都会说,同一个操作,进行多次操作后,结果是一样的,就可以说这个操作是支持幂等的. 感觉不太准确,比如一个http get操作,可能每次的结果都不一样,但是其实是幂等的. 看了很多文章,感觉下面的定义比较准确:. 一个操作如果多次任意执行所产生的影响(或者叫副作用),都是相同的. 如果一个用户分两次下单,购买的商品都是一样的.

高并发的核心技术-幂等的实现方案 - 无量的IT生活 - ITeye博客

- -
高并发的核心技术-幂等的实现方案. 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;.

电商之城

- 可可 - 《商业价值》杂志
原产地效应正在点亮越来越多的电商之城,这代表着电子商务正在逐步回归“商务”的本质. 从机场拿一份免费的手绘地图,和着有点潮湿的空气,足够开启对厦门这座海滨城市的造访. 从市中心到达位于厦门东北方向的软件园二期,只用了不到20分钟. 对于一个习惯了北京的拥堵和密集的人来说,一座被出租车师傅将半小时车程定义为“还挺远”的城市,从一开始就带给人惊喜.

谈电商平台

- - 人月神话的BLOG
一个完整的电商平台模块本身应该如何划分,可以从两个维度来进行思考,一个维度是本身电商的端到端业务和流程角度出发,可以分为哪些大的阶段,每个大阶段可对应为模块;另外一个维度则是从电商业务中的核心主数据和业务单据出发,围绕数据来考虑模块的划分. 电商平台核心模块从基础数据层面包括了产品管理,客户管理,供应商,经销商管理,在产品和供应商管理中可能又会拆分单独的价格库模块,维护产品价格和价格策略信息.

腾讯电商帝国

- 以外 - 互联网的那点事...
腾讯宏伟的电子商务战略开始逐渐浮出水面. 5月30日,腾讯正式对电子商务业务的内部组织架构进行重组,机构更加复杂全面的电子商务业务线取代了原来的电子商务部,同时进行近十位中、高层管理人员的职位变动及内部人员的调整. 同时,腾讯一直在电商领域全面出击,通过投资进行战略布局. 从今年年初至今,腾讯以超乎想象的速度战略入股了数家电子商务企业,包括已经对外公 布的好乐买、易讯、F团以及数宗尚未对外公布的收购案.

BAT的电商江湖

- 果 - It Talks-魏武挥的blog
大部分数字产业中人都认同,BAT代表的是中国商业江湖中超一流数字公司. B(Baidu,百度)做的是资讯的渠道,A(Alibaba,阿里)做的是商务的渠道,T(Tecent,腾讯)做的是交流的渠道. 而在BAT中,我以为,B和A的模式是类似的. 与腾讯一门心思兜售各种虚拟产品给用户不同(腾讯的用户即它的客户),百度和阿里都是靠帮助别人发财从而自己发财的公司.

【电商微博指数】淘宝、拍拍 vs 独立电商

- MooM - 36氪
编者按:本文来自@阿力克狮的投稿,阿力克狮是做啥网的联合创始人. 几天前发布电商微博指数分析之后,有人问为什么没有淘宝. 这里对电商平台淘宝,拍拍和独立电商之间进行一些量化研究,了解他们影响力的相对大小. 在新浪微博上,淘宝一家独大,拍拍基本消失,独立电商微博总和约占30%. 在腾讯微博上,淘宝和拍拍平分秋色,共占90%.

电商导购那点事儿

- Avenger - 白鸦,Blog
最近行业内最暗潮涌动的领域应该数“推荐购物、购物搜索、购物社区”等等围绕导购这同一类方向的东西,光我身边认识的,又大概听过他们想法的,而且还比较有实力的,都不下6家,其中包括N个大佬,有的还没开始就融到第二轮了. 其他只是听说的,团队不错或者事情已经有些成绩了的,也有个10家. 必定会出手的腾讯、360也都还没宣布动作.