精灵商场项目(十一)--Dubbo+ZooKeeper

本篇主要讲一下Dubbo服务框架和Zookeeper的使用

Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

在这里插入图片描述

dubbo服务注册与发现的流程图

在这里插入图片描述

一、SOA

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来

传送门

在这里插入图片描述


二、RPC协议

RPC是远程过程调用(Remote Procedure Call)的缩写形式,实现系统之间的通信,用户不需要了解底层原理

2.1 RPC与HTTP区别

网络7层协议如图所示

在这里插入图片描述

层级关系与对应的协议

在这里插入图片描述

区别 :

  1. RPC是传输层协议(4层).而HTTP协议是应用层协议(7层).
  2. RPC协议可以直接调用中立接口,HTTP协议不可以.
  3. RPC通信协议是长链接,HTTP协议一般采用短连接需要3次握手(可以配置长链接添加请求头Keep-Alive: timeout=20).(长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。)
  4. RPC协议传递数据是加密压缩传输.HTTP协议需要传递大量的请求头信息.
  5. RPC协议一般都有注册中心.有丰富的监控机制.

三、注册中心

1.1 传统程序调用存在的问题

虽然nginx可以实现tomcat服务器高可用,但是如果后期需要扩展/更新服务器数量时,需要手动的修改Nginx的配置文件.并且重启服务器.需要人为的干预

1.2 注册中心实现原理

具体实现步骤:

  1. 当服务生产者(提供者)启动时会将自己的服务信息(服务名称/IP/PORT),写入注册中心.

  2. 注册中心当接收到用户服务数据时会动态的维护服务列表数据.

  3. 当服务消费者启动时会连接注册中心.获取全部的服务列表数据并且保存到本地(本地内存).

  4. 当用户发起请求时,首先基于http协议访问服务的消费者.服务消费者根据用户服务请求利用负载均衡策略发起请求访问服务提供者.

  5. 如果后台服务提供者宕机,注册中心自己有心跳检测机制.发现后台服务器宕机,首先会维护自己的服务列表数据(树形结构).之后全网广播通知服务消费者更新服务列表.

在这里插入图片描述


四、Zookeeper

Zookeeper负责服务的协调调度.当客户端发起请求时,返回正确的服务器地址

下载Zookeeper地址

4.1 Zookeeper-linux安装

需要JDK1.8

上传安装文件 : zookeeper-3.4.8.tar.gz

解压目录 : tar -xvf zookeeper-3.4.8.tar.gz

修改文件夹名 : mv zookeeper-3.4.8 zookeeper

4.2 修改配置文件

在zookeeper根目录下创建文件夹data/log : mkdir data log

在conf目录下修改配置文件并且修改名称 : cp zoo_sample.cfg zoo.cfg vim zoo.cfg ,如下图

在这里插入图片描述

4.3 zookeeper启动等命令

进入bin目录下 :

启动 : sh zkServer.sh start./zkServer.sh start

关闭 : sh zkServer.sh stop

查看状态 : sh zkServer.sh status

4.4 Zookeeper集群安装

  1. 在zookeeper根目录中创建新的文件夹zkCluster : mkdir zkCluster

  2. 创建zk1/zk2/zk3文件夹,在每个文件夹里创建data/log文件夹 : mkdir {zk1,zk2,zk3}/{data,log}

  3. 添加myid文件 : 分别在zk1/zk2/zk3中的data文件夹中创建新的文件myid.其中的内容依次为1/2/3,与zk节点号对应

  4. 编辑配置文件 : 将zoo_sample.cfg 复制为zoo1.cfg之后修改配置文件
    在这里插入图片描述

  5. 配置完成后将zoo1.cfg复制2份.之后需要修改对应的文件夹目录.和不同的端口即可

  6. zookeeper集群启动

    sh zkServer.sh start zoo1.cfg

    sh zkServer.sh start zoo2.cfg

    sh zkServer.sh start zoo3.cfg

  7. 检查主从关系,主/从机情况说明 :sh zkServer.sh status zoo1/2/3.cfg

4.5 关于zookeeper集群说明

Zookeeper集群中leader负责监控集群状态,follower主要负责客户端链接获取服务列表信息.同时参与投票


三、dubbo 入门案例

接口类中,应用dubbo提供者服务用于声明对外暴露服务@service注解,而不是spring的

3.1 Dubbo提供者配置-YML

server:
  port: 9000

spring:
  datasource:
    #引入druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#dubbo配置文件    
dubbo:
  scan:
    basePackages: com.jl   #定义包扫描
  application:
    name: provider-user    #定义服务名称 必须添加
  registry:
    address: zookeeper://192.168.56.129:2181?backup=192.168.56.129:2182,192.168.56.129:2183
  protocol:
    name: dubbo
    port: 20880  #端口号唯一

      
