转一个大牛对分布式系统和cqrs的反思文章

我领悟到的基本思想是:
1、大部分应用不需要分布式系统
2、分布式系统遵循cap原理,要么失去A,要么失去P
3、cqrs和eda是适用于分布式的理论和模式,一切基于事件和消息的模式和架构都是最终一致性,很难做到严格的事务。
4、我们大部分的应用无法具体应用cqrs,但可以借鉴其思想。我所在公司的应用就是拍卖,对事务有严格的要求。
5、所有的系统都可以部分地、局部地应用事件和消息架构,如cqrs和eda

简言之,cqrs/eda/ddd有其适用的领域,不是万能的

2010年12月04日 13:41 "niyunjiu"的内容
大部分应用不需要分布式系统 ...

我还以为是大牛的观点,仔细看看是你的领悟,个人认为不是很深刻,
只要是WEB系统,一般就是分布式系统,为什么呢?只要表现层和业务层在不同机器上运行,比如最少是两个,一个是客户端浏览器运行表现层和JS;另外一个是服务器,运行业务层程序。这实际就是一个分布式系统。

现在我们大多数应用都是Html+JS + APACHE + Tomcat,虽然Apache+Tomcat在一台机器上,实际上是分开的系统,所以,谈到分布式,不要就想到2台以上服务器硬件,只要你是简单的B/S或C/S分层架构,它就是分布式系统。

这种分布式是客户端和服务器的分布式,过去我们认为两台服务器以上的分布式才有花头,忽略了客/服的简单分布式,因为以前没有富客户端,现在都是JS等富客户端流行时代,不能简单把客/服分布式不当分布式了,客户端有时也要运行复杂的表现显示相关逻辑。根据我个人经验,很多分布式设计思想在这里有应用,比如异步计算,聚合输出等。

从另外一个角度看:任何系统都是分布式的观点,可以树立我们切分系统,重视可伸缩性的设计,我们将我们系统切分在可在多台服务器上运行的组件或部分,虽然一开始我们是在一台服务器上运行,但是实际上这已经是分布式观点。

所以,如果你的软件架构是一个分布式,运行部署可合可分,这不是达到了孙悟空百变的目的吗?

我们讲的概念有偏差,你把分布式的概念扩展了,不是我们通常认为的分布式了。可以把你说的分布式称为广义的分布式。根据你的说法,只要通过计算机网络的系统都是广义的分布式系统。

那我纠正一下,这篇文章和我所指的是传统的狭义的分布式。
分布式是指功能上的,比如分布式调用。apache+tomcat不叫分布式,那指是布署上的。没有apache,tomcat照样单独运行。至于客户端,客户端是我们的消费者,我们为他们提供服务,把客户端看做分布式,我觉得没多少道理,因为客户端的行为我们不能完全控制,比如一个客户下订单,流程走到一半,他把浏览器关掉睡觉去了。把客户端纳入分布式,不便于讨论问题。
[该贴被niyunjiu于2010-12-05 19:45修改过]

个人认为分布式,并不是说以功能上的分布式调用,相反我认为apache+tomcat是个典型的分布式架构。为什么呢? 分布式应当指的是分别部署方式。侧重于部署,而不是功能和调用。因为你部署到了不同的服务器,其实就决定了你的调用方式。
您认为呢?

如果是指部署,那apache和tomcat部署在一台电脑上呢?那我不用apache呢?

电脑是不是一台,这个对分布式架构说是不是关键的。JVM不是一个。