多层加分布时, 你就会觉得EJB有它的用处了...呵呵...

研究研究

是不是说EJB的存在主要是为了解决企业级应用的事务问题(包括分布式事务)?
而网站应用可以忽略事务安全,所以一般不用EJB?

说到底和其他架构一样,就是把所有数据放内存里,数据库就当个备份

>说到底和其他架构一样,就是把所有数据放内存里,数据库就当个备份

没你想像得那么简单吧,看看这篇云计算已经成为现实的文章,赶快抛弃脑中的数据库影子,才能接受更新的架构思维:


http://www.jdon.com/jivejdon/thread/34888.html

像是集群+内容管理+存储网络 之类
我再看看,谢谢学习了

[该贴被vcshcn于2008-11-07 19:37修改过]

唉,我们用EJB,曾经一直用,但80%的时候用得不正确。

http://www.infoq.com/cn/interviews/MySpace-Architecture-Dan-Farino-cn#

MySpace首席系统架构师Dan Farino谈论了超大线上社区的系统架构,以及构建这样一个系统所面临的各种挑战。由于MySpace几乎完全基于.NET Framework开发,Dan还解释了一个.NET平台下的产品是如何在数百台服务器上达到强大伸缩性的。

不过数据库查询的性能不足以应对站点对伸缩性的要求,因此我们开发了一个自定义的缓存组件。这是个简单的对象存储部件,通过自定义的socket层进行通信...

所以我们面向伸缩性的问题之一便是“必须自己编写非托管的内存存储”。

我们最早在数据库伸缩性方面做的努力是进行了纵向划分——或横向划分,我不知道你们把这叫做什么方向——把每100万个用户放在不同的数据库中。

这么做提高了伸缩性,也让我们能够轻松地添加硬件,并对错误进行隔离。如果一个数据库当机了,只有一小部分用户会在我们处理这个问题之前得到错误信息或正在维护的消息。我们在Linux上构建了一个自定义的分布式文件系统,用于存放用户上传的媒体内容,并作负载均衡。

整个排错的过程是什么样的呢?系统是如何适应伸缩要求,这一点上理论和产品上有没有什么区别呢?它又是如何影响系统架构的呢?
嗯,目前系统架构模型主要分为三层:前端,缓存层和数据库。所以要大幅度改进其伸缩性会是件困难重重的事情。我们一开始会说“我们现在的这条数据库查询不太好,那么我们试试看简单的修复一下,把它放到缓存中去”。好吧,这没啥效果,那么我们可能要建立另一套系统了。我们就开始琢磨这个问题,我们有不少这样的系统,如果性能出现问题了那么我们可以对它们分别进行优化,比如把这部分移出数据库,放到磁盘上,或者就放在内存中。如果某个地方出现了问题,那么我们会开发一个新的系统。这在MySpace中并不多见,因为我们在一开始在水平分割上的考虑十分有效。不过当你打算获得更多9【译注:即99.99……%】的可用时间时,就会在决策上有很大的改变。


这可能是个有2-3年历史的老问题了,不过在提及“.NET无法伸缩”的问题时,你会怎么答复呢?
我觉得不存在这方面问题,关键在于你有没有使用正确工具,是否有这方面的专家。事实上我觉得现在.NET已经是一个非常成熟的平台了。显然Java在这方面领先于.NET,不过我想我们还是互联网上最大的.NET站点。我不知道你会把我们的可用时间和性能与同样规模的Java站点进行什么样的比较,我们遇到的各种问题都不是.NET平台本身造成的。可能是我们自己的bug,可能是硬件问题,但是我没有真正遇到过.NET的问题,除了在垃圾收集方面我可能会说“这的确很难进行伸缩”。

不过.NET上最好的地方莫过于它的可扩展性了,所以如果垃圾收集器在你16GB的机器上进行内存管理时表现不好,那么你可以使用Berkeley DB或你自己的非托管存储进行替换。要享受.NET的优势也不必把自己完全局限在.NET中。我想说.NET有良好的伸缩性,而且我们的规模也会越来越大。你不妨过几年再来问我这个问题,看看我会怎么说。

你能多谈一写缓存层的东西吗?我对你处理一些常见的缓存问题的方法很感兴趣,例如更新之类的事情。
我们正好在处理这方面的问题。目前,缓存层既不是write through也不是read through的。基本上web服务器做的事情会分两步走。首先检查缓存,如果没有东西,那么web服务器会从数据库里取出对象并序列化,发送给用户页面,然后异步地提交给缓存,然后下一次再重复这个过程。我相信在某些时候我们会使用一个更加传统的三层模型,这样web服务器不会直接连接数据库,不过目前我们仍然基于简单的两层:web服务器和数据库,而缓存层只是简单的附属物。当以后规模越来越大时,我们就会着手把访问转移到缓存中,最终会让web服务器连接缓存服务器,而不是数据库。

不过目前看来,对象存储工作得相当不错,我们也在这方面思考了很多。它只是用来存储对象,它并不知道保存了什么或者那些东西从哪里来,这对性能可能有些好处,我不确定。不过从几年前我们需要缓存的时候,就把它设计成可以轻松增加的服务。我们现在有400台运行飞快的服务器,如果有东西变慢了,那么我们就会进行升级。没什么特别的。

[该贴被banq于2009-05-27 15:02修改过]

banq的例子举的非常的好
这说明了什么??缓存是提高系统性能的一种方法,但是不是取代数据持久化的解决方案?

还说明了什么??

缓存是与语言无关的东西,不管是.net还是java对于缓存而言并不重要,只是不同语言的实现罢了。

* 应用服务器:Tomcat and Jetty as application servers

好好反思这条,为啥那些政府机构信息中心的人非要花那么大价钱采购websphere,而不看看这些开源的东西?
一个好的应用架构即便运行在Jetty性能也是非常棒的,况且现在开发商根本没开发出能发挥出商业应用服务器真正价值的应用,官僚主义的办事方式真是不能忍。。。。。

>为啥那些政府机构信息中心的人非要花那么大价钱采购websphere

愚昧+利益熏心

除了利益熏心外,怕担责任也是一方面,这是特色......

为什么不使用开源的东西??出了问题谁来解决,多少时间内解决,怎样进行服务,对于版本的升级谁来保障??这不是不负责任,是极度负责人的心态要求必须使用商业产品,这样才是对消费者最大的保障。

楼上说的有道理,但是现实是所谓的对消费者的保障成为了借口,更多的还是......