zookeeper-dubbo笔记

zookeeper
    为分布式应用提供协调服务

工作机制
    基于观察者模式设计的分布式管理框架
    
    存储和管理大家都关心的数据
        接收观察者的注册
        zookeeper负责通知已经注册的观察者做出相应反应
        从而实现主从管理模式master/slave

    文件系统+通知机制
    
特点
    分布式和集群区别
        无论分布式还是集群都是很多人做事情
        分布式:工作内容不同,但是都是为同一个项目服务
        集群:工作内容相同
    由一个leader和多个follower组成集群
    集群中只要有半数以上节点存活,zookeeper就正常存活
    全局数据一致性,每台数据都保存一份相同的数据副本
    数据更新原子性,要么成功,要么失败
    实时性,在一定时间范围内,client能够读取到最新数据
    更新请求会按照顺序执行,会按照发送过来的顺序,逐一执行

数据结构
    和linux文件系统很相似,整体看作一棵树,每个节点称作一个znode(zookeeper node)
    每一个znode能够存取一个1mb的数据(元数据),路径是唯一的                                    
        元数据:中介数据,中继数据,描述数据的数据,主要是描述数据属性信息,如存储位置,历史数据,资源查找,文件记录等数据

应用场景
    应用场景
        统一命名服务
        统一配置管理
        软负载均衡
        
    jps:查看是否运行
    
配置参数
    tickTime:通信心跳数,单位毫秒,zookeeper服务器和客户端之间的心跳时间
    initLimit:LF初始通信时限
        leader和follower之间启动时能容忍的最多心跳数,多少个心跳时间,视为失效的连接,lf断开连接
    syncLimit:lf通信时限
        集群启动后能容忍的最多心跳数,视为已死掉,从服务器列表中删除
    dataDir:数据文件目录+数据持久化路径
    dataLogDir:日志文件目录
    clientPort:客户端连接端口
    
内部原理
    选举机制
        半数机制:半数以上机器存活,集群可用,zookeeper适合奇数台服务器
        配置无指定master和slave,通过选举临时产生
    节点类型(目录节点,顺序编号目录节点)
        持久型
        短暂型
        
        序号相当于自增长
    监听器原理
        创建zookeeper客户端同时创建两个线程,一个网络通信,一个监听
        监听事件通过网络通信发送给zookeeper
        zookeeper获得注册的监听事件后,将监听事件放到监听列表
        zookeeper监听到数据变化或路径变化,将消息发送给监听线程
        监听线程内部调用process线程
    写数据流程
        client向server1发送写的请求
        如果server1不是leader,将请求转发给leader
        leader将请求广播给各个server,server成功后会通知leader
        leader收到半数以上server数据写成功,数据就写成功了
        leader会告诉server1数据写成功了
        server1反馈通知client数据写成功了
        
分布式部署安装
    思路:先搞定一台,再克隆两台,形成集群
    
    data中配置myid
    配置zoo.cfg
    
    配置其余服务器
        复制.vmx和所有的vmdk
        打开.vmx文件
        选择已复制该虚拟机
            修改ip,myid,zoo.cfg,
    
    防火墙开放端口
    
客户端命令
    help:所有命令
    ls path
    ls -s path  查看目录详情
    创建节点:create path
        多级创建目录:需要逐级创建,否则报“节点不存在”
        临时节点 create -e path
        顺序节点 -s
    获取节点数据:get path
    设置节点数据:set path data
    监听节点:addWatch path
    删除节点:delete path
        递归删除:deleteall path
        

API
    依赖:log4j-core,zookeeper包,版本需要和安装的版本一致,junit包
    
    创建zk客户端,new Zookeeper(x,x,x);
        集群ip:"ip:端口,ip:端口,ip:端口"
        session超时的时间:int类型,毫秒为单位,不宜设置太小,60*1000
            zookeeper会因为加载集群环境等原因延迟略高,如果时间太少,可能因为还没创建客户端就操作,报错
        监听器:watcher,可以定义个内部类
        
    节点创建
        zkClient.create(path,data,授权ACL,类型[持久/临时CreateMode.xxx]);
        
        ACL是一个id和permission对,五种权限:创建读写删除修改权限,Ids.xxx
    
    获取节点的值
        zkClient.getData(path,是否加监听,数据存放)
        
    修改节点
        zkClient.setData(path,data,version)
    
    删除节点
        zkClient.delete(path,version)
        
    获取子节点
        zkClient.getChildren(path,watcher)
        
    监听
        
        
模拟美团

        
idea-run配置运行
    
        
分布式

分布式锁-商品秒杀
    redis分布式锁相对性能更高
    zookeeper分布式锁相对可靠性更高
    
    1.zookeeper下创建临时顺序节点
    2.判断是否最小临时节点
        1.是;获得锁
        2.否:监听前面小一级的节点
    3.获得锁请求,处理完,释放锁(删除节点)
    

创建ssm工程
启动两次工程,使用ngix做负载均衡
jmeter模拟一秒钟多个请求
curator实现分布式锁,curator-recipes,4.2版本
    创建CuratorFramework,工厂模式
    创建内部互斥锁
    最终释放锁
    
    
dubbo
    
    分布式系统:若干独立计算机的集合
    流动计算架构:
    
    
dubbo
    分布式服务框架
    
    rpc核心:通讯,序列化
    

节点角色

    Provider
    Consumer
    Registry
    Monitor        监控服务统计中心
    Container
    
快速入门

    推荐zookeeper注册中心
    注册中心负责服务地址注册于查找
    
    服务提供方
        spring使用5.0.6版本,dubbo使用2.5.7,zookeeper使用3.4.6
        
        配置标签:
            服务提供方在zookeeper的别名
            注册中心地址
            扫描类(扫描什么包下的类作为服务)
            
dubbo监控中心
    
    dubbo-admin-master.zip
    mvn clean package
    java -jar xxx.jar
    
    监控统计中心
    

启动时检查机制
    <dubbo:consumer check="true">默认true
    tomcat方式启动不会初始化action,使用main方法执行+system.in.read();
    
超时机制
    超时时间
        dubbo:provider timeout=            默认为1秒
    dubbo推荐provider上尽可能多配置consumer属性
        服务提供方比使用方更了解属性
        provider配置后,consumer如果不配置会默认使用consumer的属性
    
重试机制
    冪等方法:适合设置重试次数
    非冪等方法:不适合
    
多版本
    一个借口,多个实现类,可以使用定义版本的方式引入
    
本地存根
    先在消费者处处理一些业务逻辑,再提供者的过程,就叫做“本地存根”
    本地创建 XxxServiceStub implements XxxService
        以构造函数方式注入
    consumer配置里指定存根stub
    
负载均衡
    基于权重的随机
    基于权重的轮询
    最少活跃数-负载均衡机制(选择速度快的)
    一致性hash-负载均衡机制
    
高可用
    zookeeper注册中心宕机
        zookeeper注册中心宕机,还可以消费dubbo暴露的服务
    注册中心全部宕机后,服务提供者和消费者还能通过本地缓存通讯
    
服务降级
    目的:防止分布式服务发生雪崩效应
    
    实现方式:
        在服务器端实现降级
            屏蔽
            容错
        
dubbo服务和事务冲突:Service注解中带上interfaceClass属性,annotation-driven的proxy-target-class="true"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值