锁定老帖子 主题:有关分布式计算和集群的疑惑
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-05-13
引用 分布式计算是一种把需要进行大量计算的工程数据分割成小块,由多台计算机分别计算,在上传运算结果后再统一合并得出数据结论 的科学。目前常见的分布式计算项目有通常使用世界各地上千万志愿者计算机的闲置计算能力,通过互联网进行数据传输。有分析地外无线电信号,从而搜索地外的生命迹象的SETI@home项目,该项目数据基数很大,超过了千万位数,是目前世界上最大的分布式计算项目,已有四百万台计算机加入了此项目(在中国大陆大约有4万位志愿者);同时也有分析计算蛋白质的内部结构和相关药物的Folding@home项目,该项目大约有十万余支援者参加(在中国大陆大约有60位志愿者)。这些项目很庞大,需要惊人的计算量,由一台电脑计算是不可能完成的。即使现在有了计算能力超强的超级电脑,但是一些科研机构的经费却又十分有限。
从上面的定义看到分布式计算是为了把大量的计算工作分摊给多台计算机进行处理的一种技术。 1.EJB是用于处理分布式计算的一种技术,也就是说当计算量很大是我们应该采用分布式计算,在java世界里就是采用EJB技术了,对么? 2.如果是仅仅是一台EJB服务器,那么EJB的分布式计算能力实际就是没有意义的了,对么? 3."大量的计算工作"是一个怎样的概念?是指对服务的请求很多,还是需要计算的数据和步骤很多呢?或者两者都包含? 从第三个问题引发对集群的概念理解问题: 引用 集群是一个统称,他分为好几种,如高性能科学群集、负载均衡群集、高可用性群集等。 科学群集:通常,这种集群涉及为群集开发并行编程应用程序,以解决复杂的科学问题。它不使用专门的超级并行计算机,而是用商业系统(如通过高速连接来链接的一组单处理器或双处理器PC),并且在公共消息传递层上进行通信以运行并行应用程序。我们常常听说一种便宜的 Linux 超级计算机问世了,大多数情况就是指这种集群系统,其处理能力与真的超级计算机相当,而其价格与上百万美元的专用超级计算机相比是相当的便宜。 负载均衡群集:负载均衡群集为企业需求提供了更为实用的系统。如其名称,这种系统使负载可以在多台计算机中尽可能平均地分摊处理。负载可以是需要均衡的应用程序处理负载或网络流量负载。在系统中,每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也是如此。 高可用性集群:高可用性群集的出现是为了使群集的整体服务尽可能可用。如果高可用性群集中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,对用户没有任何影响。 在群集的这三种基本类型之间,经常会发生交叉、混合。比如:在高可用性的群集系统中也可以在其节点之间实现负载均衡,同时仍然维持着其高可用性。 4.上面有关三种集群的解释中,科学集群与分布式计算定义中所列举的例子相近,它所要解决的是需要计算的数据量大、步骤复杂的问题。而负载均衡集群用来解决的问题是服务请求很多,需要多台计算机来分摊负载。高可用性集群是指热备用服务器的概念。这样的理解是否正确? 5.分布式计算是否就是指的第一种集群呢? 6.如果应用EJB的分布式处理,EJB是如何部署的?是在每台服务器部署各不相同的EJB组件还是在每台服务器上部署所有的EJB组件?如果部署各不相同的EJB组件的话,象是科学集群的方式;如果部署所有的EJB组件,象是负载均衡集群的方式。这又回到了第3个问题了,究竟"大量计算工作"指的是什么? 7.如果是因为对服务的请求量很大,不采用EJB技术(就是普通的Java Bean)是否也可以使用负载均衡集群来解决呢?因为我想既然只是服务请求量大,多台服务器都可以各自完成一个完整的业务处理,只需要将请求平均分摊到各个服务器上,就没有必要使用EJB了吧? 以上就是我对分布式计算和集群的困惑了,希望高手能耐心解释一下,感激不尽~ 此外我对EJB的使用也感到非常迷惑,究竟什么场合使用EJB呢?网上的技术资料谈到EJB必谈分布式计算,并且大肆鼓吹EJB的强大。但我在各个论坛上看到开发人员无数的抱怨,EJB在这些使用者身上表现成了一种垃圾技术,我偏向开发者的意见,毕竟他们才是实践者。如果认为是对技术的使用不当,那么EJB的门槛也楞是高了点吧? 此外,究竟请求量达到一个什么数量级我们需要集群呢?我看到一些大的论坛系统,有4、5百人在线,用的是PHP技术,速度还停快的。很多门户网站是asp、php构造的,在线人数够多了,我想都是负载均衡的集群吧? 此外看到很多产品都号称采用EJB技术,支持分布式计算,作为产品的技术卖点。我在想他们的产品到底要计算多么复杂的数据啊?迷惑ing 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-05-14
我不懂EJB,来胡说来着
EJB的分布就是业务层的分布。如果你确信你的系统的负载大到了分离了web服务器,和数据库服务器还不够的话,那你就考虑EJB的分布吧。 感觉上EJB的分布就是负载的分布。 其实我没有用过EJB,瞎说了。 |
|
返回顶楼 | |
发表时间:2004-05-14
分布式计算可没有集群这么简单
分布式计算首先需要算法方面的分布式设计,就是把计算分成几部分,只有这样才能进行分布式。分布式在这方面好像跟并行有一定相似 有一本书叫《计算方法导论》,其中谈到了这种算法的设计 |
|
返回顶楼 | |
发表时间:2004-05-14
albert_qhd 写道 分布式计算可没有集群这么简单
分布式计算首先需要算法方面的分布式设计,就是把计算分成几部分,只有这样才能进行分布式。分布式在这方面好像跟并行有一定相似 有一本书叫《计算方法导论》,其中谈到了这种算法的设计 不好意思,我前面提问时只是急切的想把问题提出来,所以有些地方用词不准确,不应该说分布式计算就是科学集群的,我只是想表达一下它们之间的关联关系,呵呵。 不过分布式计算有那么复杂么?是不是有一些简单的分布式计算? 象EJB应该可以不涉及到算法的分布式吧?还有Web Service,是不是也算一种分布式计算技术呢? |
|
返回顶楼 | |
发表时间:2004-05-14
科学群集:简单的说就是划分定义域,分段求值域,再逐步合并值,由于并发问题较少,实现比较容易
负载均衡群集:把工作负荷分摊到几个服务器上,但每个服务器要做的工作是一样的,逻辑上也只有一个数据库,情况复杂,要保证数据完整性和一致性,实现起来很麻烦--ejb(ejb分布的好像不只是这些,还有安全,事务等等,所以搞的很复杂) 高可用性集群:冗余节点,两个东西是一样的,只是提高可靠性,实现较容易 |
|
返回顶楼 | |
发表时间:2004-05-15
那是不是只有用EJB才能做负载均衡群集呢?
我觉得还是没有解释清楚哦 |
|
返回顶楼 | |
发表时间:2004-05-15
jeffrey_he 写道 那是不是只有用EJB才能做负载均衡群集呢?
不是的,在 Web Container 这个级别也完全可以做负载均衡集群的。 EJB 的作用不完全是做分布式应用,以前 robbin 说过,EJB 的意义在于提供了一个组件管理平台,使得你不需要关心太多的低层的技术细节(例如,多线程、对象池等等,这些事情又不能直接帮你赚到钱,为何你要去关心这些事情?),集中精力于可重用业务逻辑的开发。从这个角度来说,现在各种 IOC 框架(Spring、HiveMind、Pico)的出现,实际上已经减少了必须要使用 EJB 的理由。 |
|
返回顶楼 | |
发表时间:2004-05-16
jeffrey_he你的问题可真多,我归纳一下为:
1、那些所谓分布式计算、集群是什么? 2、EJB跟他们有什么关系? 3、我的项目需要用到EJB么? 让我来尝试回答: 1、那些所谓分布式计算、集群是什么? 简单来说他们都是要通过多台机器来完成工作。我认为从工作完成的方式可以分为两种:一、多机合作,就是把一个“工作”拆分多份,交由多个CPU(或者机器)进行处理,最后把结果综合起来。这种方式一般用于需要强大计算的工作,例如什么流体力学、DNA分析等等。这一类的系统对绝大部分企业来说都是很少涉及到的。 第二种是单机完成,也就是说一项“工作”一台机器就能完成。比如说你用PHP写一个查询用户购物记录的程序,这个PHP只需在一台机器上面就能完成请求,当然是指业务层;即是说到数据库的话,在数据层我们也是只需一台机器就可以了。事实上即使有多台机器,在一次查询请求中,也只能用到一台机器。那么在这种情况下为什么还要用到多台机器呢呢,是因为需要负载均衡与高可用性这两种特性。 对于大多数开发人员来说,提到集群的时候一般都是指后面这种情况,毕竟大部分企业很少涉及到所谓的“科学计算”的。关于分布式计算、集群是一个很庞大的话题,不知道我的三言两语能否给你一点概念上分类的帮助。 2、集群技术已经出现很久了,远在EJB之前,EJB只是在Java实现集群的一种(不是唯一)方式。事实上在EJB的规范中并没有提到集群,但EJB技术为实现EJB集群提供了坚实的基础。因为EJB是一个得到广泛支持的标准,在集群应用又有很多成功的案例,所以在企业应用中提到集群常常会提到(采用)EJB。 在EJB集群中的每台机器部署相同的EJB,才能做到负载均衡与高可用性。 3、“谈到EJB必谈分布式计算”这是正常的,因为分布式计算就是EJB的目标,这在EJB规范中写着的,这也是你选择是否采用EJB的重要根据。实现负载均衡与高可用性可以有多种方式,在采用三层结构构造系统时,如果你需要业务层实现负载均衡,或者在业务层与其他层在物理上分离,EJB就非常适合。如果你的程序只是运行在一个JVM上,EJB技术就显得不必要了。 EJB还提供其他的特性,但当然无法提供所有特性,是否在你的项目中采用EJB,只有在你对EJB技术有所了解后再针对项目的具体需求才好做出判断。 |
|
返回顶楼 | |
发表时间:2004-05-16
谢谢楼上各位的回复,现在概念上已经比较清楚了。
还剩下一个问题:如果我不采用EJB技术又要做集群的话,在代码的编写上有没有特别的要求呢? 如果不需要,我想我可以不采用EJB了,那可避免了一个大麻烦,呵呵。 |
|
返回顶楼 | |
发表时间:2004-05-16
我觉得最好衡量一下是否确实需要集群?你的项目的性能瓶颈到底出在哪里?
|
|
返回顶楼 | |