Zookeeper详细介绍+dubbo简单介绍+简单大白话讲解

Zookeeper

  • zookeeper前言
    • zookeeper简介绍
    • dubbo中为何使用zookeeper(如果理解dubbo实现原理可以忽略)
    • dubho好处简单介绍下
    • dubbo如何使用zookeeper的
    • zookeeper流程图
    • dubbo和zookeeper简单大白话讲解
    • zookeeper以什么形式保存service(interface)和serviceImpl(实现interface)
    • 宏观性
    • 结束语

zookeeper前言

很多初步了解zookeeper是什么时候一定很蒙圈,因为不知道是用在哪里?如果有使用过dubbo框架的应该知道zookeeper应用当中起到的作用。本人拿着亲身经历zookeeper作为dubbo的注册中心为大家讲解zookeeper具体是个什么东东?

zookeeper简介绍

官方文档上的解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制。他提供的主要功:是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

dubbo中为何使用zookeeper(如果理解dubbo实现原理可以忽略)

刚初学者对dubbo或许只知道是分布式,但是确不明白是什么,在这里我用最通俗易懂的方式告诉大家:在以往我们做的简单项目都是单点项目,在一个服务器上就可以独立完成(以及数据库tomcat项目部署都在一台服务器上就可以搞定这就是简单的项目,但是如果我们项目使用率增大,那一台服务器会挂掉,这个时候为了解决这样的问题出现,就出现了dubbo分布式开发框架)
Zookeeper详细介绍+dubbo简单介绍+简单大白话讲解_第1张图片
1和图2就可以清晰的看出 现在因为需求增多拆分了这么多个,部署在不同的服务器上,那是不是相对以前都在一个服务器上,现在分布式后,web层调用service层的服务变成了远程调用?那怎样像以前那样都在一个服务器上自然而然调用方法呢?dubbo来解决。这就是下面dubbo的好处。

dubho好处简单介绍下

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。(下面讲解)
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
dubbo最为突出的两个角色
Provider(生产者): 暴露服务的服务提供方。
Consumer(消费者): 调用远程服务的服务消费方

dubbo如何使用zookeeper的

图1和图2可以清楚的知道 web1234需要调用service1234的服务,所以web1234是消费者,service1234是生在产者
Zookeeper详细介绍+dubbo简单介绍+简单大白话讲解_第2张图片
通过此图我们将消费层和生产层分离开了 那如果按照上面的图片进行消费调用生产那是不是就会乱套呢?
Zookeeper详细介绍+dubbo简单介绍+简单大白话讲解_第3张图片
就会变成这样,这只是简单的分布式,那如果更多是不是就会更乱,所以这时候就会出现zookeeper了:
Registry(注册中心): 服务注册与发现的注册中心。dubbo推荐的是zookeeper。什么是zookeeper?zookeeper是用于分布式中一致性处理的框架。简单的讲,zookeeper就是个图书馆,图书馆的(生产者)把所有图书放在图书管进行管理(注册中心)那里,想借书的(消费者)去图书馆那里获得所有书的信息。于是,我们的图变成了这样
Zookeeper详细介绍+dubbo简单介绍+简单大白话讲解_第4张图片
这时候zookeeper的作用就会出现了,通过此图就可以看出来,zookeeper就是一个注册中心,管理生产者和消费者的中心;

但是这还不够,如果那个服务器挂到了怎么办? Monitor: 统计服务的调用次调和调用时间的监控中心,监控服务器心跳,
来发一个dubbo官方给的图 (从0开始看起)
往下看

zookeeper流程图

Zookeeper详细介绍+dubbo简单介绍+简单大白话讲解_第5张图片
自己脑海里按照上图走了一遍后,看看自己想的是不是和下面说明一样。
0 服务容器负责启动,加载,运行服务提供者。

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

dubbo和zookeeper简单大白话讲解

dubbo是service(interface)和serviceImpl(实现interface)的关系(service(interface)和serviceImpl(实现interface)分别写在两个项目或者多个项目),将这两个分开到多个项目,比如查询用户信息一个springboot一个项目消费者也就是查询接口入口service(interface)这个接口不做任何数据库层业务逻辑,然后在用一个或者多个相同的springboot项目serviceImpl(实现interface),最后通过dubbo.xml文件配置上面接口和实现接口的配置和zookeeper信息,这时候zookeeper就是注册中心的作用,来管理上面dubbo中service(interface)和serviceImpl(实现interface)信息,来实现分布式,这样也就解耦项目的流畅性 ,这样可以通过上面的图片也可以看出来整个过程,

zookeeper以什么形式保存service(interface)和serviceImpl(实现interface)

1.大白话讲解,就好比我们文件夹,我们创建一个文件夹,文件夹下面可以有多个文件信息,比如123.txt,1234.txt,这样我们可以看出来,文件夹一般不会改变,我们称为永久性节点,而下面的文件信息是可以随时删除的,所以这样就很好理解为service为永久性节点,他的实现接口serviceImpl可以有很多个称为临时性节点,这样就当你调用service时候可以再临时性节点中serviceImpl调用,这样就实现分布式调用了哦,如果serviceImpl那个宕机,这样就会调用其他的临时性节点,也让程序更加稳定公运行

2.官方解释
1.每一个节点都称之为 znode,它可以有子节点,也可以有数据;
2.每个节点分为临时节点和永久节点,临时节点在客户端断开后消失;
3.每个 zk 节点都有各自的版本号,可以通过命令(get path)来显示节点信息;
4.每当节点数据发生变化,那么该节点的版本号会累加(乐观锁);
5.删除/修改过时的节点,版本号不匹配则会报错;
6.每个 zk 节点存储的数据不宜过大,几 kb 即可;
7.节点可以设置权限 acl(权限控制列表),可以通过权限来限制用户的访问;

宏观性

(说句在通俗易懂的:dubbo就相当于将接口和实现层分离开,zookeeper将接口和实现层控制再它这里,打个比方:如果你将dubbo负载均衡设置成随机,那就是5000人同时访问接口,这时候你是5个生产者,就会被zookeeper随机发送给这5个生产者,既然是随机就大概是每个生产者1000个访问,这样就会大大解耦,降低了高并发问题)

结束语

zookeeper就讲到这里,他的用处很广泛,很多地方,大家有时间可以了解下,zookeeper的选举机制有时间可以了解下还有zookeeper的集群部署机制,大家可以了解下,集群部署和选举机制都是保护程序正常运行的关键。(集群部署往往3台或者5台服务器,选举机制是当某一个服务器挂掉,选举出新的领导者来保证程序正常运行)

你可能感兴趣的:(java,dubbo,java-zookeeper,zookeeper,前端,mybatis)