1.什么是Dubbo框架
Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:
1.面向接口的远程方法调用
2.智能容错和负载均衡
3.以及服务自动注册和发现。
1.2 什么是RPC
RPC是远程过程调用(Remote Procedure Call)的缩写形式 。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。
总结:需要调用第三方完成本地的服务.
1.3 什么是SOA思想(架构设计思想)
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP31EMjRVT0EkeOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzkjNzUTN0kTMyIzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2. Dubbo框架工作原理
组件说明:
1.提供者(Provider) 主要负责实现业务接口
2.注册中心(Registry) 注册中心基于心跳检测机制,可以非常灵活的检查服务是否可用,以及服务自动的注册和发现功能
3.消费者(Consumer) 负责接收用户的请求信息的(页面)
4.监控(Monitor) 监控整合Dubbo框架内部的状态信息
2.1 注册中心工作原理
步骤:
- 当服务提供者启动时,将自己的IP地址/端口号/服务数据一起注册到注册中心中.
- 当注册中心接受提供者的数据信息之后,会维护服务列表数据
- 当消费者启动时,会连接注册中心
- 获取服务列表数据,之后在本地保存记录
- 当用户需要业务操作时,消费者会根据服务列表数据,之后找到正确的IP:PORT,直接利用RPC机制进行远程访问
- 注册中心都有心跳检测机制,当发现服务器宕机/或者新增服务时,则会在第一时间更新自己的服务列表数据,并且全网广播通知所有的消费者.
3. Zookeeper
3.1 zookeeper介绍
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
总结: zookeeper 负责服务的协调调度,当客户端发起请求时,返回正确的服务器地址.
3.2 下载zookeeper
3.3 Zookeeper 按照
- zookeeper必须依赖JDK,安装前应先查看jdk状态.
- 下载安装之后并重命名
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡
3.4 修改配置文件
-
在zk根目录下创建文件夹data/log
命令:
mkdir data log
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 - 进入conf目录中修改配置文件
-
复制配置文件并且修改名称
命令:cp zoo_sample.cfg zoo.cfg
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 - 跳转到bin目录中 zk启动关闭命令如下
sh zkServer.sh start 或者 ./zkServer.sh start
sh zkServer.sh stop
sh zkServer.sh status
![]()
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡
4. Zookeeper集群安装
- 在zookeeper根目录中创建新的文件夹zkCluster.
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 - 创建zk1/zk2/zk3文件夹.
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 -
在每个文件夹里创建data/log文件夹.
命令:
mkdir {zk1,zk2,zk3}/{data,log}
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 - 添加myid文件
- 分别在zk1/zk2/zk3中的data文件夹中创建新的文件myid.其中的内容依次为1/2/3,与zk节点号对应.
-
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 -
编辑配置文件
将zoo_sample.cfg 复制为zoo1.cfg之后修改配置文件
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 - 修改zoo1.cfg
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡 - 配置完成后将zoo1.cfg复制2份.之后需要修改对应的文件夹目录.和不同的端口即可.
-
ZK集群测试 通过下面的命令启动zk集群.
命令:
sh zkServer.sh start zoo1.cfg
sh zkServer.sh stop zoo1.cfg
sh zkServer.sh status zoo1.cfg
- 检查主从关系,从机情况说明.
Dubbo框架入门案例1.什么是Dubbo框架2. Dubbo框架工作原理3. Zookeeper4. Zookeeper集群安装5. Dubbo入门案例6. Dubbo负载均衡
4.1关于zookeeper集群说明
Zookeeper集群中 leader 负责监控集群状态,follower 主要负责客户端链接获取服务列表信息,同时参数投票选举.
-
为什么集群一般都是奇数个?
公式:当前剩余节点数量 > n/2 (集群可以正确使用)
分析1:
1).1台主机能否搭建集群 1-1 >0.5 (-1是最少宕机1台,条件不成立),1台服务器不能搭建集群
2).2台主机能否搭建集群 2-1 >1 (条件不成立),2台服务器不能搭建集群
3).3台主机能否搭建集群 3-1 >1.5 (条件成立),3台服务器是搭建集群的最小单位
4).4台主机能否搭建集群 4-1 >2 (条件成立),4台服务器能搭建集群
分析2:为什么集群是奇数台,不是偶数台?
1).3台服务器允许宕机的最大的数量是几台? 3台服务器最多允许宕机1台服务器.
2).4台服务器允许宕机的最大的数量是几台? 4台服务器最多允许宕机1台服务器.(4-2>2条件不成立)
总结:搭建偶数台的荣灭效果与奇数台相同,所以从成本的角度考虑,搭建奇数台
4.2 Zookeeper的集群选举原理
zookeeper集群选举时由启动顺序决定,一般采用最大值(myid)优先策略,投票数超过半数当选主机.
5. Dubbo入门案例
- 在父级项目中引入Dubbo的jar包文件
<!--引入dubbo配置 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
5.1 配置userServiceImpl
5.2 编辑Yml配置文件
#关于Dubbo配置
dubbo:
scan:
basePackages: com.jt #指定dubbo的包路径
application: #应用名称
name: provider-user #一个接口对应一个服务名称 相同的接口,服务器应该一致
registry: #注册中心
address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
protocol: #指定协议
name: dubbo #使用dubbo协议(tcp-ip) web-controller直接调用sso-Service
port: 20880 #每一个服务都有自己特定的端口 不能重复.(内部端口)
5.3 定义并编辑消费者Controller
@RestController
public class UserController {
利用dubbo的方式为接口创建代理对象 利用rpc调用
//loadbalance 负债均衡服务
//loadbalance="consistenthash" 哈希一致性配置
//loadbalance="leastactive" 最小访问量.挑选访问压力最小的访问
//loadbalance="random" 随机的(默认)
//loadbalance="roundrobin" 负债均衡 ,依次访问(轮询算法)
@Reference(loadbalance="roundrobin")
private UserService userService;
/**
* Dubbo框架调用特点:远程RPC调用就像调用自己本地服务一样简单
* @return
*/
@RequestMapping("/findAll")
public List<User> findAll(){
//远程调用时传递的对象数据必须序列化.
return userService.findAll();
}
}
5.4 编辑消费者yml文件
dubbo:
scan:
basePackages: com.jt
application:
name: consumer-user #定义消费者名称
registry: #注册中心地址
address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
6. Dubbo负载均衡
6.1 Dubbo负载均衡说明
说明: Dubbo框架对外提供了负载均衡的机制,该机制称为客户端负载均衡,消费者在发起请求之前,就已经清楚的知道将来访问的服务器是哪一台.
6.2 负载均衡接口说明
6.2.1 hash一致性算法
- 说明: 消费者访问绑定了指定的提供者
//要求所有的字母全部小写
@Reference(loadbalance="consistenthash")
private UserService userService;
6.2.2 最小访问量
- 说明:挑选当前服务器访问压力最小的服务器进行访问
//要求所有的字母全部小写
@Reference(loadbalance="leastactive")
private UserService userService;
6.2.3 随机算法
- 说明:该算法是默认的配置
//要求所有的字母全部小写
@Reference(loadbalance="random")
private UserService userService;
6.2.4 轮询算法
- 说明:根据配置依次轮询访问
//要求所有的字母全部小写
@Reference(loadbalance="roundrobin")
private UserService userService;