并发策略可以解决延迟

09-12-14 banq
                   

Concurrency Hides Latency一文从硬件谈到Web应用,提出“性能问题在数据,而不是代码”的观点。

作者以一篇硬件设计为例子:Brian Goetz在Devoxx09的演讲:The Concurrency Revolution: The Hardware Story(并发革命:硬件的故事)中提出“concurrency hides latency并发策略可以解决延迟”。作者认为这个道理在目前开发领域也具有普遍意义。

在硬件领域,CPU性能非常快,而内存相对慢一些,这样,硬件设计人员一直在努力减少内存延迟对计算机性能的影响。

而在Web应用领域,服务器端也存在很多延迟,因此我们在客户端做很多事情,然后通过AJAX异步调用服务器延迟后的处理结果(banq注:切身体会案例Domain Events异步应用)。比如数据库就存在处理延迟(性能比较慢),这样我们可以通过事件驱动架构EDA并发开启多个事务同时处理,隐藏了延迟带来的性能影响。

performance is about data, not code ,性能是数据的问题,不是代码问题,作者亲身经历多个软件系统的性能是由其数据访问架构决定的,相对来说:无论你采取如何自然或者优化的方式,从数据库获取数据都是耗时昂贵的,所有这一切意味着,一个关键的设计问题就是数据访问模式和应用程序使用的数据结构。

如果你需要一个快速的应用, 数据是你主要关心的, 你能够通过使用并发计算来战胜延迟。(这符合我的'独特'见解:虽然并行计算(并发策略的意思)不一定是异步,但是异步思维首先是并行计算(并发策略的意思)的开始,伸缩性和可用性反模式)。

[该贴被admin于2009-12-14 11:09修改过]

                   

5
banq
2009-12-14 13:47

发现一个很有趣的现象,在Web系统中,如果我们把客户端和服务器看成是一个分布式系统(至少有两台PC机器),那么CAP定律和BASE思想就适用了。

延迟在CAP中和一致性是反义词,低延迟表示高一致,低一致表示高延迟,因为延迟时间长了,所以,数据更新就很容易出现不一致。

CAP中可用性表示高性能,所以,我们如何获得高性能和高一致性呢?无疑降低延迟是必须的,而并发策略可以降低延迟,进而能获得高可用性,因此,可以说:并发模式是一举双得,一箭双雕的高技巧模式。

并行计算也可以看成并发模式中的一种,微观的并行计算和宏观的分布式计算都可以统一到并发模式上来。大道至简。

自说自话独特见解总结完毕。

[该贴被banq于2009-12-14 13:49修改过]

xmuzyu
2009-12-14 19:45

呵呵,万事万物规律都是一致的。要想提高可用性,需要减低一致性的要求,而减低一致性的要求,依靠同步是没有办法做到的,那这就需要引入异步,而这里的异步的程度也是有区分的,比如利用并发或者更加高效的并行这种异步模式就可以最大化的减低异步带来延迟。因此异步是一个理论,是一个概念,具体如何实现异步,可以自由发挥,并行和并发可以实现异步,或者先记录然后再处理也可以实现异步等。

banq
2009-12-15 14:05

根据我和xmuzyu的各自思考,使用下面图表达,让更多人容易理解,这是其实开启一个新世界。

虽然JavaEE 6标准昨天被公布,但是肯定不是基于这个新架构思想设计的,而且离得很远,JavaEE标准可能随着SUN一起消失,但是Java或JVM还是有强大生命,因为这种到处异步的思维已经被我们用在使用Java开发的JiveJdon上,最新版本3.9提供下载


netcasewqs
2010-04-12 14:05

2009年12月14日 10:22 "banq"的内容
并行计算(并发策略的意思) ...

并行计算和并发是完全不同的。

那CPU的并行和并发为例子。

在一个单核的PC中,并行就是并发的意思,多个任务依据优先级把CPU的时间分成一段一段,每一段都是一个Task,但是任一时刻只有一个Task运行。

在一个多核PC中,如果有多个任务,它会首先对任务进行切片(每片都有多个任务),每个CPU运行一片任务,这样多个CPU之间进行的是并行运算。

如有不对之处请指正!

[该贴被netcasewqs于2010-04-12 14:06修改过]