分布式技术

一、Zookeeper

        1、工作机制

                Zookeeper从设计模式角度来理解:是一个基于观察者模式(一个人干活,有人盯着他)设计的分布式服务管理框架

                 它负责 存储 和 管理 大家都关心的数据 然后接受观察者的注册,一旦这些数据的发生变化 Zookeeper就将负责通知已经注册的那些观察者做出相应的反应 从而实现集群中类似Master/Slave管理模式

                 Zookeeper = 文件系统 + 通知机制

        2、分布式和集群的区别

                分布式:不同的人做不同的事情,但都是为了同一个工作

                集群:不同的人做相同的事情

        3、数据结构

                ①、ZooKeeper数据模型的结构与linux文件系统很类似,整体上可以看作是一棵树,每个节点称做一 个ZNode(ZookeeperNode)。

                ②、每一个ZNode默认能够存储1MB的数据(元数据),每个ZNode的路径都是唯一的 元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、 资源查找、文件记录等功能

        4、选举机制

                半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器

                ①、 Server1先投票,投给自己,自己为1票,没有超过半数,根本无法成为leader,顺水推舟将票数 投给了id比自己大的Server2

                ②、Server2也把自己的票数投给了自己,再加上Server1给的票数,总票数为2票,没有超过半数,也 无法成为leader,也学习Server1,顺水推舟,将自己所有的票数给了id比自己大的Server3

                 ③、Server3得到了Server1和Server2的两票,再加上自己投给自己的一票。3票超过半数,顺利成为 leader

                ④、Server4和Server5都投给自己,但是无法改变Server3的票数,只好听天由命,承认Server3是 leader

        5、节点类型

                ①、持久型(persistent):

                持久化目录节点(persistent)客户端与zookeeper断开连接后,该节点依旧存在

                持久化顺序编号目录节点(persistent_sequential)客户端与zookeeper断开连接后,该节 点依旧存在,创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调 递增的计数器,由父节点维护,例如:Znode001,Znode002...

                ②、短暂型(ephemeral):

                临时目录节点(ephemeral)客户端和服务器端断开连接后,创建的节点自动删除

                临时顺序编号目录节点(ephemeral_sequential)客户端与zookeeper断开连接后,该节点 被删除,创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增 的计数器,由父节点维护,例如:Znode001,Znode002...

        6、监听器原理

                 ①、在main方法中创建Zookeeper客户端的同时就会创建两个线程,一个负责网络连接通信,一个负责监听

                ②、监听事件就会通过网络通信发送给zookeeper

                ③、zookeeper获得注册的监听事件后,立刻将监听事件添加到监听列表里

                ④、zookeeper监听到 数据变化 或 路径变化,就会将这个消息发送给监听线程

                ⑤、监听线程就会在内部调用process方法(自己实现process方法)

        常见的监听 :

                ①、监听节点数据的变化:get path [watch]

                ②、监听子节点增减的变化:ls path [watch]

        7、写数据流程

        

                ①、Client 想向 ZooKeeper 的 Server1 上写数据,必须的先发送一个写的请求

                ②、如果Server1不是Leader,那么Server1 会把接收到的请求进一步转发给Leader。

                ③、这个Leader 会将写请求广播给各个Server,各个Server写成功后就会通知Leader。

                ④、当Leader收到半数以上的 Server 数据写成功了,那么就说明数据写成功了。

                ⑤、随后,Leader会告诉Server1数据写成功了。

                ⑥、Server1会反馈通知 Client 数据写成功了,整个流程结束

二、dubbo

        1、RPC

          RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式

          RPC两个核心模块:通讯(socket),序列化。

        RPC基本的通信原理

                ①、在客户端将对象进行序列化

                ②、底层通信框架使用netty(基于tcp协议的socket),将序列化的对象发给服务提供方               

                 ③、服务提供方通过socket得到数据文件之后,进行反序列化,获得要操作的对象

                ④、对象数据操作完毕,将新的对象序列化,再通过服务提供方的socket返回给客户端

                ⑤、客户端获得序列化数据,再反序列化,得到最新的数据对象,至此,完成一次请求

        2、节点角色

         

         3、调用关系

                ①、服务容器负责启动,加载,运行服务提供者;

                ②、服务提供者在启动时,向注册中心注册自己提供的服务;

                ③、服务消费者在启动时,向注册中心订阅自己所需的服务;

                ④、在注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给 消费者;

                ⑤、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败, 再选另一台调用;

                ⑥、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中 心;

        4、高可用

        zookeeper宕机:zookeeper注册中心宕机,还可以消费dubbo暴露的服务

                监控中心宕掉不影响使用,只是丢失部分采样数据

                数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务

                注册中心对等集群,任意一台宕掉后,将自动切换到另一台

                注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯

                服务提供者无状态,任意一台宕掉后,不影响使用

                服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

      

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值