1.分布式架构的引入
1.1传统的架构
以前做的小项目,在小范围内使用的时候,我们只用了一台服务器就完成了整个项目的运行,即项目设计到的东西都部署到一台服务器上
但是当有1000名用户同时登录服务器进行访问时,这时你的程序会运行的特别慢甚至会崩,就提出了以下解决的问题
1.2 1000并发量
此时想到的办法就是增加服务器做tomcat集群,分散访问量
但是如果并发量再高,如10000的并发量,按这个思路就需要20台服务器。当tomcat集群中节点数量增加时,服务器能力先增加后下降(要进行session的复制)。集群中节点数量不能太多,一般在5个左右,针对高并发的情况,引入下面解决方案
1.3 分布式架构
![](https://i-blog.csdnimg.cn/blog_migrate/b2ac2d051ea10911186329f130148a73.png)
按功能点把系统拆分成独立的功能,单独为每个结点添加服务器,当某个功能的访问量多时,就单独的为这个功能多添加服务器即可,这样分布式里也用到了集群
分布式架构:把系统按模块拆分成多个子系统,多个子系统相互协作完成业务流程,系统之间需要进行通信(即每台服务器上的东西不一样,但是他们之间要协作完成业务工作)
集群:同一个工程部署到多台服务器上(即每台服务器上的东西是一样的)
分布式架构优点:
1) 把模块拆分,使用接口通信,降低模块之间的耦合度。
2) 把项目拆分成若干个子项目,不同的团队负责不同的子项目。
3) 增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。
4) 可以灵活的进行分布式部署
分布式架构缺点:
1) 系统之间交互需要使用远程通信,接口开发增加工作量。
2) 各个模块有一些通用的业务逻辑无法共用。
为解决此问题,有引入基于SOA的架构
1.4 基于SOA的架构
SOA:Service Oriented Architecture面向服务的架构。也就是把工程拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现
服务层按业务功能划分,这样解决了不同模块之间都公共的逻辑的问题了,表现层要用哪个服务就调用哪个服务即可,这个架构是基于SOA的分布式架构
2.Maven是什么
Maven是一个强大的项目管理和项目构建工具,利用java开发,属于Apache下的开源项目。maven是跨平台的,并且功能很强大,能够帮助使用者完成从清理,编译,测试,生成报告,打包和部署的一系列操作过程。maven标准化了项目的构建过程,有利于团队之间的协作。此外,maven可以有效的解决java项目中jar包依赖问题,解决由此带来的版本不一致等问题。maven还提供了一个免费的中央仓库,几乎可以找到任何开源类库。
3.Maven的好处
maven有两个核心:依赖管理,项目构建,也是使用maven的好处
3.1依赖管理:对jar包的管理
我理解的就是仓库对jar包的管理
![](https://i-blog.csdnimg.cn/blog_migrate/3e48b3cbd016524517357a66e646e509.png)
1)通常一个web项目需要依赖很多jar包,而这些jar包可能又依赖另一些jar包,这些包可以成为冗余包,使用maven后,web项目只引进项目依赖的jar包,让项目保持基本的依赖,排除了冗余的jar包
2)当需要修改jar包的版本号时,只需修改一下pom.xml中的版本号即可,他会自动依次到本地仓库,私服,和中央仓库上去找响应版本的jar并加载
通过pom.xml在仓库中一层层的找到想要的jar包
3.2项目构建:通过命令进行项目构建
构建一般指(或是包括):
1.下载依赖
2.将源代码编译成二进制代码
3.打包生成的二进制代码
4.进行单元测试
5.部署到生产系统
这些过程可通过一条或几条命令自动的完成,工作量大量减少
4. Maven的使用
4.1常用命令
mvn install:在本地仓库Repository中安装当前工程的jar
mvn compile:编译项目代码,将java文件编译成class文件
mvn clean:清除编译产生内容,可配合别的命令一起使用
mvn tomcat: run 启动tomcat
注意:在eclipse中使用这些命令时,不需要加mvn,如mvn clean直接写clean即可
4.2文件讲解
1) pox.xml:maven项目的核心配置文件
如web层,依赖service层接口,pojo,spring,zookeeper等,就需要在web层的pox.xml文件中配置有关上面这几个接口或插件的有关信息,如版本控制信息;pojo类不依赖任何东西,所以它的pom.xml文件中只有它自己的一些说明,如:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.e3mall</groupId>
<artifactId>e3-manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>e3-manager-pojo</artifactId>
</project>
2) target文件夹
它包括两部分:一部分是:编译的文件即将java文件编译成.class
文件,另一部分是额外的一些文件,位于m2e-wtp文件夹下,这一部分是永远存在的,但是不需要部署
3)整体目录
maven项目对项目中的文件进行了细分,什么目录放什么文件
5.Maven项目为何有父工程之分
搭建的详细过程参照:https://blog.csdn.net/sinat_31726559/article/details/52133238
两个Web项目之间,就是通过war包的方式进行引用的
总体结构是这样的:
e3-parent:父工程,打包方式pom,管理jar包的版本号。
| 项目中所有工程都应该继承父工程。
|--e3-common:通用的工具类通用的pojo。打包方式jar
|--e3-manager:服务层工程。聚合工程。Pom工程
|--e3-manager-dao:打包方式jar
|--e3-manager-pojo:打包方式jar
|--e3-manager-interface:打包方式jar
|--e3-manager-service:打包方式:jar
|--e3-manager-web:表现层工程。打包方式war
父工程:父工程中定义依赖jar包的版本和Maven插件的版本信息,为pom工程
common工程:放通用的工具类。也需要继承taotao-parent工程。这个工程能打成jar包,被其他工程能引用,为pom工程
manager工程:是一个聚合工程,包括pojo模块,service模块,service接口模块,dao模块
web模块:前端工程,跟前端有关的jsp,css,js,springMVC等
那么什么时候建Maven Project,什么时候建Maven Module???
Maven Project可以理解为父工程。
Maven Module可以理解为子工程。
创建Maven Module工程必须有存在的父工程,maven就是通过父子工程进行工程管理的
6.jar、war、pom 打包方式区分
jar:对一些class、properties文件打包,是文件封装的最小单元;包含java类的普通库,资源(resources)、辅助文件(auxiliary files)等。在maven中即是打包src/main/java和src/main/resources资源文件夹下的所有文件
war:Servlet、JSP页面、JSP标记库、JAR库文件、HTML/XML文档和其他公用资源文件,如图片、音频文件等即包含全部的web应用程序;但是需要注意war引用war的时候会将应用war的资源全部拷贝到当前war的相同文件下,重名的文件会被替换
pom:聚合工程得打包方式,只要有子工程,就用pom的打包方式
7.勾选create a simple project
这样建的项目目录更标准
8.web工程和service工程两个工程是如何实现通信的
详情请见下片博客: