Swift里的CAP理论和NWR策略应用
来源:互联网 发布:python做自动化测试 编辑:程序博客网 时间:2024/05/21 10:50
最近有人讨论到swift副本数是否能够调整,3副本成本过高,如果改成2副本怎么样?多聊了几句以后发现不少人可能都是望文生义,简单的认为副本数只是多一个少一个Copy的问题,并不了解背后的理论依据。所以想写个简单的介绍,普及分布式系统设计的一些基础知识点。这个是按傻瓜版写的,已经知道的同学请自动无视。
原文是A
策略来说就有具体的公式可供运算,有两个:
我们结合Swift的设定,N=3,W=2,R=2(or
分布式系统通常用来处理大并发请求的应用,很多请求大家同时来,有一堆在读,也有一堆想写。
假设有一个数据拥有三副本,每个副本已经同步好,原来的值都是A
我们看看如果不需要满足公式让W小于3/2,也就是W=1的情况下会出现什么问题,W=1,意味着每个写的请求只要写完一个副本即可成功返回。
假设两个进程同时来更新这份数据,进程W1要把值改写成C,进程W2要把值改写成B,那就有可能出现下图的情形,两个进程各拿到一个副本改写,都认为自己的写操作是成功的,结果却留给系统三个不同的副本,这样就出现数据副本不一致的问题。
当然NWR还可能取其他值,不同的取值代表了不同的倾向。如果设定N=3,
N=3,
CAP理论和NWR策略在大规模系统下是比较合理的,除了被用来设计分布式存储之外,也用来设计分布式数据库,比如很热的NOSQL。另外,这个理论问世已经不短的时间,也经常看到有人发文要挑战他,也有一些吐槽等等,那个是另外的话题,这里就不再继续了。
最近我一个朋友在网上购物,遇到一件有意思的事,某电商有个特价抢购,是个手机移动电源,他就很happy下了单,结果第2天送来了两瓶酱油。回头看订单详情,明明还是移动电源。再看促销,原来的促销已经变成了酱油。我们可以用前面的理论模拟下问题是如何产生的。朋友在查看商品的时候,他的这个会话,假设读到的库存数据是1,意思就是有货,就放到购物车里了。但同时估计也有很多人在查询,读到的数据都是1,大家都认为有货。除了我朋友,至少还有一个人也下了单,下单就需要后台需要将这个库存数据减去1,常见的逻辑应该是改写库存成功才能生成订单。如果设定的W是1,那么两个会话就会有机会都认为自己成功,两个订单同时生成,但货只有一个了,导致问题出现。
至于如何变成酱油的,我不太想猜测,这件事本身实在是太搞笑了,我想起他拆开包裹的样子就想笑哈哈哈。
- Swift里的CAP理论和NWR策略应用
- Swift里的CAP理论和NWR策略
- CAP理论的应用分析
- CAP理论和Base理论
- CAP和BASE理论
- CAP和BASE理论
- CAP和BASE理论
- CAP和BASE理论
- Brewer的CAP理论
- CAP 理论的理解
- CAP 理论的理解
- CAP理论的理解
- CAP理论,ACID和BASE
- CAP理论,ACID和BASE
- CAP理论和ACID模型
- 数据库ACID和CAP理论
- CAP理论概述和现状
- CAP理论和BASE模型
- HTML5:移动互联网时代的黑天鹅
- Android Root方法原理解析及Hook(三) FrameworkListener漏洞
- Android中的Handler总结
- ubuntu 14.04配置DHCP服务器
- JavaFX之FXController详解
- Swift里的CAP理论和NWR策略应用
- listView 与自定义checkBox 实现多选效果,并记录多选的结果(左文字,右图片)
- ADT下Android项目不生成.apk文件
- ios代码
- 进程与线程的趣味讲解
- 详细分析java中断机制
- java 回调
- CFileFind用法
- 数组作为函数形参