Spring Boot学习之Dubbo+Zookeeper初识

一 分布式理论基础知识

  • 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统
  • 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。
  • 分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。
    • 其目的是利用更多的机器,处理更多的数据。
  • 分布式系统(distributed system)是建立在网络之上的软件系统。
    • 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。
    • 因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。

  • 分布式服务架构的演进
    在这里插入图片描述

1.1 单一应用架构

在这里插入图片描述

  • 关键:用于简化增删改查工作量的数据访问框架(ORM)
  • 优点
    • 一个应用将所有应用功能都部署在一起,减少成本!
  • 缺点
    • 不利于维护升级
    • 性能拓展不易
    • 协同开发困难

1.2 垂直应用架构

在这里插入图片描述

  • 关键用于加速前端页面开发的Web框架(MVC)
  • 优点
    • 通过切分业务来实现各个模块独立部署,降低了维护和部署难度,方便团队管理
    • 方便性能扩展,针对性强。
  • 缺点:
    • 公用模块无法重复利用,开发性的浪费

1.3 分布式服务架构

在这里插入图片描述

1.4 流动计算架构

在这里插入图片描述

  • 关键:提高机器利用率的资源调度和治理中心(SOA)【Service Oriented Architecture】
  • 优点
    • 提高集群利用率
  • 缺点
    • 系统与服务的界限模糊的,不利于设计.
    • ESB是作为系统与系统之间桥梁,没有统一标准,种类很多,不利于维护.

1.5 PRC[Remote Procedure Call]

  • RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。
  • 它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。【即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同】
  • RPC基本原理
    在这里插入图片描述
  • 步骤解析
    在这里插入图片描述
  • RPC两个核心模块
    • 通讯
    • 序列化:数据传输需要转换

二 Dubbo

2.1 Dubbo简介

  • Dubbo官网
  • Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架
  • 它提供了三大核心能力
    • 面向接口的远程方法调用
    • 智能容错和负载均衡
    • 以及服务自动注册和发现。
  • Dubbo 基本工作流程
    在这里插入图片描述

在这里插入图片描述

  • 服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
  • 服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • 注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
  • 监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

  • 调用关系说明
    • 服务容器负责启动,加载,运行服务提供者。
    • 服务提供者在启动时,向注册中心注册自己提供的服务。
    • 服务消费者在启动时,向注册中心订阅自己所需的服务。
    • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

三 Dubbo环境搭建

3.1 Zookeeper简介

  • ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
  • ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
  • ZooKeeper包含一个简单的原语集,提供Java和C的接口。

3.2 Zookeeper下载与安装



  • 使用这个下载地址的版本,可以避免错误三的情况!

  • 在bin目录前,输入cmd以管理员运行
    在这里插入图片描述
  • 输入以下命令zkService .cmd,会出现以下问题
    在这里插入图片描述


  • 双击运行zkService.cmd闪退

3.3 解决问题

问题一:
	错误:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
问题二:
ERROR [main:o.a.z.s.q.QuorumPeerMain@99] 
- Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: 
Error processing C:\environment\apache-zookeeper-3.8.0-bin\apache-zookeeper-3.8.0-bin\bin\..\conf\zoo.cfg
问题三:
ZooKeeper audit is disabled

  • 编辑zkService.cmd添加pause命令,查看详细的错误信息 在这里插入图片描述
  • 双击运行zkService.cmd文件运行,出现错误信息
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin>call 
    "C:\Program Files\Java\jdk1.8.0_131"\bin\java 
    "-Dzookeeper.log.dir=C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\logs" 
    "-Dzookeeper.root.logger=INFO,CONSOLE" 
    "-Dzookeeper.log.file=zookeeper-HP-server-DESKTOP-OGQJ662.log" 
    "-XX:+HeapDumpOnOutOfMemoryError" 
    "-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%p /t /f" -cp 
    "C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\build\classes;
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\build\lib\*;
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\*;
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\lib\*;
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\conf" 
    org.apache.zookeeper.server.quorum.QuorumPeerMain 
    "C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\conf\zoo.cfg"
    错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
    

3.3.1 错误一的分析和解决

  • 问题分析
    • 下载的是未编译的 jar 包
    • 注:zookeeper 3.5 版本以后,命名就发生了改变,如 apache-zookeeper-3.8.0.tar.gz 这般命名的,都是未编译的,而 apache-zookeeper-3.8.0-bin.tar.gz 这般命名的,才是已编译的包。

  • 解决方法
    • 重新下载 apache-zookeeper-3.8.0-bin.tar.gz 包,然后解压使用
  • 下载完运行zkService.cmd,出现以下错误
2023-01-29 17:02:21,637 [myid:] - INFO  [main:o.a.z.s.q.QuorumPeerConfig@177] 
- Reading configuration from: C:\environment\apache-zookeeper-3.8.0-bin\apache-zookeeper-3.8.0-bin\bin\..\conf\zoo.cfg
2023-01-29 17:02:21,640 [myid:] - ERROR [main:o.a.z.s.q.QuorumPeerMain@99] 
- Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: 
Error processing C:\environment\apache-zookeeper-3.8.0-bin\apache-zookeeper-3.8.0-bin\bin\..\conf\zoo.cfg

