dubbo使用和配置讲解
1. 分布式系统中相关概念
1.1.1 特点:
-
用户多
-
流量大、并发高
-
海量数据
-
易受攻击
-
功能繁琐
-
变更快
1.1.2 指标及相关目标
互联网项目三高目标:高并发、高可用(99.999%)、高可拓展
其他:可伸缩
、安全性
、敏捷性
1.2 集群&分布式
集群
:很多人一起干,干一样的事。一个业务模块,部署在多个服务器上。
是一个横向概念。
分布式
:很多人一起干,干不一样的事。这些不一样的事,合起来是一件大事。
一个大的业务系统,拆分为多个小的不同的业务模块,分别部署在各个机器上。
是一个纵向的概念。
集群和分布式能初步实现互联网项目的三高目标。
-
生活中的分布式和集群
-
开发中的分布式和集群
1.3. 软件架构的演进过程
1.3.1 工作中如何选用软件架构
如果要使用并实现微服务的架构,整体的技术成本、人力成本、硬件成本、维护成本都会很高。
-
公司/项目非常小,非常适合使用单体架构
-
中型的公司/项目,可以采用垂直/
SOA
架构 -
大型的公司/项目(25+人维护开发一个项目),考虑微服务系统架构
1.3.2 Dubbo
&SpringCloud
Dubbo
主要是为了解决SOA
架构下,服务治理的中间件。
SpringCloud
主要的应用场景就是在微服务的架构之下。
2. Dubbo
简单概述
2.1 概念
web
、service
拆分出来分别部署到不同的服务器上,dubbo
为了解决远程调用时候的各种问题的,底层是基于长连接的方式实现RPC。
Dubbo
是一个基于Spring
开发的小项目,可以和Spring无缝整合。
• Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。
• 致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。
了解:
2011年,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,SOA架构开始在国内流行。做的是横向拆分。
在开源之前已经在阿里巴巴内部广泛使用,开源之后,由于他出色的表现,很快被很多大公司使用,eg:当当、网易考拉等等。
dubbo
的前身是基于Spring
开发的一个项目,所以可以和Spring
无缝衔接,中间停更过一段时间,后来又开始更新并捐给了Apache。最重要的,他有中文版本的文档,特别友好。通过快速入门体验dubbo的特点,通过API 文档可以轻松的学习dubbo中所有的内容。
2.2 Zookeeper
注册中心
2.2.1 简单介绍
文档/Dubbo2.7/用户文档/参考手册/注册中心参考手册
2.2.2 安装
linux
和windows
使用的是同一个安装包,绿色,解压可用。
windows下安装
-
解压,存放在开发软件目录(路径中不要用中文、空格等特殊符号)
-
在
conf
目录,复制zoo_sample.cfg
为zoo.cfg
-
修改配置文件中如下两点:
# 数据保存路径,建议在安装目录新建一个数据文件夹,并在此 指定
dataDir=D:\Develop\soft\apache-zookeeper-3.5.6-bin\zkData
# netty port
# netty服务(web容器)的端口,建议修改为非8080端口
admin.serverPort=8888 -
双击bin目录下
zkServer.cmd
即可启动,出现如下内容即为启动成功。默认端口2181。
2.3 Dubbo
架构及执行流程
3 Dubbo
快速入门
3.1 分模块编写单体架构项目
分模块开发项目,两个模块中分别包含web
层和service
层
dubbo-service
dubbo-web
3.1.1dubbo-service
pom.xml
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
</properties>
<dependencies>
<!-- servlet3.0规范的坐标 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--spring的坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--springmvc的坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>
applicationcontext.xml
<context:component-scan base-package="com.yuyy.service" />
日志配置文件log4j.properties
# 略
UserServiceImpl及其接口
public interface UserService {
public String sayHello();
}
3.1.1dubbo-web
pom.xml
<groupId>com.yuyy</groupId>
<artifactId>dubbo-web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
</properties>
<dependencies>
<!-- servlet3.0规范的坐标 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--spring的坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--springmvc的坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<!--依赖service模块-->
<dependency>
<groupId>com.yuyy</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>