伯克利的教授Eric Brewer曾经做出过一个定理:所有的web服务都没有办法同时达到下面三个特性。

l  Consistency:这个容易理解

l  Availability:可用性,每次操作都能得到预想的返回结果。

l  Partition tolerance:当个别组成部分不work时候,操作本身也应该能够完成。

对于web应用程序,最多只能支持两种特性,而Partition tolerancescale out的根本之一,所以我们只能从一致性和可用性之间做一下tradeoff.有的业务需要我们放弃可用性来保持一致性,而很多业务又需要我们放弃一致性而更多的考虑可用性。Web应用应该更多的考虑可用性。所以我们的架构应该更多的思考BASE而不是ACID.简单来讲就是为了满足高负载的用户访问,我们可以容忍短暂的数据不一致。我们平常经常能够碰到这种情形。例如很多后台cache机制导致我们的更新过一段时间才能够有效。这显然不是ACID模式的特性。但是有的时候我们必须使用ACID的模式,例如我从卡里支付了5000块钱,如果你等半个小时才扣掉,这显然有问题啊。

posted on 2008-09-04 01:15  shawnliu  阅读(518)  评论(0编辑  收藏  举报