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

java项目架构总结

阅读更多
  今年又开始写技术博客了,以后也会定期多写写,这样能让自己的思路更加清晰明了。
  去年一个项目做了一年了,简单点说就是一个用户后台系统,然后配置一个APP和Web页面;包含的技术点是包罗万象,这里主要谈下系统架构的问题。项目刚开始,和做传统的web项目是类似的,按MVC模式一个工程包含了PC Web前端页面,数据模型层,数据库事务层和业务逻辑层,再一个Android工程做App客户端;期间为了解决并发,负载,通讯等问题也引入了Redis,阿里云OSS,Netty等一系列中间件.但项目总体架构还是基本没变,项目前期由我们2个全能战士,客户端服务端一肩挑写出来就上线了,随着项目需求和功能的逐步增多,开发人员也增加了不少,现在已经有10多个开发人员了。
  随着项目越来越大,功能越来越多,架构的问题也就随之来了,每次版本更新都是一个无比繁琐和蛋疼的过程。比如需要优化前端UI了,但web前端和后台项目都在一个工程里,光前端把工程启动起来,就要安装各种开发环境和工具,前后端写在一起之前又没有规范写法,导致前后代码高度的耦合,前端没有一点ajax,js等前后交互开发经验,根据无法去理解和优化前端,最后也只能让前端优化一些 css和图标了;这种架构也不太适合多人协同开发,虽然有svn这种代码异步提交合并机制,但也还是会出现代码间相互覆盖的问题,因为之前也没分得很细,很多功能模块可能就直接一个action一大坨,面对这么一坨庞大的代码,新同事的学习成本也是越来越高;工程编译的时间是越来越长,之前可能启动几秒就启动了,甚至热更新也没任何问题,到后来启动基本是30多秒到一分钟,有时热更新下class类web服务器需要重新编译时,基本就瘫痪了;最要命的就是代码的更新和维护成本,以前更新下代码随便测试OK了,就可以很放心的往服务器上丢了,现在即使是一个小小的改动,不经历内网,公网,样机批量测试个2-3轮,更新上传了觉都睡不好;发布更新的成本就更多了,APP客户端就不说了,几十个APP编译的连电脑都换成服务器配置了,服务器上每次更新一个版本,白天都不敢去动,出了什么更新问题,微信,QQ和电话基本就像打仗一样了,所以每次都熬到半夜才能发布下更新,更新发布到凌晨也是经常的事情了;再就是分支部署的问题,每增加一台独立的服务器,有时候可能就一个数据库不同而已,但基本是所有中间件和工程都要部署一次,更新版本是也一样,更新了还得挨个去测试。
  说了这么多蛋疼的地方,终归还是架构方式不够科学,不过在早期也算是很不错的一套技术架构了,不过随着互联网的发展也越来越不适用了。原因有2个,一个是架构项目耦合度太高,另外一个是架构的设计方式面向的是功能模块,而不是面向的服务。通过拆分项目,比如将web前端拆分独立成一个工程,这样前端专注于页面开发即可,也不用安装后端相关的开发环境和工具了,与后台的交互完全可以通过事先定义的服务接口进行开发;将数据库事务层,业务逻辑层设计成接口,拆分成一个独立的接口服务工程;用于和web前端和后台服务实现端交互;将后台服务实现拆分成独立的工程,用于实现数据事务层,业务逻辑层。用于手机和微信浏览的前端H5页面拆分成独立工程;这样加上手机APP端,原来的2个工程就被拆分成5个工程了,相互之间耦合度大大减低,代码的维护和发布成本都减少了很多。
  工程拆分后,其实就相当于将原来一个独立垂直型的工程变成了一个分布式的工程,不同工程间的调用我们一般采用SOA面向服务的设计方式去做,比如早期企业级的EBS企业总线,一条总线负责调度不同的项目服务,我目前了解过的一些服务框架还有阿里的dubbo框架,Spring cloud等,其中dubbo是基于java Rpc远程调用和zookeeper注册服务中心实现的服务框架,可以看做Spring cloud其中的一个分支点,通过这些服务框架,就可以在这些不同进程里的项目里相互调用,无论是代码的复用还是更新维护成本都方便了很多,比如我们现在再新做的一个项目,很多功能代码基本都是相同的,完全可以复用,而按现有架构的做法就是复制代码到新的工程,那以后更新维护这部分代码,就得在2个工程里操作;通过面向服务架构后也很方便后续问题的定位和分支节点拓展,比如发现服务实现层负载过高,就只加机器部署服务实现项目,而不是整体都部署,对于一些有差异化的分支节点的部署和维护也非常的方便。最方便的就是大家以后开发完全可以相互独立的进行,因为大家面向的都是一个服务接口,而不用关心接口后面的具体实现,事前放一个测试样例数据即可完成开发,后续服务实现完成后替换过来即可,而且发布更新时也不用担心相互影响了,更新什么就只会影响当前的功能。
  目前应该有了基本的架构思路了,也做了一些服务框架的demo,比如dubbo,但为了追求项目开发进度和稳定性,短期内可能还是会用原来的架构去开发,虽然说了很多缺点,但更多的其实就是麻烦和繁琐,稳定性和成熟性上还是没有任何问题的,现代技术之所以日新月异,除了功能创新和性能优化外,很重要的一点也是为了解决我们这些开发人员在开发过程中遇到的各种不便捷和不合理的问题。
