高并发开发??

12-02-02 javawebkaifa
                   

最近看了论坛中很多关于高并发的文章,感触很多,现在我在公司就在搞后台服务器,我们使用的是ICE来进行集群管理,但是发现并发效果还一般,我觉得这样不够,就看我看到文章里说的,以后高并发是发展的趋势和潮流,我看了下“LMAX架构”,可以处理这样大的并发量,我有点不明白的就是“内存领域对象+事件驱动”,这个内存领域+事件驱动是一个什么样的东西?这个问题迷茫我好久了。我一直不明白?请明白的朋友们给我讲解下,谢谢!

                   

20
banq
2012-02-02 17:48

2012年02月02日 17:12 "@javawebkaifa"的内容
我有点不明白的就是“内存领域对象+事件驱动”,这个内存领域+事件驱动是一个什么样的东西 ...

说起来话很长,说白了简单一句:让你的业务模型直接在计算机内存中同时跑起来。

谈到纯粹性能提升,有很多方式,比如CDN 云计算 集群 负载平缓 分布式缓存等等,所有这些都缺一个重要环节:业务模型。

没有业务模型分析设计的性能优化都是粗粒度的,都是浪费资源,所以,很多人看到这个问题,比如一台服务器按照一般优化只能跑1000个,如果10万个并发用户怎么办,总不能架无限个服务器吧,所以有人提出耗费资源少的技术,比如C/C++,这些都和其他方案一样就技术谈技术。

其实如果仔细考虑你的业务模型,你会发现通用技术开发出的技术平台太浪费了,就象你只是三口人,却给你一栋500平方的别墅,不节能也不环保,过去皇帝自己寝室也只是10个平方左右。理解了你的业务模型,你就可以量身定做一套技术架构。

内存领域对象+事件驱动 = 量身定做一套技术架构。

具体情况,可见jivejdon源码

[该贴被banq于2012-02-03 08:11修改过]

javawebkaifa
2012-02-03 09:01

非常感谢banq的回答:

我看了回复,我大概明白基于高并发的设计,不完全是从技术上来实现,你要高并发高发,肯有有好的代码,好的代码怎么来了?当然从好的设计来,那就是业务模型,就还是领域的抽象,我这样吗?有了好的前期领域设计,才肯有不浪费任何资源,进行合理的运用所有的资源。

但是我同时又不明白一个问题,还是“内存领域对象+事件驱动” ,让你的业务模型直接在计算机内存中同时跑起来。这句话,我听懂了一半,我的认为是“在业务在内存中跑起来”我明白了,这样程序很快,是很有利,但是让所有业务在内存中跑起来,这样对内存的压力。。。。。情况,也会有很大的负面影响,关于这个“让你的业务模型直接在计算机内存中同时跑起来”的技术实现,我暂时还不清楚,我还在学习中,单说从“让你的业务模型直接在计算机内存中同时跑起来“这句话来分析,我也会考虑内存方面的原因,其实我们在分析的领域设计的时候,在做抽象的时候,也会考虑真实实现的难点吧!不可能从领域的角度来进行设计好了,单说在技术实现的时候,发现技术上是不好实现的,这样也不是一个成功的软件设计吧(我认识有限),我觉得领域设计,它是一个自然的,无形的思想,让我们设计分析设计的很符合大自然的规律变化,单说最后还是要实现,那在领域设计时候,是不是也要考虑技术的实现了??

banq
2012-02-03 09:59

2012年02月03日 09:01 "@javawebkaifa"的内容
其实我们在分析的领域设计的时候,在做抽象的时候,也会考虑真实实现的难点吧 ...

是的,见不变性设计,DDD将对象分为实体和不可变的值对象,从分析源头就给了你最优化的性能设计,当你确定一个对象是不可变的,那么其占据资源就很少,而且在计算机内存中运行就最快;反之,你不能确定一个对象的可变或不可变,计算机就可能缺省以可变对待它,结果相当于三个人住500平方大别墅了。

这一特点在新的语言Scala上尤其明显,Scala变量缺省是不可变。

所谓可变与不可变,从平时具体语言使用细节上可知:数组长度是不可变,所以数组快,使用集合初始化如果确定长度性能据好等等,其中道理也孕育着可变与不可变的取舍中。

引用一句话:Many concurrent algorithms are very easy to write with a GC and totally hard (to down right impossible) using explicit free 许多并发算法如果使用GC(自动垃圾回收如Java)将会容易编写,而是采取显式的内存释放(如C)将几乎是不可能的。

相关主题:

领域驱动设计的讨论

[该贴被banq于2012-02-06 09:22修改过]