目录
-
分布式架构
-
系统架构
-
垂直项目架构
-
SOA架构(分布式架构)
-
Dubbo
-
什么是Dubbo
- 作用
- 同类型的技术有哪些
- 如何使用
-
Dubbo调用流程
-
示例图
-
Zookeeper
-
安装
-
Dubbo实例
- dubbo_service
- dubbo_consumer
-
分别配置tomcat
-
分布式架构
系统架构
垂直项目架构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 1特点
2 不管项目多复杂,有多少个模块,全在一个项目中编写
3 项目部署在一个web容器上,适合于 访问量小,用户数不多的业务
4
5缺点
6 耦合度比较高
7 所有功能模板代码都放到了一起,
8 不利于扩展
9 写好了, 测试完了,想要加一个模块非常的困难
10 如果果某个功能出错有问题,所有的功能都需要再重新打包编译,部署效率极低。
11 上线时, 把项目停掉
12 不利于团队协作维护
13 团队协作难度高,如多人使用SVN/git很可能在同一个功能上,多人同时进行了修改,作为一个大而全的项目,可能个人只是需要开发其中一个小的模块的需求,却需要导入整个项目全量的代码。
14优点
15 结构简单
16
结构图
SOA架构(分布式架构)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 1SOA(Service-Oriented Architecture)它是一种支持面向服务的架构。
2
3特点
4 将传统项目中的一个模块,拆分成一个一个项目
5
6优点
7 降低模块之间的耦合度
8 利于扩展
9 利于维护
10缺点
11 结构复杂
12 对于小型项目 ,成本比较高
13特点
14 模块的拆分
15 如果某一个系统访问量比较大时, 可以多部署几台tomcat,
16 当出现高并发的时候 , 通过nigix负载均衡,进行分配访问
17 如果今后, 想要再添加 一个模块, 可以直接在写一个项目,弄台新机器,直接上线
18 业务功能的拆分
19 除了把对应模块拆成一个系统外, 还可以把我们的三层架构拆成对应的服务,把Controller做为一个系统,Dao和Service做为一个系统
20 如果调用多了,一台不够用户了, 可以多部署几台
21 存在的问题
22 在以前Controller调用Service,通过注入进行调用,注入属于是Spring的
23 当Controller在一个服务器中, Service在另一台服务器,是没有办法注入的
24 此时, 可以采用一个技术叫Dubbox,可以实现跨tomcat注入 远程调用
25 Dubbo是的跨服务器,注入的技术,这么多服务,到底是认认证调用谁,怎么知道的呢
26 通过zookeeper注册中心,所有的服务都到zookeeper当中注册一下, 注册后,
27 今后服务之间的调用,就可以通过zookeeper找到对应的服务,通过Dubbo进入注入
28
Dubbo
什么是Dubbo
1
2
3
4
5
6
7
8
9
10
11
12
13 1概述
2 Dubbo是阿里巴巴内部使用的分布式业务框架,2012年由阿里巴巴开源。
3 由于Dubbo在阿里内部经过广泛的业务验证,在很短时间内,Dubbo就被许多互联网公司所采用,并产生了许多衍生版本,如网易,京东,新浪,当当等等。
4 由于阿里策略变化,2014年10月Dubbo停止维护。随后部分互联网公司公开了自行维护的Dubbo版本,比较著名的如当当DubboX,新浪Motan等。
5 经过三年的沉寂,在2017年9月,阿里宣布重启Dubbo项目,并决策在未来对开源进行长期持续的投入。随后Dubbo开始了密集的更新,并将停摆三年以来大量分支上的特性及缺陷修正快速整合。
6 2018.2月,阿里将Dubbo捐献给Apache基金会,Dubbo成为Apache孵化器项目。
7
8基于rpc
9 rpc远程过程调用协议
10 是JDK底层提出的协议,Dubbo只是对这个协议的实现的一个框架技术
11 rpc协议就是跨服务器,跨tomcat
12 可以从一个项目调用另一个项目中的方法
13
作用
- 跨项目调用方法
- 从一个项目中的Controller可以调用另一个项目中的service方法
同类型的技术有哪些
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1Dubbo
2
3DubboX
4 优点
5 传输效率快
6 缺点
7 Controller和Service两个项目必须都是Java语言实现
8
9springCloud
10
11webService技术
12 cfx
13 使用的soap协议,传输的是xml数据
14
如何使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 11.服务层注解
2 service实现类上写@service注解
3 写此注解的时候,注意选包,选的是阿里dubbo下的包
42.Controlle注入
5 使用@refrence注解来进行注入
6 选择也是dubbo下的
73.pojo传输
8 如果Controller和service之间传输pojo实体类,
9 那么实体类必须实现Java的序列化接口
10 序列化
11 网络传输,是通过插在电脑上的网线(双绞线)进行
12 网线当中传输入的是模拟信号,波浪形式的信号,有高电位和底电位 可以使用高底电位 代表 0 或 1
13 网线是插在电脑网卡上,网卡我们又称数模转换器 数字信号和模拟信息进行转换
14 网络传输是模拟信息
15 计算机处理时, 数字信号
16 转换成数字信号后, 进入操作系统, 再根据相应的端口号找到对应的服务处理
17 在Java中只要告诉它,实现序列化接口, JVM就会自动的把实现类转换成对应的信号进行传输
18
Dubbo调用流程
1
2
3
4
5
6
7
8
9
10 11.所有的服务都要在Zookeeper注册中心当中进入注册
2 每一个服务都有自己的配置文件,
3 在配置文件当中配置好自己端口号和地址
4 然后把端口号和地址注册在zookeeper注册中心统一管理
52.Zookeeper注册中心 ,管理服务提供方服务器的ip和端口,并知道哪台机器启动了,哪台机器关闭了
63.服务调用方Controller项目询问ZooKeeper可以提供服务的IP和端口
74.Zookeeper返回可以使用的IP和端口号给Controller
85.Controller使用IP+端口+接口+方法调用,到指定的服务中调用对应的方法
96.服务返回对应的结果
10
示例图
Zookeeper
1
2
3
4
5
6
7
8
9
10 1概述
2 Zookeeper 是 Apacahe Hadoop 的子项目
3 是一个树型的目录服务,支持变更推送
4 最早是用在大数据当中
5 适合作为Dubbox 服务的注册中心
6作用
7 zookeeper 注册中心
8 注册中心负责服务地址的注册与查找,相当于目录服务
9 服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。
10
安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 1在Linux环境下安装
21.安装JDK
3 rm -f /var/run/yum.pid
4 yum -y install java-1.8.0-openjdk.x86_64
5 java -version
62.把 zookeeper 的压缩包,上传到Linux系统/usr/local目录下
7 cd /usr/local
8
93.解压缩压缩包
10 tar -zxvf zookeeper-3.4.6.tar.gz
11 rm -rf zookeeper-3.4.6.tar.gz
124.进入conf目录 ,把 zoo_sample.cfg 改名为 zoo.cfg
13 cd conf
14 mv zoo_sample.cfg zoo.cfg
155.进入bin目录,启动服务输入命令
16 ./zkServer.sh start
176.查看状态
18 ./zkServer.sh status
197.关闭服务
20 ./zkServer.sh stop
218.关闭防火墙
22 systemctl stop firewalld.service
23
Dubbo实例
dubbo_service
-
引入pom依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 1<properties>
2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3 <maven.compiler.source>1.7</maven.compiler.source>
4 <maven.compiler.target>1.7</maven.compiler.target>
5 <spring.version>5.1.7.RELEASE</spring.version>
6</properties>
7
8<dependencies>
9 <dependency>
10 <groupId>junit</groupId>
11 <artifactId>junit</artifactId>
12 <version>4.11</version>
13 <scope>test</scope>
14 </dependency>
15
16 <!-- Spring -->
17 <dependency>
18 <groupId>org.springframework</groupId>
19 <artifactId>spring-context</artifactId>
20 <version>${spring.version}</version>
21 </dependency>
22
23 <dependency>
24 <groupId>org.springframework</groupId>
25 <artifactId>spring-beans</artifactId>
26 <version>${spring.version}</version>
27 </dependency>
28
29 <dependency>
30 <groupId>org.springframework</groupId>
31 <artifactId>spring-webmvc</artifactId>
32 <version>${spring.version}</version>
33 </dependency>
34 <dependency>
35 <groupId>org.springframework</groupId>
36 <artifactId>spring-jdbc</artifactId>
37 <version>${spring.version}</version>
38 </dependency>
39 <dependency>
40 <groupId>org.springframework</groupId>
41 <artifactId>spring-aspects</artifactId>
42 <version>${spring.version}</version>
43 </dependency>
44 <dependency>
45 <groupId>org.springframework</groupId>
46 <artifactId>spring-jms</artifactId>
47 <version>${spring.version}</version>
48 </dependency>
49 <dependency>
50 <groupId>org.springframework</groupId>
51 <artifactId>spring-context-support</artifactId>
52 <version>${spring.version}</version>
53 </dependency>
54 <!-- dubbo相关 -->
55 <dependency>
56 <groupId>com.alibaba</groupId>
57 <artifactId>dubbo</artifactId>
58 <version>2.6.6</version>
59 </dependency>
60 <dependency>
61 <groupId>org.apache.zookeeper</groupId>
62 <artifactId>zookeeper</artifactId>
63 <version>3.4.6</version>
64 </dependency>
65 <dependency>
66 <groupId>com.github.sgroschupf</groupId>
67 <artifactId>zkclient</artifactId>
68 <version>0.1</version>
69 </dependency>
70 <dependency>
71 <groupId>javassist</groupId>
72 <artifactId>javassist</artifactId>
73 <version>3.11.0.GA</version>
74 </dependency>
75 <dependency>
76 <groupId>io.netty</groupId>
77 <artifactId>netty-all</artifactId>
78 <version>4.1.32.Final</version>
79 </dependency>
80 <dependency>
81 <groupId>org.apache.curator</groupId>
82 <artifactId>curator-framework</artifactId>
83 <version>4.0.1</version>
84 <type>bundle</type>
85 </dependency>
86
87 <dependency>
88 <groupId>org.apache.curator</groupId>
89 <artifactId>curator-recipes</artifactId>
90 <version>4.0.1</version>
91 <type>bundle</type>
92 </dependency>
93</dependencies>
94
-
添加web.xml配置文件
1
2
3
4
5
6
7
8
9
10
11
12 1<web-app>
2 <display-name>Archetype Created Web Application</display-name>
3 <!-- 加载spring容器 -->
4 <context-param>
5 <param-name>contextConfigLocation</param-name>
6 <param-value>classpath:applicationContext*.xml</param-value>
7 </context-param>
8 <listener>
9 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
10 </listener>
11</web-app>
12
-
在resouces中添加applicationContext-service.xml配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
7 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
8 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
10
11 <!-- 给当前项目服务起个名字 -->
12 <dubbo:application name="dubboxdemo-service"/>
13 <!-- 配置连接zookeeper的IP和端口 -->
14 <dubbo:registry address="zookeeper://192.168.1.88:2181"/>
15 <!-- 配置包扫描, 在这个包下面的实现类中使用@Service注解才会生效 -->
16 <dubbo:annotation package="com.fmjava.service"/>
17</beans>
18
- 在Java文件夹中, 创建service
dubbo_consumer
-
引入pom依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 1 <properties>
2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3 <maven.compiler.source>1.7</maven.compiler.source>
4 <maven.compiler.target>1.7</maven.compiler.target>
5 <spring.version>5.1.7.RELEASE</spring.version>
6 </properties>
7
8 <dependencies>
9 <dependency>
10 <groupId>junit</groupId>
11 <artifactId>junit</artifactId>
12 <version>4.11</version>
13 <scope>test</scope>
14 </dependency>
15 <!-- Spring -->
16 <dependency>
17 <groupId>org.springframework</groupId>
18 <artifactId>spring-context</artifactId>
19 <version>${spring.version}</version>
20 </dependency>
21 <dependency>
22 <groupId>org.springframework</groupId>
23 <artifactId>spring-beans</artifactId>
24 <version>${spring.version}</version>
25 </dependency>
26 <dependency>
27 <groupId>org.springframework</groupId>
28 <artifactId>spring-webmvc</artifactId>
29 <version>${spring.version}</version>
30 </dependency>
31 <dependency>
32 <groupId>org.springframework</groupId>
33 <artifactId>spring-jdbc</artifactId>
34 <version>${spring.version}</version>
35 </dependency>
36 <dependency>
37 <groupId>org.springframework</groupId>
38 <artifactId>spring-aspects</artifactId>
39 <version>${spring.version}</version>
40 </dependency>
41 <dependency>
42 <groupId>org.springframework</groupId>
43 <artifactId>spring-jms</artifactId>
44 <version>${spring.version}</version>
45 </dependency>
46 <dependency>
47 <groupId>org.springframework</groupId>
48 <artifactId>spring-context-support</artifactId>
49 <version>${spring.version}</version>
50 </dependency>
51 <!-- dubbo相关 -->
52 <dependency>
53 <groupId>com.alibaba</groupId>
54 <artifactId>dubbo</artifactId>
55 <version>2.6.6</version>
56 </dependency>
57 <dependency>
58 <groupId>org.apache.zookeeper</groupId>
59 <artifactId>zookeeper</artifactId>
60 <version>3.4.6</version>
61 </dependency>
62 <dependency>
63 <groupId>com.github.sgroschupf</groupId>
64 <artifactId>zkclient</artifactId>
65 <version>0.1</version>
66 </dependency>
67 <dependency>
68 <groupId>javassist</groupId>
69 <artifactId>javassist</artifactId>
70 <version>3.11.0.GA</version>
71 </dependency>
72
73 <dependency>
74 <groupId>io.netty</groupId>
75 <artifactId>netty-all</artifactId>
76 <version>4.1.32.Final</version>
77 </dependency>
78 <dependency>
79 <groupId>org.apache.curator</groupId>
80 <artifactId>curator-framework</artifactId>
81 <version>4.0.1</version>
82 <type>bundle</type>
83 </dependency>
84
85 <dependency>
86 <groupId>org.apache.curator</groupId>
87 <artifactId>curator-recipes</artifactId>
88 <version>4.0.1</version>
89 <type>bundle</type>
90 </dependency>
91 </dependencies>
92
-
添加web.xml配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 1<!DOCTYPE web-app PUBLIC
2 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
3 "http://java.sun.com/dtd/web-app_2_3.dtd" >
4
5<web-app>
6 <display-name>Archetype Created Web Application</display-name>
7 <!-- 解决post乱码 -->
8 <filter>
9 <filter-name>CharacterEncodingFilter</filter-name>
10 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
11 <init-param>
12 <param-name>encoding</param-name>
13 <param-value>utf-8</param-value>
14 </init-param>
15 <init-param>
16 <param-name>forceEncoding</param-name>
17 <param-value>true</param-value>
18 </init-param>
19 </filter>
20 <filter-mapping>
21 <filter-name>CharacterEncodingFilter</filter-name>
22 <url-pattern>/*</url-pattern>
23 </filter-mapping>
24
25 <!-- 配置springMvc前端控制器 -->
26 <servlet>
27 <servlet-name>springmvc</servlet-name>
28 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
29 <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
30 <init-param>
31 <param-name>contextConfigLocation</param-name>
32 <param-value>classpath:applicationContext-web.xml</param-value>
33 </init-param>
34 <load-on-startup>1</load-on-startup>
35 </servlet>
36 <servlet-mapping>
37 <servlet-name>springmvc</servlet-name>
38 <!-- 拦截所有,不包括jsp,包含.js .png.css 建议使用 -->
39 <url-pattern>/</url-pattern>
40 </servlet-mapping>
41
42</web-app>
43
-
在resouces中添加applicationContext-web.xml配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
7 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
8 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
10
11 <!--注解扫描-->
12 <context:component-scan base-package="com.itxk"/>
13
14 <!-- 注解驱动 -->
15 <mvc:annotation-driven >
16 <!-- 将传输的字符串强制转换成utf-8编码, 防止中文乱码 -->
17 <mvc:message-converters register-defaults="false">
18 <bean class="org.springframework.http.converter.StringHttpMessageConverter">
19 <constructor-arg value="UTF-8" />
20 </bean>
21 </mvc:message-converters>
22 </mvc:annotation-driven>
23
24 <!-- 给当前项目服务起个名-->
25 <dubbo:application name="dubboxdemo-web" />
26 <!-- 配置连接zookepper -->
27 <dubbo:registry address="zookeeper://192.168.1.88:2181"/>
28 <!-- 配置包扫描, 只有在这个包下面才可以注入service -->
29 <dubbo:annotation package="com.itxk.controller" />
30</beans>
31
- 在Java文件夹中, 创建Controller,调用Service
分别配置tomcat
- dubbo_service
- dubbo_consumer
- 启动时, 先启动service