分享到:
评论

相关推荐

    Java项目:健身俱乐部管理系统(java+SSM+Mysql+Jsp)

    项目介绍: 基于jsp+mysql+Spring+mybatis的SSM健身房管理系统 运行环境: jdk 1.8 IDE环境: Eclipse,Myeclipse,IDEA都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可,理论上Tomcat版本不是太老都可以。 硬件环境...

    java web项目技术总结

    java web项目技术总结,从架构到技术分解,以及技术的使用,还有关键性业务设计与实现(在线聊天设计、订单多线程技术、多线程查询数据库技术、风格切换技术等)

    Java面试知识总结.zip

    实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考...

    Java项目之分布式架构网上商城(源码 + 说明文档)

    Java项目之分布式架构网上商城(源码 + 说明文档) 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 9 3.1.4 运行可行性 10 3.2系统性能需求分析 10 3.3系统功能分析 10 3.4...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    Java面试总结.zip

    实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考...

    java面试问题个人总结

    简单介绍项目的整体架构。参与某个模块的开发。就要求你说一下这个模块的业务及设计。 1.3 会问一下JAVA的专业技能 后面详细讲解 1.4你还有什么需要询问我的吗 公司要做的项目?项目中会使用一下什么技术? ...

    Java后台工程师面试总结.zip

    实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考...

    Java项目之jspm基于SSM架构的网上书城系统(源码 + 说明文档)

    Java项目之jspm基于SSM架构的网上书城系统(源码 + 说明文档) 第二章 开发技术介绍 1 2.1 系统开发平台 1 2.2 平台开发相关技术 1 2.2.1 Java技术 1 2.2.2 mysql数据库介绍 1 2.2.3 MySQL环境配置 1 2.2.4 B/S架构...

    基于Java软件项目开发岗位的企业实践总结报告.pdf

    基于Java软件项目开发岗位的企业实践总结报告.pdf

    Java开发经验及技巧集大汇总.pdf

    对于 java 开发项目的总结: (1)做项目时,不应该有 java 参考代码,这一点并不是绝对的,在起初的时候可以适当的参考别人写的,在后来就不能参考别人代码了,否者会形成眼高手低的习惯。 (2)做出来的系统一定...

    Java项目之基于微服务架构的租房网的设计与实现 (源码 + 说明文档 + 演示视频)

    Java项目之基于微服务架构的租房网的设计与实现 (源码 + 说明文档 + 演示视频) 4.系统设计实现 19 4.1 设计原则 19 4.2 开发工具及环境 19 4.2.1IntelliJ IDEA安装 19 4.2.2配置JAVA运行环境 25 4.3数据库设计 29 ...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc Java面试文档题库 Java面试笔试题库.CHM java面试笔试题库资料合集.zip Java面试问题集.pdf Java面试题以及答案(小生).pdf java面试题(题库全).doc JS ...

    Java项目之springcloud基于web的智慧养老平台(源码 + 说明文档)

    Java项目之springcloud基于web的智慧养老平台(源码 + 说明文档) 3系统分析 8 3.1可行性分析 8 3.1.1技术可行性 8 3.1.2经济可行性 8 3.1.3操作可行性 8 3.1.4 运行可行性 9 3.2系统性能需求分析 9 3.3系统功能分析 ...

    《Java程序设计实训》报告 多人聊天室

    5、使用C/S架构,对网络编程有一定的了解 二.项目概述 运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包等。程序实现...

    Java项目之jspm影院管理系统(源码 + 说明文档)

    Java项目之jspm影院管理系统(源码 + 说明文档) 第二章 开发技术介绍 1 2.1系统开发平台 1 2.2平台开发相关技术 1 2.2.1Java语言简介 1 2.2.2mysql数据库介绍 2 2.2.3MySQL环境配置 2 2.2.4B/S架构 2 2.2.5JSP技术...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc java面试书籍源码 Java面试文档题库 Java面试笔试题库.CHM Java面试问题集.pdf Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc ...

    大型B2c互联网分布式电商项目(javashop完整)内附数据库+详细技术讲解视频+每一步需求分析等等等

    本资源是基于开源项目javashop的升级版b2c大型分布式电商项目,内容包括项目需求的分析、项目流程图绘制、电商分布式项目架构搭建、功能实现(涉及到的技术有:SSO单点登录,第三方支付平台对接,如支付宝等,solr...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc java面试书籍源码 Java面试笔试题库.CHM Java面试问题集.pdf Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job....

Global site tag (gtag.js) - Google Analytics