`
housheng33
  • 浏览: 239228 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

原创:基于j2ee的架构搭建和技术选型

 
阅读更多
进来的友友们,这是我申请cn博客后写的第一篇文章。这些知识理论并非晚辈我所亲身实践,是我看了些架构相关的书籍的小总结,生怕自己忘记了,所以到博客以文字表达出来,欢迎前来抛砖扔蛋。篇幅不是很长,请耐心地看完并给点反馈。尊重他人的劳动,积小德而成大义嘛,小编以泪言谢!



本文章的骨格轮廓:

先来引一下标题吧,“架构的搭建,技术选型”需要我们先了解:

1.什么因素会取决于架构的选型?

  2.1 应用是否需要分布式

  2.2 应用是否需要在集群环境中运行

  2.3 持久化数据的存储策略

2.架构对应用系统的影响主要有哪些?

  3.1 性能

  3.2 可伸缩性

  3.3 安全



分布式的讨论

  集中式和分布式体系结构的选择,会影响到应用系统的性能,易实现性,可缩放性,坚固性,支持的客户类型,等等......

分布式应用很复杂,并导致显著的运行时开销,而且要求设计工作要保证令人满意的性能。



  分布式体系结构提供的好处有:

  1.支持许多需要一个共享式业务对象“中间层”的不同类型客户的能力。这个考虑因素不适用于Web应用,因为Web容器已提供了一个中间层。

  2.部署任一应用构件到任一物理服务器上的能力。在某些应用中,这对负载均衡来说是非常重要的(请想象一下当一个Web接口做少量工作而业务对象做密集型计算时的一种场景。多个物理服务器总吞吐量可以通过消除瓶颈来得到性能的改善)

  3.为了获得对每个应用构件被部署在何处的控制权,以便改进可缩放性和可靠性。



  分布式架构不是实现坚固,可缩放应用的唯一方法,倘若有选择的余地,最好是通过选择一个非分布式解决方案来避开分布式应用的各种复杂性。



集群的讨论

  集群的风格是多种多样,不管哪种风格,EIS层的资源(如数据库)都是在独立的服务器上,这会牺牲部分性能,无论如何都无法避免进程之间通讯的性能损失,但可以获得管理上的优势。集群方案的选择取决于系统的诸多因素,没有最好的集群方案,只有最合适的。

  集群的挑战:

  1.路由

  发送到集群的请求如何被路由到具体的服务器?

  2.状态信息的同步

  同步session数据?写入存储进行共享?采用cookie传递?

  3.如何保存数据缓存信息的同步

  缓存同步?分布式缓存?

  4.文件同步

  使用共享文件系统?写入存储进行共享?



1.对象分布集群

  这种模型的目标是通过把web和业务对象分布到集群中的不同机器中,来获得负载平衡和可伸缩性。所有的业务调用都通过RMI/IIOP,或是XML和web services来进行。把大量的负载组件分布到多台服务器,就是整个用用部署到多台服务器,有着很好的伸缩性,并还能获得硬件(CPU,内存)的支持。

对象分布的关键问题是,获得可伸缩性的同时以大幅度牺牲性能对代价的。远程方法的调用,因为网络传输以及序列化和反序列化的开销,相比本地调用差好几个数量级。在底层发生的基础设施开销往往要比实际传输数据的开销要大,所以我们应该尽量减少分布式调用的次数,即便是一次性传输大数据量。

在某种立场来说,分布对象还对性能有提升的作用。譬如业务功能的操作非常的耗费CPU时间,相对于远程调用的代价要大的多,这种情况来说,大量的服务器组成的专用集群能够很好的应付它。不过类似这样的案例非常罕见,而且,对于长时间才能完成的操作,通过消息队列(message queue)进行异步分布可能是远程方法调用的更好选择。





2.针对部署的集群

  是把所有的组件都部署到集群中的每个节点中去。这种模型下,请求到达节点之前就已经进行了路由分配,而不是在单独的组件调用是进行分配。请求被分发到相应的服务器后,所有的调用都是本地调用。



3.农场集群

  整个应用运行在多台服务器上,但是每台服务器都不知道其他服务器的存在,多台服务器共享资源(如数据库),不需要进行通讯。就是说服务器之间不需要进行状态复制







持久化数据的存储策略

  还记得不久前在网上有这么一句话:“很多大规模的网站都经历了从集中式到集群,再到读写分离,再到垂直分区,再到水平分区,这是一个必然的成长过程!”。这句话对与否呢?我就不敢瞎评了,很多事物都不是对与错所能衡量的,而是立场问题。各位前辈的意思是怎样,请在回复中结合自己的经验和依据谈谈。。。



  在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列,在数据库集群方面, 很多数据库都有自己的解决方案, Oracle, Sybase 等都有很好的方案,常用的 MySQL 提供的 Master/Slave 也是类似的方案,您使用了什么样的 DB,就参考相应的解决方案来实施即可,上面提到的数据库集群由于在架构,成本,扩张性方面都会受到所采用 DB 类型的限制,于是我们需要从 应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案,我们在应用程序中安装 业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略 对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户 ID 进行表散列,这样就能够低成本 的提升系统的性能并且有很好的扩展性,sohu 的论坛就是采用了这样的架构,将论坛的用户,设置,帖 子等信息进行数据库分离,然后对帖子,用户按照板块和 ID 进行散列数据库和表,最终可以在配置文件 中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能;

  上面是我在网络上抄袭的,下面总结下我自己的实践后的小经验。以MySql为例子,MySql的最新版本支持主从复制(sql服务器间的数据同步),开启主服务器的二进制日志和配置主从服务器之间关系的授权,就可以实现MySql服务器的集群。当然了,这里还有负载均衡的分发尚未定义,不必担心,反向代理MySql Proxy来帮你解决,根据需要配置LUA脚本来描述指定转发规则,就可以实现你所想要的负载均衡效果。(我听说,有的数据库对集群的支持不是很好,看到这句话心里可真够揪心的啊)。到了这里,还可以根据需要,实现数据的读写分离。DB部署在集群的环境当中,我们只需要配置LUA脚本便能控制读写请求的分离转发,写操作由主服务器来处理,并同步到各个从服务器,读操作分发到各个从服务器去处理。这样就可以按需来增加或移除DB服务器,达到硬件资源的充分利用。如果这种架构还未能满足日益增长的需要,可以进一步的优化,设计数据存储的垂直分区,原理是把耦合度为零或较小的数据进行物理分区,从而赢得更多的硬件资源和可管理性。DB的垂直分区会对应用层有较大的影响,所以,在开发设计的前期就应该对以后的扩展做好充分的考虑。数据存储的垂直分区会带来诸多的问题(远程调用,跨数据源事务,单点故障等等),解决这些问题都有些开源框架组件和成熟的硬件产品,如RMI,webService,JTA,F5等等。。。在进一步往深度优化的话,就是水平分区了,原理是将同一数据表里的记录通过特定的算法分离到多个数据表中,从而可以部署到不同的数据库服务器上。水平分区要求逻辑层面较高的算法,篇幅太长了,小编就不在此罗列了。倘若再进一步优化的话,就得要去研究数据库原理和联系数据库商家的技术支持了。





总结:

  选择架构,技术的依据是什么?一切出发于业务需求,性能指标,安全指标,扩展性,资金等等...

  正如Rod Johnson所说:是基于实践证据和亲身经历,而不是追寻偶像崇拜或者门户之见。再补充一句,不要过分于依赖哪些花哨的“架构蓝图”,JPetStore,Spring side,EasyJWeb这些能够给你一个很好的参考。



  就这样完了?我写这篇文章之前有着千言万语,到了写的时候却欲言又此。对自己无语。。。总体地看了看觉得文章很单调,下次添点图文什么的可能会有更好的可读性。好了,理论和实践是存在差距的,见证真理都得要动手的,呵呵,废话就不多说了,你懂的!
分享到:
评论

相关推荐

    基于J2EE的B2C电子商务系统开发

    系统需求分析和设计:明确电子商务网站的功能需求,确定系统的基本架构和技术选型,设计数据库模型等。 搭建开发环境:安装和配置Java开发环境,如JDK、Eclipse等,以及相关的框架和组件。 前端页面设计和实现:...

    J2EE中文教材

    - **技能提升**:对于希望深入学习J2EE技术的开发者来说,建议关注最新的J2EE规范和技术动态,同时加强实践能力的培养。 通过以上知识点的学习,可以全面掌握J2EE技术的核心内容,为构建稳定高效的企业级应用打下...

    基于J2EE框架的个人博客系统项目毕业设计

    项目附带的论文可能详细阐述了系统的设计思路、技术选型、实现过程以及遇到的问题和解决方案,为读者提供了深入理解项目的技术参考。 通过这个基于J2EE的个人博客系统项目,不仅可以掌握J2EE的相关技术,还能学习...

    利用MyEclipse构建Struts+Hibernate+Spring的J2EE系统经典例子

    #### 系统架构与技术选型 - **Struts**:用于构建MVC架构,处理用户的请求并转发到相应的视图层或模型层。 - **Hibernate**:作为持久层框架,提供对象关系映射(ORM)功能,简化数据库操作。 - **Spring**:管理...

    基于J2EE的B2C电子商务系统开发(论文+系统+开题报告+文献综述+任务书+答辩PPT+中期报表+外文文献+说明书).zip

    论文部分详细阐述了项目的需求分析、系统设计、技术选型、架构搭建、功能实现及性能优化等步骤。需求分析是项目启动的第一步,它明确了系统的功能目标,如用户注册登录、商品浏览、购物车、订单管理、支付接口等。...

    平台架构师的工作职责岗位职责.pdf

    平台架构师的角色涵盖了从系统设计、技术选型到团队指导的多个层面,需要深厚的技术功底和丰富的实践经验。他们不仅需要关注当前系统的稳定性和性能,还需要预见未来业务发展,设计出可扩展的架构,以适应快速变化的...

    Expert+One-on-One+J2EE+Design+and+Development.pdf

    1. **J2EE架构**:介绍J2EE平台的基础架构和技术组件,包括Servlets、Enterprise JavaBeans(EJB)、JSP页面和Servlet过滤器等。 - **架构原则**:解释了如何设计健壮的多层架构。 - **组件类型**:详细介绍了...

    J2EE博客精华

    综上所述,这些知识点覆盖了J2EE开发的多个方面,从环境搭建到应用部署、从技术选型到性能优化,为开发者提供了丰富的资源和实践经验。对于初学者而言,可以从简单的环境搭建开始学习;而对于有经验的开发者,则可以...

    精通J2EE应用程序开发

    #### 三、J2EE开发模式与技术选型 随着技术的发展,J2EE开发者面临着更多的选择。例如,是否采用轻量级容器(如Spring)而不是传统的EJB容器,或者使用哪些Web框架(如WebWork、Tapestry)等。这些选择使得J2EE的...

    平台架构师的工作职责.docx

    2. **需求分析和技术选型**:他们负责分析系统及相关产品的需求,进行技术可行性研究,并选择最适合的技术栈,例如J2EE框架、微服务架构(如SpringCloud)、数据库(Oracle、MySQL、PG)等。 3. **代码编写和指导**...

    J2EE 高级 试题

    2. **设计阶段**:制定软件架构和技术选型方案。 3. **编写文档**:包括设计文档、测试计划等。 4. **环境搭建**:准备开发所需的软硬件环境。 #### 十七、Handset描述(未按题目要求,但给出解答) 1. **描述**:...

    系统架构设计师岗位职责.docx

    3. 技术选型:研究技术可行性并做出选择。 4. 自测试和联调:独立进行模块测试,搭建联调环境。 5. 设计文档:负责概要、详细和数据设计,编写工程文档。 6. 问题解决:快速定位和解决产品或系统的问题,分析原因,...

    毕业设计:基于jsp的网上音像管理系统

    这有助于其他开发者理解系统的整体思路和技术选型。 总的来说,这个项目涵盖了Web开发的基础知识,如JSP、Servlet、MVC设计模式、MySQL数据库管理和使用MyEclipse进行Java开发。对于学习和理解Web应用开发流程,...

    IT职业教育系统架构的设计分析与研究-精选教育文档.docx

    2. **应用框架**:基于J2EE构建应用软件基础平台,支持大规模并发访问。 3. **数据库**:选用Oracle数据库,保证数据的安全与高效处理。 4. **应用服务器**:采用Apache Tomcat或Sun Glassfish等成熟的应用服务器...

    Java架构师岗位的基本职责说明.pdf

    1. **系统规划和技术架构搭建**:Java架构师需要根据公司的业务发展战略,进行系统层面的规划,包括选择合适的架构模式和技术栈,确保系统能够适应未来的业务增长和变化。 2. **业务需求分析与解决方案设计**:他们...

    基于JSP的儿童健康保健系统毕业设计论文

    #### 技术选型与开发环境 - **开发工具**:本系统采用Eclipse作为主要开发工具,Eclipse是一款广泛使用的开源IDE(集成开发环境),特别适合Java开发。 - **设计模式**:采用Struts框架作为设计模式的基础。Struts...

    会员管理系统开题报告.docx

    1. **基于J2EE**:利用J2EE平台的接口和框架技术,提高系统的可扩展性和可维护性,实现功能模块的灵活搭建。 2. **B/S架构**:用户通过浏览器即可访问,降低了用户的使用门槛,同时便于系统维护和升级。 3. **便捷...

    基于java-web电商系统设计的开题报告 (2).docx

    - **技术选型**:采用MVC架构模式,利用Java语言、MyEclipse开发平台、Tomcat7.0服务器等工具和技术进行系统开发。 - **开发流程**:从需求分析、系统设计到编码测试,严格按照软件工程的标准流程进行。 #### 六、...

    (完整)基于java web电商系统设计的开题报告.docx

    ### 基于Java Web电商系统设计的...以上内容概述了基于Java Web电商系统设计项目的背景、目标、技术选型、系统设计以及实施步骤等方面的关键知识点。通过这些知识点的学习与应用,可以更好地理解和实现该项目的目标。

Global site tag (gtag.js) - Google Analytics