mybatis-plus:
  type-aliases-package: com.jt.dubbo.pojo       #配置别名包路径
  mapper-locations: classpath:/mybatis/mappers/*.xml  #添加mapper映射文件
  configuration:
    map-underscore-to-camel-case: true                #开启驼峰映射规则

3.2 Dubbo消费者配置-YML

server:
  port: 9001
dubbo:
  scan:
    basePackages: com.jl
  application:
    name: consumer-user
  registry:
    address: zookeeper://192.168.56.129:2181?backup=192.168.56.129:2182,192.168.56.129:2183

3.3 pom.xml 添加dubbo依赖

		<!--引入dubbo配置 -->
<dependency>
	<groupId>com.alibaba.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>0.2.0</version>
</dependency>	

四、Dubbo负载均衡策略

负载均衡策略说明
random loadbalance安权重设置随机概率(默认)
roundrobin loadbalance轮寻,按照公约后权重设置轮训比例
lastactive loadbalance最少活跃调用数,若相同则随机
consistenthash loadbalance一致性hash,相同参数的请求总是发送到同一提供者

案例 : 消费者调用接口方法,使用@Reference注解, timeout重新获取时间,check是否检查服务存在,最好关闭,避免消费者不法启动,loadbalance为负载均衡策略

	@Reference(timeout=3000,check=false,loadbalance = "random"/"roundrobin"/"leastactive"/"consistenthash")
	private UserService userService;

五、Zookeeper 控制台搭建

5.1 导入dubbo控制台

本质是一个tomcat服务

在这里插入图片描述

5.2 修改配置

修改tomcat-dubbo\webapps\ROOT\WEB-INF目下的 dubbo.properties配置文件

dubbo控制台的管理员登录用户名和密码都为 root

dubbo.registry.address=zookeeper://192.168.56.129:2181?backup=192.168.56.129:2182,192.168.56.129:2183
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

5.3 启动dubbo控制台

tomcat-dubbo\conf\server.xml查的端口号为 : 8090

运行 bin\startup.bat

打开浏览器 : localhost:8090/

在这里插入图片描述

六、关于dubbo端口说明

zookeeper端口号 : 2181/2182/2183

zookeeper通信端口 : 2887/2888/2889

zookeeper选举端口 : 3887/3888/3889

在这里插入图片描述

Dubbo框架:

  1. PRC协议动态获取:20880(配置文件手动编辑)
  2. 消费者和提供者通信靠PRC:port

随手笔记

1.nginx与dubbo负载均衡机制区别

nginx是服务端负载均衡,所有的请求都会由nginx实现负载,反向代理

ubbo采用客户端负载均衡机制,并且是正向代理

2.@Reference

使用@Reference注解, timeout重新获取时间,check是否检查服务存在,最好关闭,避免消费者不法启动,loadbalance为负载均衡策略

用于dubbo消费者服务指明引用哪个提供者接口服务

  1. 可以定义在类中的一个字段上,也可以定义在一个方法上,甚至可以用来修饰另一个 annotation,表示一个服务的引用。通常 @Reference 定义在一个字段上
  2. interfaceClass:指定服务的 interface 的类
  3. interfaceName:指定服务的 interface 的类名
  4. version:指定服务的版本号
  5. group:指定服务的分组
  6. url:通过指定服务提供方的 URL 地址直接绕过注册中心发起调用
  7. application:应用配置
  8. module:模块配置
  9. consumer:服务消费方配置
  10. protocol:协议配置
  11. monitor:监控中心配置
  12. registry:注册中心配置

3.linux 命令

在每个文件夹里创建两个文件 : mkdir {s1,s2,s3}/{a1,a2}

4.面试题 Zookeeper是如何存储数据

在这里插入图片描述

5.Dubbo

转载:传送门

5.1 Dubbo 和 Spring Cloud 区别

  1. 通信方式不同:Dubbo 使用的是 RPC 通信,而Spring Cloud 使用的是HTTP RESTFul 方式。

  2. 组成不一样:

    (1)dubbo的服务注册中心为Zookeerper,服务监控中心为dubbo-monitor,无消息总线,服务跟踪、批量任务等组件;

    (2)spring-cloud的服务注册中心为spring-cloud netflix enruka,服务监控中心为spring-boot admin,有消息总线,数据流、服务跟踪、批量任务等组件;

5.2 Dubbo里面的节点角色

  1. provide:暴露服务的服务提供方
  2. consumer:调用远程服务的服务消费方
  3. registry:服务注册于发现的注册中心
  4. monitor:统计服务调用次数和调用时间的监控中心
  5. container:服务运行容器

6.关于项目常见报错

6.1 Redis启动报错

报错信息: redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
报错原因:

  1. IP地址不正确.
  2. Redis集群宕机 检测:set aa aa是否正确
  3. 防火墙没关 service iptables stop

6.2 缓存服务问题

商品信息不能正确展现
检查:

  1. 检查业务调用是否正确.! debug
  2. 可能是将空串存入缓存 : redis.set(key,"")

解决方法:将redis集群数据全部清空.

6.3 Zookeeper问题

重要事项:

  1. 实现类采用Service注解注意包路径
  2. 消费者注入接口时保证注入Dubbo接口. @Reference
  3. 注意YML配置文件 IP地址.
  4. 先启动服务提供者/之后启动消费者

关于热部署引发问题:
由于tomcat服务器热部署的因素.导致后台提供者启动了多次.中zookeeper中形成多条一致的记录
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值