弱一致性在现实世界中到处存在
DZone:弱一致性在现实世界中到处存在谈的是CAP定理和最终一致性(弱一致性:Eventual consistency)。又是一篇摆脱关系数据库阴影的檄文。大意如下:
存储类语言给了我或其他成千上百万LAMP开发者一个误导,那就是偏向于即时性一致性(高一致性:immediate consistency)模型,每次Http请求都是一个事务,每个表每一行都要立即更新,每次改变都要所有状态立即切换。
今天我们看到NoSQL数据库运动经常提到最终一致性(弱一致性),大家也在向消息队列message queue转变,或向EDA事件驱动架构和异步编程模型转变。
这些概念都将程序开发带到了一个新的真实世界。
我们的数据被不同项目运行在不同服务器上,被不同的人使用,最终一致性是唯一适合这些场合的可伸缩可扩展的设计,当然我的意思不是要一个CPU支持一百万用户,而是不要让你的一个页面要等待60秒才能加载(banq注:延迟性)。
过去,所有的一切都是写在纸上的假象,至少过去几十年一直如此,即时一致性是IT人发明的,他们纸上谈兵地认为:不同组织不同地方的数据如果没有即时一致性(高一致性)几乎不可能的。
....
Amazon推荐:Amazon的商品购买模式是一个巨大的用户/产品关联矩阵,立即全部更新几乎是不可能的,每次一个商品被购买这个页面将被锁住(banq注:这可能是前段时间我在京东商城购买进入购物车后出现无法连接的问题所在)。
那么,Amazon如何在同一个时间销售数百商品同时生成带有推荐的专有页面呢?,只有一个简单办法:缓存层。
每一个缓存都是基于最终一致性,当然要排除下面情况,当缓存失效必须确定性的,缓存的最终一致性和NoSQL一致性区别是:过段时间缓存将失效,你能够缓存一个HTML页面10秒,但是CouchDB的内容总是有效,即使这个数据结果非常陈旧被丢在什么旮旯,通过CouchDB查询都能通过无等待的堵塞获得,无需再重新计算后缓存。
[该贴被admin于2011-11-12 09:38修改过]