`
OneEyeWolf
  • 浏览: 104550 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

群集的存在意义

    博客分类:
  • tech
阅读更多
     近来为客户新做一个电子商务网站,部门经理天天给我说要把群集做进方案里,听的都吐了,在没有对于用户服务需求真正在进行好认真的分析的前提下,就将群集做进方案里,真的觉得很厌烦。
   
    我觉得即使对于中型的电子商务网站,也不一定需要群集,群集只会增加复杂度,甚至有可能延长用户请求的响应时间。同时限制Web应用的开发方案,如对于重型的基于SessionWeb-Flow方案,你就要考虑不能使用了。但对于电子商务网站,web-flow的应用很多,想像一个网站下单的过程,-查询-预订-登陆-填写需求-填写配送单-信用卡担保(或网上支付)-生成订单。使用wegbflow框架很方便,但在群集环境下,却有性能负担。
    我觉得基于apache的前导load-balancer方案,已经足够了,它可以持续将同一个Session的请求,分发给同一个worker进行处理。没有必要再使用群集来进行Session复制。

   
分享到:
评论
29 楼 zzsczz 2006-12-29  
我不懂的。。。。

涉及到部署和框架的选择,这需要很多经验和影响决策的力量。

字面上看,意义就是  提供更多的吞吐量  和 卖个更好的价钱
28 楼 balaschen 2006-12-27  
使用中心session server,商业的有个叫tangosol,开源的可以用memcache或者自己搞一个,参考这个:
http://www.huihoo.com/middleware/database/elong.html
27 楼 sizhefang 2006-12-27  
我们用的是四台服务器,每台装一个Tomcat.另外还有一台服务器,装apache.Tomcat文档上是不建议对两台以上的Web服务器做群集的.有时间我可以做一下四个Tomcat做群集的方案,试一下性能怎么样
26 楼 LucasLee 2006-12-27  
sizhefang 写道

如果我把用户Id放在cookie中,在项目中有一个BaseAction,每次有一个新请求的的时候,都到数据库去load.这样就可以实现您说的必须使用session的情况,也许您会说每次都load一次数据库,会影响效率.但在我们的项目中速度还是可以的.自己很讨厌考虑session复制这样造成的速度影响.当然目前只停留在Tomcat的层面上.对其他AppServer的session复制性能没有真实的在项目中应用过,不便多说


我没有象你这么用过。同时我觉得是不是你们对于session复制的性能影响太过于担忧了?session复制的影响一般在cluster里有多台机器时会比较明显,如果只有两台机器,那么序列化session的字节数是可以算得出来的。典型的,一次复制约为100k-200k,在cluster内部,网络带宽是100M-1000M,内存花费也很小。这个性能的花费,不会比你每次到数据库查询快些么?

而且,你只是试验了你的方法,觉得性能影响还不大,你没有试过使用session复制的方法,说不定性能更高,或者你也感觉不出性能的变化。
25 楼 sizhefang 2006-12-27  
Lucas Lee 写道
如果可以,当然可以只采用Load balance的方案。
这种情况适合公开的页面,即不需要用户登录。

但如果需要用户登录才能访问的页面,你又如何不用session做呢?我暂时还真不知道有这种方式。所以如果在这种情况下,必须使用session,那么具体的session共享的方式是可以讨论的,有的是复制,有的是在一个共享的资源里统一访问,比如数据库,或者单独的session服务器。不要把session复制当作唯一的session共享方法。

或者,一个网站中可以分为两个部分,一般访问量最大的部分很可能是不需要用户登录即可访问的,比如sina的新闻,这部分可以使用load balance;而另一部分需要用户登录,可以使用load balance+cluster。

所以,只采用load balance还是再加上cluster,是取决于应用需求的。

如果我把用户Id放在cookie中,在项目中有一个BaseAction,每次有一个新请求的的时候,都到数据库去load.这样就可以实现您说的必须使用session的情况,也许您会说每次都load一次数据库,会影响效率.但在我们的项目中速度还是可以的.自己很讨厌考虑session复制这样造成的速度影响.当然目前只停留在Tomcat的层面上.对其他AppServer的session复制性能没有真实的在项目中应用过,不便多说
24 楼 LucasLee 2006-12-27  
如果可以,当然可以只采用Load balance的方案。
这种情况适合公开的页面,即不需要用户登录。

但如果需要用户登录才能访问的页面,你又如何不用session做呢?我暂时还真不知道有这种方式。所以如果在这种情况下,必须使用session,那么具体的session共享的方式是可以讨论的,有的是复制,有的是在一个共享的资源里统一访问,比如数据库,或者单独的session服务器。不要把session复制当作唯一的session共享方法。

或者,一个网站中可以分为两个部分,一般访问量最大的部分很可能是不需要用户登录即可访问的,比如sina的新闻,这部分可以使用load balance;而另一部分需要用户登录,可以使用load balance+cluster。

所以,只采用load balance还是再加上cluster,是取决于应用需求的。
23 楼 ithero 2006-12-27  
楼主只看到提高程序开发的复杂,我看是你没有了解客户的需求吧,一个电子商务网站,如果真的是规模上一定程序,你那个区区apache提供的load-
balancer岂能满足性能需求.??再者你标题是集群的意义,言词中去有扯着session状态同步的问题,这还是项目从架构时就应该考虑的吧.建议你多去了解下集群及存在的意义
22 楼 抛出异常的爱 2006-12-27  
codeutil 写道

电子商务网站不考虑集群,莫非每天只想接几个单???

集群是把系统给做简单了而不是变复杂,

试想某天业务量太大导致服务器撑不住了,
这个时候前期考虑到集群的只需要买点硬件装好系统配置一下就ok了.
而那些没有集群支持的, 就是改代码改得吐血恐怕也很难优化提升性能吧???

不过在实际应用中,集群助长了写低效率的代码的惰性,因为可以用硬件来弥补性能的不足,就懒得动脑筋把代码写的更好了.
当然在商务上倒也带来好处,因为硬件由用户买单,而帮用户采购硬件又可以赚取利润.


电子商务非要集群么?
。。。。。。。。。
我看未必一小时要多少并发才要用到集群?
(现在的服务器比以前的服务器性能高了N个数量级了。。)
明年的新服务器会比今年的服务器更高
21 楼 sizhefang 2006-12-27  
我近期从事的项目,是一个类似youtube的网站,由于项目自身的需求只采用了loadbalance,没有搞群集,感觉速度还可以.但没有仔细对这种方案和用loadbalance+群集等方案做过性能测试,虽然测试需要考虑的因素很多,但好象很少有哪位哥们拿出自己的真实测试数据,用数据说服别人
20 楼 codeutil 2006-12-27  


那你的标题就不应该叫做" 集群的存在意义",而是"Session复制的存在意义"!!!

Session复制是没有必要的,对于应用比较大的,可以采取独立的 Session Server. 所有Session信息都存放在Session Server中,
不论前端的哪个服务器挂了,只要Session Server正常,用户凭原有的SessionId即可继续正常操作.

比如一个下单的过程,只要对Session Wrap一下,然后把部分特定信息存放到独立的Session Server中,对于开发人员除了要限制存放到Session Server的信息是可序列化的之外,其它的操作都是透明的. 并不增加任何开发难度.




19 楼 yuxie 2006-12-27  
有些appserver(weblogic)可以把session记到数据库里边。怕session复制的话可以优先考虑这种方案,只要不把大对象往session里边仍,性能也还过得去。这样appserver前端只要简单的Round robin分发就可以了。
18 楼 OneEyeWolf 2006-12-27  
codeutil 写道

电子商务网站不考虑集群,莫非每天只想接几个单???

集群是把系统给做简单了而不是变复杂,

试想某天业务量太大导致服务器撑不住了,
这个时候前期考虑到集群的只需要买点硬件装好系统配置一下就ok了.
而那些没有集群支持的, 就是改代码改得吐血恐怕也很难优化提升性能吧???

不过在实际应用中,集群助长了写低效率的代码的惰性,因为可以用硬件来弥补性能的不足,就懒得动脑筋把代码写的更好了.
当然在商务上倒也带来好处,因为硬件由用户买单,而帮用户采购硬件又可以赚取利润.





   难道使用load-balance,达不到效果吗,你对方案1,和方案2,有个仔细分析吗,我说的不使用群集,实际上是指应用层上不使用基于Session-replication的群集,说白了也就是Session复制。

    我还是非常非常的迷惑,很多方案中,都不使用Session,尽量将数据放在Cookie中,以此来提高网站的性能。在EJB方案中,提倡使用无状态SessionBean。我觉得是站着说话不腰疼,那有那么多简单的应用,只有简单的无状态就可以搞定了,那写代码的复杂度又会成倍的增加,就那我说的一个下单的过程,一个单据大量的信息,如果不放在Session中,还真不好写。
    从另一方面讲,如果都搞成无状态,那还要Session replication做什么。还不如,就要个apache做前端的Load-balancer 或者 使用硬件都可以了。

    所以我再明确一下我的提议:只需要apache来作为端的load-balancer或者使用Robbin建议的基于硬件的load-balancer.就可以了。这个方案难道不比load-balancer + session replication 简单有效吗。而且开发人员在编写web应用时,不用担心session的负担。
17 楼 codeutil 2006-12-26  

Tomcat + SNA Filter +Memcached.这样也可以简单集群.
16 楼 codeutil 2006-12-26  

电子商务网站不考虑集群,莫非每天只想接几个单???

集群是把系统给做简单了而不是变复杂,

试想某天业务量太大导致服务器撑不住了,
这个时候前期考虑到集群的只需要买点硬件装好系统配置一下就ok了.
而那些没有集群支持的, 就是改代码改得吐血恐怕也很难优化提升性能吧???

不过在实际应用中,集群助长了写低效率的代码的惰性,因为可以用硬件来弥补性能的不足,就懒得动脑筋把代码写的更好了.
当然在商务上倒也带来好处,因为硬件由用户买单,而帮用户采购硬件又可以赚取利润.



15 楼 robbin 2006-12-26  
Lucas Lee 写道
就我阅读Tomcat的集群文档来说,集群(Cluster)和负载均衡(load balance)是两个问题,但通常是一起结合使用的。
Cluster是指几台服务器之间关联,一般主要指session 复制,使之成为一个整体,访问任何一台服务器都可以达到相同的效果;
Cluster建成后,需要利用Load balancer来执行请求的分发,就是分发到Cluster中具体的服务器上。


tomcat的session复制性能是很糟糕的,而且tomcat文档自己都说不建议两个以上node的同步。

JBoss对于tomcat的session同步进行了改进,使用JBossCache,所以性能会好很多。node复制方式也是master slave方式的。
14 楼 抛出异常的爱 2006-12-26  
OneEyeWolf 写道
     近来为客户新做一个电子商务网站,部门经理天天给我说要把群集做进方案里,听的都吐了,在没有对于用户服务需求真正在进行好认真的分析的前提下,就将群集做进方案里,真的觉得很厌烦。
   
    我觉得即使对于中型的电子商务网站,也不一定需要群集,群集只会增加复杂度,甚至有可能延长用户请求的响应时间。同时限制Web应用的开发方案,如对于重型的基于SessionWeb-Flow方案,你就要考虑不能使用了。但对于电子商务网站,web-flow的应用很多,想像一个网站下单的过程,-查询-预订-登陆-填写需求-填写配送单-信用卡担保(或网上支付)-生成订单。使用wegbflow框架很方便,但在群集环境下,却有性能负担。
    我觉得基于apache的前导load-balancer方案,已经足够了,它可以持续将同一个Session的请求,分发给同一个worker进行处理。没有必要再使用群集来进行Session复制。

   

写N个频道,每个频道都用一台服务器。。。。
之后跟他们说已经集群了。。。。
session?可以不用
可以用数据库开一个表用来存用户信息。。。。

IAmOK 写道
那些门户网站的集群和均衡负载是怎么做的?
chinaren好像是java的门户,它是怎么做的?

不用session或用域名分配:
天涯上
www13.tianya.cn
http://www12.tianya.cn/index.asp
.....
只要你不手动去改一般都不会有session问题。。。。
13 楼 LucasLee 2006-12-26  
OneEyeWolf 写道

   如果是开发者当然不需要了,只需要code就行了,出了问题,只要不是自己代码的问题,就不用负责。以你的水平不应当是开发者,应当是designer or architector 吧,透明, 只是从开发来讲的一种术语而已或者是商业解决方案的一个宣传,我们在不断的学习技术的过程中,这种口号见的还少吗,可是有多少人仍然陷于实际的困境中,有多少调优者为了查找一个性能瓶颈点,或者莫名其妙的,不可再现的问题,痛苦的不得了,这些你都经历过吧, 你见过call center 的电话记录中,记录了多少个莫名其妙的,难以再现的投诉吗。


看来,你已经是深恶痛绝,颇有微词了。我并不清楚你的处境,不过可以看出你最近心情不佳啊。
呵呵,此时不适合深入谈技术。

另:architector 应为architect
12 楼 IAmOK 2006-12-26  
那些门户网站的集群和均衡负载是怎么做的?
chinaren好像是java的门户,它是怎么做的?
11 楼 shaucle 2006-12-26  
俺做过14台机子的简单集群,SUSE的
不说配制复杂吧,主要是问题多,而且SUSE的版本之间也有问题
而且中间中是间间断断出现问题.
"对于开发者来说都是透明的"并没能向方档"承诺"的一样,不过可能是俺还不熟悉.

另外:俺认为理想情况下cluster中不要放session,也就是说cluster应该是stateless的,(只是理想情况下)相当一个logic(service) layer(这也是俺理解的"不要分布你的对象")

很多情况的是可交给前台或数据库,甚至client去处理的.
10 楼 OneEyeWolf 2006-12-26  
Lucas Lee 写道
OneEyeWolf 写道
Lucas Lee 写道
就我阅读Tomcat的集群文档来说,集群(Cluster)和负载均衡(load balance)是两个问题,但通常是一起结合使用的。
Cluster是指几台服务器之间关联,一般主要指session 复制,使之成为一个整体,访问任何一台服务器都可以达到相同的效果;
Cluster建成后,需要利用Load balancer来执行请求的分发,就是分发到Cluster中具体的服务器上。


我的意思,你不明白吗,就是不要session复制,避免技术复杂化带来的副作用?

在网站下单时,宁愿让整体的会话请求失败,也不愿意在会话的过程中间去失败。


我真的不太明白,群集对于开发者来说怎么样把技术复杂化了?实际上,群集,或者部署机器上用的什么高级UNIX服务器,等等,对于开发者来说都是透明的。

你认为session复制,会导致网站下单时,在中间过程失败么?我认为这种情况应该是群集去考虑的,如果他没有处理好这个问题,我认为他的确没有设计好,如果他处理好了,那么这个担心是因为你还不太了解session复制不会带来什么应用逻辑上的问题。




   如果是开发者当然不需要了,只需要code就行了,出了问题,只要不是自己代码的问题,就不用负责。以你的水平不应当是开发者,应当是designer or architector 吧,透明, 只是从开发来讲的一种术语而已或者是商业解决方案的一个宣传,我们在不断的学习技术的过程中,这种口号见的还少吗,可是有多少人仍然陷于实际的困境中,有多少调优者为了查找一个性能瓶颈点,或者莫名其妙的,不可再现的问题,痛苦的不得了,这些你都经历过吧, 你见过call center 的电话记录中,记录了多少个莫名其妙的,难以再现的投诉吗。

相关推荐

Global site tag (gtag.js) - Google Analytics