下面列出了java web系统整体设计时需要解决的几个问题,肯定不够全面和深入,欢迎大家补充和交流,呵呵。
系统架构的工作是需要长期一线编码经验的,管理方向的项目经理之类的应该较少参与,长期非一线人员主导了架构及细节工作,很可能设计出来的系统缺乏根据,个人认为此类系统具备较好的成长性的可能性较小。
1. 应用层架构
1.1 子系统的划分
子系统的划分只存在于分布式系统中,通常情况下,子系统的划分需要从业务和技术两个维度来考虑,以业务分析作为划分依据,以实现的复杂度、合理性、性能等作为要求来综合考虑和设计子系统的划分。
1.2 子系统间的通讯方式
子系统之间的通讯方式是否合理和高效,在很大程度了约束和决定了系统的整体性能、扩展性、可维护性等表现。通常的选择包括基于tcp协议、http协议,传输的数据包括二进制流,json格式数据,xml格式数据等。
1.3 事务的选择和定义
1.3.1 选择本地事务还是分布式事务,根据是什么,数据层的架构方式对事务模式的选择有较大的影响,需要重点分析。一般不建议采用分布式事务,主要因为该方式实现机制较为复杂,因而响应不够迅速。
1.3.2 分布式系统要考虑子系统之间接口的事务方式,采用什么方式可以较好的保证系统数据完整性和性能。
曾经在一个企业应用项目,架构师采用自定义回滚接口的方式来保证子系统见消息传递的事务处理,实践证明也是一种可行的方式。参与的一个互联网项目,采用了调用失败后定时再次调用的方式从某种程度降低子系统间接口传递消息失败的几率的方式,虽然从逻辑上讲不是比较理想,但比较实用,慢慢进化吧。
1.2 逻辑架构设计
主要和业务相关度较大,在对业务的深入分析和理解的基础上,归纳总结出合理的逻辑模型是最终的目标。
逻辑模型基于业务,并进行抽象,根据业务和实际需求,需要确定大的方向,包括是设计 为集中式系统还是分布式系统,如果是分布式系统,那系统如何拆分是进一步要解决的问题。
1.3 部署架构设计
部署架构一般包括网络拓扑架构、系统部署架构。网络拓扑架构主要任务是完成系统的网络设备的选择,如何组合和设计,例如根据网络安全的需要,合理地划分网络安全区域;根据需要选择防火墙、路由器、网关等网络设备,以及设计为既能保证安全,又能保证尽量简单的结构,减少不必要的“跳”,就减少了系统的复杂度,减少了运维和监控的工作难度。
1.4 web服务器的选择,是选择tomcat级别的还是应用服务器。
web服务器轻量级,免费开源是很好的优势,对于中小型项目已经够用。较大型或对web服务器的稳定性、扩展性、技术咨询较高的项目,采用应用中间件也是较好的选择,毕竟商业的软件,技术支持方面有优势。
1.5 .怎样访问数据库,是选择jdbc的方式还是使用持久层框架。
对于大数据量的系统,建议采用jdbc方式。原因是采用hibernate等持久层框架会提高开发效率,但性能方面没有保证。毕竟我们选择框架时是需要根据的,这个关键点上要重点考虑系统负载加大后,如何较好地进行系统的性能优化,而不能只考虑是否有利于提高开发效率。
2.数据层架构设计
2.1 cache软件选择
目前在用户量数据量较大的系统中,通常在数据库软件之上会添加一层cache来提供数据访问的支撑能力。
互联网软件中用户访问压力较大,数据量也很大,仅仅通过DB无法满足系统吞吐量的要求,惯常的做法是将数据首先存储到cache软件中,然后异步存储到DB中。cache提供高效地实时数据访问能力,DB提供数据的持久化能力。目前常用的cache软件包括redis和memched等,都比较成熟可用。
2.2 选择数据存储软件
选择数据库存储还是nosql,需要进行分析和判断。目前,常用的方式是两种合理的组合。
较核心和关键的数据一般对数据的一致性和完整性要求较高,通常选择关系型数据库来存储。
日志等非关系型数据一般选择nosql软件,mangodb等是通常的选择。
2.3 选择数据产品的存储模式
对于数据库来说,首先考虑如何实现load balance、failover、scale和restore。
3. 负载均衡设计
3.1 web层
3.2 数据层
4. 扩展性
3.1 web层
3.2 数据层
5. 高可用设计
5.1 web层
5.2 数据层
相关推荐
根据给定的标题和描述,“Java高手真经系统架构卷Java Web系统设计与架构UML建模+设计模式+面向服务架构”,我们可以深入探讨几个关键的IT知识点:Java Web系统设计、UML建模、设计模式以及面向服务架构(SOA)。...
这个系统基于Struts框架进行开发,该框架是Java社区中广泛使用的MVC(模型-视图-控制器)架构模式的一个实现,有助于提高代码的组织结构和可维护性。JFreeChart库则用于生成数据图表,它在Java世界中是处理统计图表...
通过这个项目,开发者可以全面了解和实践Java Web开发流程,从需求分析、数据库设计、编码实现到测试上线,锻炼实际问题解决能力。同时,这也是一个良好的起点,为今后的Web开发生涯打下坚实的基础。
下面我们将深入探讨权限管理系统的几个核心概念和实现方式。 1. **权限管理基础** 权限管理主要涉及到角色(Role)、资源(Resource)和操作(Action)三要素。角色代表用户群组,拥有特定的一组权限;资源是系统...
本项目旨在构建一个基于Java Web技术的通讯录管理系统,它采用B/S架构,即浏览器/服务器模式,由前端用户界面和后端服务器两大部分组成。系统的主要目标是提供用户登录、注册、密码修改、联系人信息存储、查询以及...
总的来说,"基于Java Web的网上投票选举系统设计"是一个综合性的项目,它涉及到Web开发的多个重要环节,能够帮助开发者巩固和提升Java Web开发技能,同时提供了一个实际应用场景来锻炼问题解决和项目管理能力。...
Java Web编程课程设计选题系统通常是为了让学生实践Web应用程序的开发流程,包括需求分析、设计、编码、测试以及文档编写。这个选题系统可能涵盖了诸如用户登录、题目浏览、选题提交、管理员管理等功能。 首先,...
这个系统主要功能涵盖了论文的管理操作,包括添加论文、删除论文、修改论文信息以及查看日志列表,为用户提供了一套完整的论文数据管理解决方案。 首先,我们要理解Java Web的基本概念。Java Web是指使用Java技术...
在Java Web开发中,主要涉及以下几个关键技术点: 1. **Servlet**:Servlet是Java EE规范的一部分,用于扩展服务器的功能,处理HTTP请求。它们是Java类,运行在Web服务器上,接收并响应客户端的请求,可以生成动态...
本系统的设计目标主要围绕以下几个方面展开: 1. **数据采集**:实现对农田环境参数(如温度、湿度、光照强度等)的实时监测与数据采集。 2. **数据分析处理**:通过算法对采集的数据进行分析处理,提取有价值的...
下面将从几个方面详细阐述基于Java的Web开发技术,包括Java语言的特点、Web开发技术概述、以及基于Java Web开发中常见的设计模式。 首先,Java语言的几个显著特点,如简单性、面向对象、跨平台、分布性、安全性,使...
在Java Web开发中,我们需要从以下几个层面进行编码: 1. **前端界面设计**:使用HTML、CSS和JavaScript等技术创建用户界面。 2. **后端业务逻辑处理**:利用Java编写服务器端程序,处理业务逻辑,如表单提交、用户...
“博客系统”标签明确了项目的类型,这类系统通常包含以下几个关键知识点: 1. **用户管理**:包括用户注册、登录、个人信息管理等,通常涉及到身份验证和授权。 2. **文章管理**:用户可以创建、编辑、删除自己的...
在Java WebServer的源代码中,我们可以找到以下几个关键部分: 1. **服务器启动与配置**:源代码中通常包含一个主类,负责启动服务器并进行基本的配置,如监听的端口号、工作目录等。这部分代码会涉及Java的Socket...
在Java Web新闻发布系统中,主要涉及到以下几个核心知识点: 1. **Servlet与JSP**:Servlet是Java服务器端编程的基础,负责处理HTTP请求和生成响应。JSP(JavaServer Pages)则是一种动态网页技术,可以将HTML代码...
此外,实践中遇到的问题和解决方案也会加深对Java Web开发的理解,提升解决问题的能力。总的来说,这是一个全面且实用的学习资源,对于想要踏入Java Web开发领域的学习者来说,是一次宝贵的实践机会。
在实际应用中,该系统可能包括以下几个主要功能模块:用户注册与登录、车次查询、座位选择、订单支付、退票改签等。每个模块都需要与后台数据库进行交互,例如,查询车次信息时,系统会通过Hibernate调用SQL语句从...
这个资源包很可能会讲解以下几个核心知识点: 1. **Servlet与JSP**:Servlet是Java Web的基础,用于处理HTTP请求,而JSP(Java Server Pages)则是一种用于创建动态网页的技术,它将HTML代码与Java代码结合在一起。...
在文件列表中,"java web"可能是项目的主要源代码目录,可能包含以下几个部分: 1. **src**:源代码目录,包含Servlet和JSP文件。 - `Servlet` 类:这些类继承自HttpServlet,实现doGet和doPost等方法,处理HTTP...