`
jackson1225
  • 浏览: 61698 次
社区版块
存档分类
最新评论

请教大型WEB系统的架构设计和技术选型

阅读更多
目前系统架构如下:
  1.web层采用struts+tomcat实现,整个系统采用20多台web服务器,其负载均衡采用硬件F5来实现;
  2.中间层采用无状态会话Bean+DAO+helper类来实现,共3台weblogic服务器,部署有多个EJB,其负载均衡也采用F5来实现;
  3.数据库层的操作是自己写的通用类实现的,两台ORACLE数据库服务器,分别存放用户信息和业务数据;一台SQL SERVER数据库,是第三方的业务数据信息;
  web层调用EJB远程接口来访问中间件层.web层首先通过一个XML配置文件中配置的EJB接口信息来调用相应的EJB远程接口;
  该系统中一次操作涉及到两个ORACLE库以及一个SQL SERVER库的访问和操作,即有三个数据库连接,在一个事务中完成.

  以上的描述不知道是不是足够清楚,目前想采用业界流行的一些框架来重新架构整个系统,请各位高手分析一下,这样的系统能不能采用struts+spring+hibernate框架来实现,如果可以的话,其中的多个数据库的连接、事务控制、负载均衡都如何实现,或者有其他更好的技术来架构系统?谢谢!
分享到:
评论
96 楼 sunzhyng 2008-08-27  
lz说的大型是基于那么多服务器和昂贵的设备,而并不是业务吧。
95 楼 xuwen21 2008-08-16  
stuts、hibernate、spring不是架构,而是框架。这个框架主要用于大型项目,开发周期比较长。首先你的系统在硬件方面和数据库的使用方面来看的确算大型系统,但你的业务主要做些操作呢。如果你的业务经常进行数据库操作可以使用hibernate,否则反而会影响系统性能。至于你所说的三个数据库连接,你可以先将它们的连接信息写在连接池的配置文件中,然后,考虑连接池 在什么时候使用那个连接。具体的实现查一下hibernate连接池的相关资料吧。
94 楼 cyz 2008-08-16  
rtdb 写道
> 大型WEB系统

没有用户量,数据量等基本信息,谈什么架构设计和技术选型 ?


没有用户量,数据量,应用领域谈什么技术选型啊?

还有,大型WEB应用居然敢用EJB?OH,NO!
93 楼 icewubin 2008-07-09  
davexin 写道
如果 (这也是我们使用 ejb集群的 原因,因为很难做出不使用 ejb做 群集 而又保证安全和 扩展性的 架构,因为这样可以随意 向ejb集群中增加机器,提高并发和性能),到现在本人没有发现比这个 更好的方案。如果大家有,可以交流 一下 。至于 让 spring控制事物,我们根本 不敢用 的 ,性能太差


ejb集群中增加机器,能提高并发和性能是BEA的人告诉你的吧,不知道你们的采购合同中有没有说明,每增加一台机器,性能指标能提高多少?

强烈建议楼主看一遍《J2EE WITHOUT EJB》,不是要你推翻现在的架构,而是你的想法中有些结论是别人灌输的,属于想当然。

spring事务控制性能太差,请举出例子。

再提一句,利用反向代理。一样可以让tomcat放在内网中的。

还有请马上测试tomcat APR打开的情况。


92 楼 xidaboy 2008-07-08  

davexin:

讨论EJB没什么意思,还不如说你花了钱,WEBLOGIC帮你做了些什么。。。。。


讨论来讨论去,简直是TOMCAT PK WEBLOGIC

期待楼主提供一份JBOSS和WEBLOGIC的对比测试报告


:)
91 楼 javaeye26b 2008-06-02  
power2 写道
  对于楼主的问题,以及公司的架构方案,我认为你们仍然在犯错!
  误区:遇到性能问题的第一件事情就是找硬件和容器的事情!
  性能问题的基本上无一例外的都出在写的程序有问题,满足不了伸缩性。
  好好看看你们的程序吧,不要再给bea打电话了,你得到的建议,基本上都是用不到的。
  robin的观点是对的,我甚至怀疑你们的数据库连接是否有释放问题的。
  增加你们前端的内存,多做缓存。hibernate的cache方案不差jdbc对数据库的频繁使用
  html的书写是否符合w3的规范
 
  最好在一个服务器上部署整个应用!


程序有问题,是开发部的问题。我们做软件的不但得不到任何好处,还得挨批评(搞不好老板会换人);
硬件和容器有问题,是别人的问题。不但做软件的没有问题,还可以顺便捞点好处(搞不好老板还是会换人)。

所以,关键是看老板是哪一种人。蒙得了,就说容器有问题了;蒙不了,当然只能“我改”了。
90 楼 davexin 2008-04-19  
总算有了认识ejb真正威力的人,我们已经使用ejb3.0开发升级项目了,项目已经完成 ,总的说来还算不错,唯一不爽的地方,ejb3的 注解不通用,jboss和weblogic就不同,不过既然用了ejb,我想都是比较大 的 商业项目,也不会在考虑jboss了。
89 楼 kenees 2008-04-08  
EJB2.X如果只用session bean(state less)和MDB的话,除了难写点没有所谓的说的那么不好,不要太过个人崇拜,用过了再发表意见,现在觉得社区里面对EJB的态度感觉就像对瘟神...呵呵,另外从EJB3.X开始,它的编写也是相当方便了,没有必要一定非SPRING不可,感觉没有SPRING就觉得落伍...
88 楼 fori 2008-04-08  
连针对什么项目都不说,谈什么架构,架构是根据所处的环境、业务、旧有系统间的整合来综合考虑的,不是最流行的就是最好的。有人说为什么要用ejb,你用过ejb吗?知道ejb能解决多少事情吗?ejb是侵入性比较强(实现它必须要和代码结合的很紧密,很难拆分开),但是它确实是很好的解决方案。比如事务的控制,远程服务的提供等等。只是说它确实做得太大了,什么都想占全,所以导致没法收手了。可是它确实是个优秀的解决方案。hibernate针对大型系统,特别对数据库依赖性很强的系统,说实话不是很适合,例如电信。见过用的,后来因为性能问题推翻改用手写sql。针对复杂业务的系统最好少用hibernate。当然如果有高手可以用,可是你能保证100人的大型项目团队都是高手?那要多大的代价啊!!所以框架在优秀也要考虑开发成本!所以框架的选用要考虑到项目的状况、成本和后期的扩展。好像说了一堆废话,没涉及具体的技术,只是从架构设计的方面给点建议。
87 楼 davexin 2008-04-07  
如果没有做过 这样 的 项目,我想你们 不会理解 为什么 要这样 做,如果 没有经历过几十台机器几分钟 内 就全部 不能 服务,我想你们 也不会了解 我们 为什么这样做了 。 dao层和 web层还有业务层 分开 的原因 ,一方面是因为 方便 维护 ,减少代码 的 修改,另一方面有安全的 原因,说一个大家 可能 知道 但是可能 也不知道 的 重要原因 吧,dao层 是放在 内网 的 ,web层放在 公网的 ,这是安全,另外就是 在内网的 dao层 就是 数据库层 ,如 oracle rac(oracle集群,可能 大家 都没用过 ,但我们在使用),还有ejb的 集群 ,其中 有loadblance的问题和 线程安全的 问题,最重要 还有licence的 问题(这也是 很重要的 ),,如果 (这也是我们使用 ejb集群的 原因,因为很难做出不使用 ejb做 群集 而又保证安全和 扩展性的 架构,因为这样可以随意 向ejb集群中增加机器,提高并发和性能),到现在本人没有发现比这个 更好的方案。如果大家有,可以交流 一下 。至于 让 spring控制事物,我们根本 不敢用 的 ,性能太差 ,hibernate也不敢用 ,没办法 保证性能 。我们的每个 sql语句都很关键的 ,举个简单 例子 ,我们的数据库 没必要 的 话是不让 更新 的 ,只能 insert记录,因为这样 的 速度更快。总之 ,有很多原因和 经验,因为做了才知道的 。不过 我们的 这种方式可能 大部分的 项目是 用不倒的。因为我们 的 行业很特殊。
86 楼 LucasLee 2008-04-07  
用LoadRunner只支持1000并发。。。
你还不如用开源的OpenSTA,这东西支持CORBA,可以多台客户机一起跑一个压力测试,估计就没有什么用户限制了。
当然我还从没用过这么大并发的测试,也就没有跑过一台以上的客户机测试。
85 楼 LucasLee 2008-04-07  
8000 写道
对于你你们舍得投入巨资买weblogic,买oracle,买几十台HP OR ibm服务器的项目,最好的办法是拨打范凯先生的电话,告诉他们你们需要咨询,几个月后你总共加起来买2台服务器就可以搞定。

这可能是最最捷径的办法,真的!

这个...虽有广告嫌疑,但的确同意。
找BEA的人来搞测试是有失公允的。
找第三方的人来搞还差不多。
性价比还高呢
84 楼 swordrawn 2008-04-07  
现在用ejb,不都是用无状态的session bean做门面吗
83 楼 aniken 2008-03-30  
可以很负责的说,4G内存至强单核双路的服务器,安装apache2 + 2个tomcat5实例,做好动态缓存,对于一般的网站应用,并发1500个好不困难.局域网测试并发2000个平均响应时间都在3秒以下。

大家根本不用怀疑tomcat的性能,我认识的好几个硅谷海龟创业,都用的apache+tomcat+oracle,如yeeyoo.com等。
82 楼 chinata 2007-10-01  
mark先,有点问题要细看一下这个thread
81 楼 xinlnix 2007-09-26  
佩服,佩服,楼上各位的高论,让本人大长见识。这里我有几个问题讨教一下:

为何JEE用于金融、电信、银行等行业比用于网站更多呢?难道这些行业比互联网企业对性能要求低?
近来,JEE 5.0有了很大改进,是否能够改变这种局面,也能用于互联网大并发访问的情况呢?
交易类网站,如淘宝,也需要大量事务,它到底与金融、电信、银行等行业的事务有何区别,它不能应用JEE 5.0吗?

请各位帮忙解释一下,谢谢。
80 楼 davexin 2007-09-22  
mfc42d 写道
我做了6年的网站开发,没有见过那个网站使用tomcat的,5460 和最初的书生网是,sina sohu 263 163用的全是resin  也就是政府网站使用较多weblogic ,主要是OA
java的并发
http://blogger.org.cn/blog/more.asp?name=hongrui&id=25175

http://blogger.org.cn/blog/more.asp?name=hongrui&id=23973
从实际应用的角度来说。-Xmx大了不是很好,垃圾回收需要更多的时间,但是thread问题就很大,配给JVM的内存数越大,tomcat所能开的thread数就越小,最后出现ava.lang.OutOfMemoryError: unable to create new native thread。根据我在windows下编程经验,windows起的线程栈的大小写在可执行文件头,默认是1M。对于java来说,如果采用默认xss设置,jdk1.4每线程256k, jdk1.5每线程1M。如果设置没有超过1M, 又不是默认设置,那么jdk就会为每个线程分配1M。
对于windows来说,32位使用最大内存为2G,如果你给jvm分1.5G,剩余大约500M,供OS使用,其中windows的dll占了一部分,但是你在JVM创建线程的时候,创建的是OS的线程,他要从剩余的空间中分配内存。如果没有可用内存,出现上述错误。
参看hotspot\src\share\vm\runtime\os.c
{ MutexLocker mu(Threads_lock);
      JavaThread* signal_thread = new JavaThread(&signal_thread_entry);
                                                                                                                             
      // At this point it may be possible that no osthread was created for the
      // JavaThread due to lack of memory. We would have to throw an exception
      // in that case. However, since this must work and we do not allow
      // exceptions anyway, check and abort if this fails.
      if (signal_thread == NULL || signal_thread->osthread() == NULL) {
        vm_exit_during_initialization("java.lang.OutOfMemoryError",
                                      "unable to create new native thread");
      }
公式如下
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
解决的办法就是减少-Xmx的数量,减少xss的值,或者开启3GB模式。

最主要的还是程序员的编程,对于网络编程,在nio出来之前,每一个线程只能处理一个socket请求,也就是说一个socket连接需要一个线程,这样使服务器的并发收到了限制,压力不能过大,因为服务器开启thread有限,这造成了tomcat的性能远不如apache。nio出来之后,在一个线程内处理几个连接成为了可能,几乎所有的java的开源web服务器,tomcat6,jetty,resin都用nio重写了网络连接部分,不开源的apusic也用了nio。


对于tomcat和apache的使用,我觉得要结合起来用apache用过静态页面处理,tomcat用作动态页面处理,如果不用tomcat,用resin 性能也不能提高多少,已经做过tomcat6的性能测试,在32位操作系统下,他的性能还不如tomcat4.1(交易量和响应时间),但在64位操作系统下,tomcat6比tomcat4.1的性能有所提高(交易量增加响应时间变短),但是当用户并发超过600时,响应时间超过了10秒,对我们系统来说已经没有意义。也不是说用了nio就可以提高多少性能,在jdk1.5以后,在64位操作系统上,jdk已经没有最大内存的限制,经过测试,当内存用的比较大的时候,当用到交换分区的时候(linux系统),虚拟机会进行内存回收,此时机器压力是比较大的,整个机器基本上是不再响应请求。这一点我觉得你说得还是非常有道理的。但是个人觉得,resin的性能也不会比tomcat强多少的。如果谁有测试数据,请贴出来交流一下。
79 楼 webmaker 2007-09-18  
楼主的资源似乎很充足嘛,汗一把 ,这是一个啥样子的项目啊:o
78 楼 mfc42d 2007-09-14  
我做了6年的网站开发,没有见过那个网站使用tomcat的,5460 和最初的书生网是,sina sohu 263 163用的全是resin  也就是政府网站使用较多weblogic ,主要是OA
java的并发
http://blogger.org.cn/blog/more.asp?name=hongrui&id=25175

http://blogger.org.cn/blog/more.asp?name=hongrui&id=23973
从实际应用的角度来说。-Xmx大了不是很好,垃圾回收需要更多的时间,但是thread问题就很大,配给JVM的内存数越大,tomcat所能开的thread数就越小,最后出现ava.lang.OutOfMemoryError: unable to create new native thread。根据我在windows下编程经验,windows起的线程栈的大小写在可执行文件头,默认是1M。对于java来说,如果采用默认xss设置,jdk1.4每线程256k, jdk1.5每线程1M。如果设置没有超过1M, 又不是默认设置,那么jdk就会为每个线程分配1M。
对于windows来说,32位使用最大内存为2G,如果你给jvm分1.5G,剩余大约500M,供OS使用,其中windows的dll占了一部分,但是你在JVM创建线程的时候,创建的是OS的线程,他要从剩余的空间中分配内存。如果没有可用内存,出现上述错误。
参看hotspot\src\share\vm\runtime\os.c
{ MutexLocker mu(Threads_lock);
      JavaThread* signal_thread = new JavaThread(&signal_thread_entry);
                                                                                                                             
      // At this point it may be possible that no osthread was created for the
      // JavaThread due to lack of memory. We would have to throw an exception
      // in that case. However, since this must work and we do not allow
      // exceptions anyway, check and abort if this fails.
      if (signal_thread == NULL || signal_thread->osthread() == NULL) {
        vm_exit_during_initialization("java.lang.OutOfMemoryError",
                                      "unable to create new native thread");
      }
公式如下
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
解决的办法就是减少-Xmx的数量,减少xss的值,或者开启3GB模式。

最主要的还是程序员的编程,对于网络编程,在nio出来之前,每一个线程只能处理一个socket请求,也就是说一个socket连接需要一个线程,这样使服务器的并发收到了限制,压力不能过大,因为服务器开启thread有限,这造成了tomcat的性能远不如apache。nio出来之后,在一个线程内处理几个连接成为了可能,几乎所有的java的开源web服务器,tomcat6,jetty,resin都用nio重写了网络连接部分,不开源的apusic也用了nio。

77 楼 binggun521 2007-09-12  
晕..都是大牛....新手报到
讨论的很精彩..新手有点发现新大陆的感觉...

相关推荐

    基于WEB的教学资源管理系统论文

    系统设计遵循了软件工程的流程,包括需求分析、概要设计、详细设计、编码、测试和维护。在需求分析阶段,重点考虑了用户群体——教师和学生的需求,确保系统功能满足他们的实际应用,如快速查找、浏览和下载教学公告...

    酒店管理系统的设计与实现毕业设计中期检查表

    酒店管理系统的设计与实现毕业设计中期检查表是对酒店管理系统的设计和实现的中期检查和评估,旨在确保系统的设计和实现符合要求。学生需要继续努力,认真掌握必要的英语知识和专业知识,多多接触外文文献,增强自己...

    视频监控系统设计实现分析范文.doc

    1. 系统设计:视频监控系统采用分散到集中管理模式,通过网络连接各个监控点,提供统一管理和监控,兼顾系统可用性、可靠性和经济性,确保实施效果。 2. 主要功能:系统通过安装在监控区域的摄像机进行实时视频监控...

    web实习个人总结范文.docx

    7. **软件开发流程**:实习过程反映了软件开发的一般步骤,包括需求分析(问题描述和功能实现)、系统设计(模块划分和流程设计)、编码实现、测试和文档编写。团队合作和时间管理也是重要部分,例如分组、日程安排...

    请教Farrow结构滤波器设计的设计-lagrange插值.pdf

    请教Farrow结构滤波器设计的设计-lagrange插值.pdf 小弟要设计一个基于Farrow结构的抽取滤波器,用在一个数字中频接受系统中,实现任意采样率的转换,不太明白滤波器的系数如何计算出来,有没有人做过呢?matlab中...

    基于ARM9的学生身份识别管理系统的设计.pdf

    5. 参考文献与专业指导:在进行这类系统的设计时,参考已有的文献和资料是至关重要的,参考文献可能包括ARM架构参考手册、嵌入式系统设计原理、身份识别技术的最新研究进展等。同时,接受专业指导,例如通过阅读相关...

    网络考试系统的设计与实现毕业设计中期检查表.doc

    2. **系统设计**: 传统考试流程包括出题、印刷、分发、监考、批改等多个环节,而网络考试系统将这些步骤整合到一个平台上。设计时需考虑系统架构、用户权限管理、题库管理、组卷策略、考试监控和成绩反馈等功能。 ...

    C语言学生管理系统课程设计报告书

    本次课程设计的目标是使用C语言开发一个“学生信息管理系统”,该系统具备数据库管理的基本功能,如数据库的建立、记录的增删改查、显示以及保存和备份。通过这个项目,学生可以深入理解C语言的编程知识,包括条件...

    电子系统设计-单片机

    本教程的“电子系统设计-单片机-ppt”文件很可能包含了上述各个知识点的详细讲解,通过PPT的形式,以图文并茂的方式帮助学习者更好地理解和记忆。建议按照PPT的章节顺序逐步学习,同时配合实践操作,加深对理论...

    城市公交查询系统的设计与实现毕业设计中期检查表.doc

    8. 论文撰写:论文是对设计过程和实现细节的全面记录,包括需求分析、系统架构、关键技术、实现过程及测试结果等内容。论文需要规范格式,详细描述系统的功能模块和实现方法,同时附上必要的设计截图和说明。 在...

    答辩pptjava jsp ssm mysql 062理发店管理系统.ppt

    在设计和实现系统的过程中,遇到了许多的困难,包括系统逻辑功能不合适和系统设计中出错等问题。但是,通过查询大量的网上资料、与同学和老师进行请教和讨论,终于完成了系统的设计和实现。 系统的设计和实现过程中...

    C语言银行管理系统设计.doc

    综上所述,这个C语言银行管理系统设计项目涉及到了C语言的基础知识,包括数据结构、函数设计、文件操作和用户交互等多个方面,是学习和实践C语言编程的良好实例。通过这样的系统设计,可以提升学生的编程能力和对...

    基于Android的微型OA系统的设计.pdf

    本文将深入探讨如何设计这样一个系统,包括其架构、功能模块、开发工具和技术栈的选择,以及实现过程中的关键点。 首先,微型OA系统设计的基础是理解Android客户端应用开发的基本原理。Android应用主要由组件...

    毕业设计(论文)-基于-asp-net-的网站设计全稿.doc

    在毕业设计中,基于ASP.NET的网站设计是常见的选题,因为它能够帮助学生深入理解和实践Web开发的核心技术。 【系统需求分析】 在进行ASP.NET网站设计时,首先需要进行系统需求分析,这包括了解目标用户群体、确定...

    企业安全体系架构分析:开发安全架构之综合架构

    综合架构的设计不可能只考虑或者过分的考虑安全性,业务架构与安全架构的综合分析才是一个综合架构应该考虑的事情。那么如何做到鱼与熊掌兼得?这里涉及一个问题,业务架构应该是什么样子的?初期为了更好的融入架构...

    三层楼电梯plc控制系统设计与调试.pdf

    通常,设计过程分为多个阶段,如收集资料、电路分析、系统设计、功能测试、论文撰写和答辩准备。这个过程中,学生需要不断与指导教师沟通,解决设计中遇到的问题。 5. 面临的挑战与解决方法: 在设计与调试过程中...

    明镜小区住户信息管理系统设计与实现.pdf

    《明镜小区住户信息管理系统设计与实现》 在当今信息化社会,传统的住户信息管理方式已经无法满足日益增长的管理需求。明镜小区住户信息管理系统旨在解决这一问题,通过设计和实施一套高效、便捷的管理系统,以提升...

Global site tag (gtag.js) - Google Analytics