3.3.2 错误二的分析和解决

  • 问题分析
    • 由上面的错误信息可以看到,程序没有找到conf文件夹下的zoo.cfg文件

  • 解决方法
    • zoo_saple.cfg文件复制一份,重命名为zoo.cfg
    • zoo.cfg可以看到Zookeeper默认的端口号为:2181
    # The number of milliseconds of each tick
    tickTime=2000
    # The number of ticks that the initial 
    # synchronization phase can take
    initLimit=10
    # The number of ticks that can pass between 
    # sending a request and getting an acknowledgement
    syncLimit=5
    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    dataDir=/tmp/zookeeper
    # the port at which the clients will connect
    clientPort=2181
    # the maximum number of client connections.
    # increase this if you need to handle more clients
    #maxClientCnxns=60
    #
    # Be sure to read the maintenance section of the 
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1
    
    ## Metrics Providers
    #
    # https://prometheus.io Metrics Exporter
    #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
    #metricsProvider.httpPort=7000
    #metricsProvider.exportJvmInfo=true
    
  • 注意
    - dataDir=./ 临时数据存储的目录(可写相对路径)
    - clientPort=2181 zookeeper的端口号

3.3.3 错误三的分析和解决

  • 然后,快乐地运行zkService.cmd又又又遇到了错误!
2023-01-29 17:11:11,775 [myid:] - INFO  [main:o.a.z.a.ZKAuditProvider@42] - ZooKeeper audit is disabled.
  • 问题分析
    • zookeeper新版本启动的过程中,zookeeper新增的审核日志是默认关闭,所以控制台输出ZooKeeper audit is disabled
    • 标准的修改方式应该是在zookeeper的配置文件zoo.cfg新增一行audit.enable=true即可

  • 解决方法
    • 修改zkServer.cmd 添加"-Dzookeeper.audit.enable=true"
      在这里插入图片描述

3.4 zookeeper运行测试

  • 在解决完上面的三个问题之后,记得将zkService.cmd文件中的pause命令删除
  • 双击运行zkService.cmd服务端,在最后看到下面的信息,表明运行成功!
    [myid:] - INFO  [main:o.a.z.a.Slf4jAuditLogger@35] - user=HP    operation=serverStart       result=success
    
  • 双击运行zkCli.cmd客户端

  • 连接成功的效果
    • 服务端效果
    [myid:] - INFO  [SyncThread:0:o.a.z.s.p.FileTxnLog@285] - Creating new log file: log.1
    
    • 客户端效果
    WatchedEvent state:SyncConnected type:None path:null
    [zk: localhost:2181(CONNECTED) 0]
    

  • ls /:列出zookeeper根下保存的所有节点
    在这里插入图片描述
  • create –e /yang 123:创建一个/yang节点,值为666
    在这里插入图片描述
  • get /yang:获取/yang节点的值
    在这里插入图片描述

四 安装dubbo-admin【window环境】

4.1 dubbo-admin(有问题没解决)【可跳过】

  • dubbo-adming-github

  • 选择使用稳定版本master版本
    在这里插入图片描述

  • 遇到问题:按照提示操作即可

    • 同时注意将:压缩包的名字进行相应的修改
    • 如该错误将需要的文件node-v9.11.1-win-x64.zip下载下来,然后修改为node-9.11.1-win-x64.zip放到相应的目录下
    [INFO] Downloading https://nodejs.org/dist/v9.11.1/node-v9.11.1-win-x64.zip to 
    C:\environment\apache-maven-3.6.3\maven-repo\com\github\eirslett\node\9.11.1\node-9.11.1-win-x64.zip
    
  • 然后重新运行命令mvn clean package -Dmaven.test.skip=true进行打包!
    在这里插入图片描述

  • 生成的jar包在dubbo-admin-master\dubbo-admin-distribution\target目录下

  • 执行jar包java -jar dubbo-admin-0.5.0.jar
    在这里插入图片描述

  • 未开启Zookeeper,所以会出现错误

java.lang.IllegalStateException: java.lang.IllegalStateException: zookeeper not connected
at org.apache.dubbo.config.deploy.DefaultApplicationDeployer.prepareEnvironment(DefaultApplicationDeployer.java:678)
at org.apache.dubbo.config.deploy.DefaultApplicationDeployer.startConfigCenter(DefaultApplicationDeployer.java:261)
at org.apache.dubbo.config.deploy.DefaultApplicationDeployer.initialize(DefaultApplicationDeployer.java:185)
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.prepare(DefaultModuleDeployer.java:470)
at org.apache.dubbo.config.spring.context.DubboConfigApplicationListener.initDubboConfigBeans
(DubboConfigApplicationListener.java:71)
  • 经过连接Zookeeper,发现Dubbo-admin一直出现连接后8080端口占用,立即断开连接的问题
  • 所以最终降低了dubbo的版本,操作如下
  • 如果有大佬,能够解决此问题!希望能够不吝解惑!!

4.2 dubbo-admin-master-0.2.0【建议食用】

  1. 进入dubbo-adming-github选择使用master-0.2.0版本
    在这里插入图片描述
  2. 解压后,dubbo-admin\src\main\resources \application.properties 中可指定zookeeper地址
    server.port=7001
    spring.velocity.cache=false
    spring.velocity.charset=UTF-8
    spring.velocity.layout-url=/templates/default.vm
    spring.messages.fallback-to-system-locale=false
    spring.messages.basename=i18n/message
    spring.root.password=root
    spring.guest.password=guest
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    

  1. dubbo-admin目录下,使用管理员身份运行命令mvn clean package -Dmaven.test.skip=true进行打包
    在这里插入图片描述
    • dubbo-admin-master-0.2.0\dubbo-admin\target目录下,可以看到生成的jar包

4.3 测试

  1. 首先运行Zookeeper【双击zhService.cmd】
  2. 然后,打开终端进入dubbo-admin-master-0.2.0\dubbo-admin\target目录下,执行命令java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
  3. 最后,访问http://localhost:7001/
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值