急什么?!君不闻Servlet3.0带来了异步的脚步声?

各位不要对异步这么急。
异步是早晚要到来地,请等待java为我们带来的标准...
[该贴被atester于2009-12-18 12:41修改过]

无论底层平台如何异步,我们追求的是业务上的异步,模型的异步,而只有针对性的模型或者业务的异步才算是真正的异步。

Java标准太慢了。

现在Web Socket在Chrome最新版引入,Web Sockets是长连接,可以实现服务器端的真正推机制,而Servlet 3.0的推机制还没有使用到Web Sockets这种新方式,目前已经有的方式是很晦涩,我认为是一种变相的拉。

Servlet也对REST视而不见,这恐怕是他落后的另外一个致命原因。

Servlet从本质上还是同步,是多线程机制,这种机制最大问题是需要解决共享资源争夺问题,锁是同步的致命问题,也是性能的致命缺点和天花板,而异步可以巧妙地回避锁。

关于异步模式的好处太多了,实际上,关键是我们很多人没有认识到Web系统本质是一个分布式系统,B/S本质是一个分布式系统,现在有两种极端思维:

第一种:JavaEE的思维还是在做强服务器端,弱化客户端,总是认为客户端太慢,大包大揽,把客户端应该做的事情都包揽到服务器端,包括页面显示计算(JSP技术),甚至客户端状态httpSession都保存到服务器端,结果服务器端被客户端绑架,服务器集群环境需要做session stick,服务器很难做到完全面向业务。而且,服务器端还会被关系数据库绑架,形成集中式编程思维,导致系统整体系统很难做到高可伸缩。

第二种:传统的Windows编程人员正好相反,信赖客户端,弱化服务器端,如C/S游戏 QQ等,尽量少通讯,总是假设网络可能断或速度慢。Web 1.0时代也是这种思维,总是把动态网页搞成静态,丧失动态性。

这两种思维都有偏颇,没有从分布式整体去看到Web。如果我们认为Web天生就是一个分布式系统,我们需要的是一种基于分布式CAP和BASE思想的灵活的可伸缩的架构标准。

新的开发时代我好像感觉就要来了,REST和云计算已经先行一步。

[该贴被banq于2009-12-18 15:06修改过]

非常凑巧,看到一篇文章:Comet is dead long live websockets一文提出这个观点。

Servlet 3.0支持的Comet已经死了,未出身就胎死腹中。

作者使用最新的google chrome浏览器已经实现了Web sockets,他能够使用异步消息机制让Erlang和Web网页对话。

当然作者还认为下面一些技术都会死掉:
comet
long-poll
AJAX
keep-alive sockets

所有上述做法只是黑客手法,因为以前浏览器不能自然支持异步通信。
当前的AJAX带来巨量负载以及复杂的Http头文分析。

推数据到客户端多年来一直一塌糊涂,long-poll 和 comet其实在走弯路,实际还是拉机制。

作者还用erlang举例子如何实现真正的推机制。


各位大牛都在说异步怎么好,怎么好,我觉得也是,但是异步的基础是啥,没有同步哪来的异步!!!

2009年12月18日 12:55 "xmuzyu"的内容
无论底层平台如何异步,我们追求的是业务上的异步,模型的异步,而只有针对性的模型或者业务的异步才算是真正的异步。

servlet应算表现层,表现层异步不算底层了吧?

2009年12月18日 15:18 "banq"的内容
非常凑巧,看到一篇文章:Comet is dead long live websockets一文提出这个观点。Servlet 3.0支持的Comet已经死了,未出身就胎死腹中。作者使用最新的google chrome浏览器已经实现了Web sockets,他能够使用异步消息机制让Erlang和Web网页对话。当然作者还认为下面一些技术都会死掉:cometlong-pollAJAXkeep-alive sockets所有上述做法只是黑客手法,因为以前浏览器不能自然支持异步通信。当前的AJAX带来巨量负载以及复杂的Http头文分析。推数据到客户端多年来一直一塌糊涂,long-poll 和 comet其实在走弯路,实际还是拉机制。作者还用erlang举例子如何实现真正的推机制。

websockets是模拟的活动连结吧,很好,看ie会不会跟进。
ie不跟进,只能做上网本儿和部分智能手机...

2009年12月18日 18:05 "0lhw0"的内容
各位大牛都在说异步怎么好,怎么好,我觉得也是,但是异步的基础是啥,没有同步哪来的异步!!!

异步没有那么多好处,最大的好处无非是解决在高并发而硬件有限的情况下,如何给客户相对快速的响应吧?

排除这个目的以外,还是同步好。同步不用准备回调函数。

comet
long-poll
AJAX
keep-alive sockets

第一和第二,没听说过呀。
[该贴被atester于2009-12-19 09:19修改过]

2009年12月18日 21:22 "atester"的内容
2009年12月18日 12:55 "xmuzyu"的言论
无论底层平台如何异步,我们追求的是业务上的异步,模型的异步,而只有针对性的模型或者业务的异步才算是真正的异步。servlet应算表现层,表现层异步不算底层了吧?

哎,难道你用了Servlet3.0就算异步了,系统用了JMS就算异步了吗?关键看你的业务到底哪里需要异步,哪里不需要异步,这才是关键,从业务的角度出发去分清楚对状态一致性要求不严格的地方,然后采用BASE策略处理。总之,如果不从业务划分的角度去看异步,及时底层平台是异步的,那么你的系统也不是真正的异步系统。
[该贴被xmuzyu于2009-12-18 22:44修改过]

2009年12月18日 21:26 "atester"的内容
2009年12月18日 18:05 "0lhw0"的言论
各位大牛都在说异步怎么好,怎么好,我觉得也是,但是异步的基础是啥,没有同步哪来的异步!!!异步没有那么多好处,最大的好处无非是解决在高并发而硬件有限的情况下,如何给客户相对快速的响应吧?排除这个目的以外,还是同步好。同步不用准备回调函数。

首先,异步使得模块和模块之间松耦合,这样可以对两个不同的模块独立伸缩,同步的话,A-->B,那么伸缩A也必须伸缩B。
其次,异步化以后,可以对系统负载进行缓冲,起到消峰的作用。
再次,异步有助于实现高可用性的系统,并且现在互联网产品大多数情况下可以不需要及时一致性。这样可以采用BASE事务。

总之,一个到处充满同步的系统是很难伸缩的,如果既想高可用性,高伸缩性,又不采用异步,那么是不可能的。

2009年12月18日 22:19 "xmuzyu"的内容
2009年12月18日 21:22 "atester"的言论
2009年12月18日 12:55 "xmuzyu"的言论无论底层平台如何异步,我们追求的是业务上的异步,模型的异步,而只有针对性的模型或者业务的异步才算是真正的异步。servlet应算表现层,表现层异步不算底层了吧?哎,难道你用了Servlet3.0就算异步了,系统用了JMS就算异步了吗?关键看你的业务到底哪里需要异步,哪里不需要异步,这才是关键,从业务的角度出发去分清楚对状态一致性要求不严格的地方,然后采用BASE策略处理。总之,如果不从业务划分的角度去看异步,及时底层平台是异步的,那么你的系统也不是真正的异步系统。[该贴被xmuzyu于2009-12-18 22:44修改过]

一点也不反对你的观点,这里讨论的是如果确定需要异步的话,现在可以采用什么方式来实现异步。
当然,如果不明白哪里需要异步,不知道为什么而异步,那就逗乐儿了,例如把网站的首页做成异步,那感觉一定非常奇妙,哈哈