dubbo 与 zk 小结

news2024/12/24 21:46:07

zk官方注册中心(mulicast zk nacos redis)

   

@reference 远程调用 消费者

   从zookeeper获取  访问url

注册中心挂了,服务正常访问:

   消费者第一次调用将提供方缓存到本地,调用不再访问注册中心

   提供者地址改变,注册中心通知消费者

超时机制 重试无法完成服务访问 自动断开链接,默认1000 1s

     @service(timeout=1000,retries=2 )提供方,建议配置在这 自己知道自己情况

     @reference(time=1000) 消费者,覆盖提供方配置

版本:reference(version="v2.0")

负载均衡:@service(weight=100) 

   random:权重随机weight=100 正相关

   

   

roundRobin权重轮询***

leastActive最少活跃调用数 相同随机 (最少执行时间)

    最后一次处理请求花费时长,调用时长最短

consistenHash一致性hash 相同参数请求同一个提供者

集群容错

@reference(cluster="failover") 消费者

失败重试 failover

    默认,适用读操作 当前失败重试其他机器 默认重试2次 retries配置

快速失败 failfast 

  失败即报错 写操作

failsafe

  失败安全,忽略异常 返回空结果

failback

  失败自动恢复,后天记录失败请求 定时重发

forking

  并行调用多个服务器,一个成功即返回

broadcast

 广播all提供者,任意一台报错则报错

服务降级  reference

  mock=force:return null  调用服务方法时直接返回null ,屏蔽不重要服务不可用时

  mock=fail:return null 调用服务方法失败后返回null,不重要服务不稳定时

  reference(mock="force:return null")

 zk

  znode 数据和节点信息

  节点类型

    persistent持久节点

   ephemeral临时节点  -e

   persistent_sequential持久化顺序节点  -s

   ephemeral_sequential临时顺序节点  -es

命令

  create  /app1 testcontext

  create /app1/p1 

  get /app1

  set /app2 testcontext 

  delete /app1 

  ls -s  目录  ,查看详细信息 

配置管理

分布式锁

curator  java客户端

   原生/zkclient 不太好用

    CuratorFrameworkFactory.newClient(连接ip:port,ip:port,ip:port,sessionTimeoutMs会话超时时间,connectionTimeoutMs连接超时时间,retyPolicy重试策略)

    client.start();

方式二:

CuratorFrameworkFactory.builder()
.connectString("")//连接字符串ip:port
.sessionTimeoutMs()//会话超时
.connectionTimeoutMs()//连接超时
.retryPolicy()//重试策略
.namespace()//根目录
.build(); 

创建节点:持久 临时-e 持久顺序-s 临时顺序-es

    client.create().withMode().forPath(String path,byte[] context);//如果创建节点未指定数据以当前客户端ip作为数据存储

查询节点

//查询节点数据
byte[] data = client.getData().forPath("/path");

//获取子路径
List<String> path =  client.getChildren().forPath("/path/p1");//查询子节点

//获取状态
Stat status = new Stat();
 client.getData().storingStatIn(status).forPath("");
system.out.println(status);

//修改数据,保证数据一致性
int version = status.getVersion();
client.setData().withVersion(version).forPath("/app1","string".getBytes());

//简单方式set
client.setData().forPath("/app1","string".getBytes());

//删除节点delete
client.delete().forPath();
//删除带有子节点deletingChildrenIfNeeded
client.delete().deletingChildrenIfNeeded().forPath("/app4");
//必须删除成功guaranteed
client.delete().guaranteed().forPath("/app1");
//回调inBackground
client.delete().guaranteed().inBackground(
  {
    new BackgroundCallback(){
      @Override
      public void processResult(CuratorFramework client,CuratorEvent event) throws Exception{
         
      }
    }
  }
).forPath("/app1");

watch事件监听

  在指定节点上注册一些watcher 由特定事件触发 将事件通知到感兴趣的客户端上

  发布/订阅

    zk原生需要自己反复注册watcher进行事件监听 繁琐

nodeCache监听特定节点

NodeCache nodeCache = new NodeCache("/app1");
nodeCache.getListenable().addListener(new NodeCacheListener(){
   @Override
   public void nodeChanged() throws Exception{
     //节点变化了
     //获取修改节点后的数据
     byte[] data= nodeCache.getCurrentData().getData();
   }
});

PathChildrenCache监听ZNode子节点

//创建
PathChildrenCache pathChildrenCache = new PathChildrenCache(client,"/app2",true);
//绑定
pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener(){
     @Override
     public void childEvent(CuratorFramework client,PathChildrenCacheEvent event) throws Exception{
        //子节点变化了
        //监听子节点数据变更 拿到更新后数据
        PathChildrenCacheEvent.Type type = event.getType();
        if(type.equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
           byte[] data = event.getData().getData();
        }
     }
  });
pathChildrenCache.start();

TreeCache监控整个树上所有节 点类似PathChildrenCache和NodeCache组合

TreeCache treeCache = new TreeCache(client,"/app2");
treeCache.getListenable().addListener(new TreeCacheListener(){
   @Override
   public void childEvent(CuratorFramework client,TreeCacheEvent event) throws Exception{
       //节点变了
    }
});

集群管理

分布式锁

 获取锁 在lock节点下 创建临时顺序节点

 获取lock下所有子节点 发现自己创建的子节点序号最小 获得了锁 使用完删除该锁

    并非最小 找到比自己小的节点 注册事件监听器 监听删除事件

 watcher监听到删除通知,判断是否min 是获取了锁否重复以上步骤

锁方案:

InterProcessSemaphoreMutex 分布式排他锁 (非可重入锁)

InterProcessMutex 分布式可重入 排他锁

InterProcessReadWriteLock 读写锁

InterProcessMultiLock 多个锁作为单个实体管理的容器 

InterProcessSemaphoreV2 共享信号量

获取锁 lock.acquire(time,timeUnit);

释放锁 lock.release

集群:

leader选举:

serverid 服务器id 编号越大在选择算法中权重越大

zxid 数据id :服务器中存放最大的数据id 值越大数据越新 选举算法中权重越大

角色

 leader 处理事务请求 各服务器调度者(同步数据给各服务器)

 follower跟随者 非事务请求 转发事务请求给leader 投票

 observer观察者 非事务请求 转发事务请求给leader

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金南瓜通讯--SECS/GEM程式配方管理recipe是什么

配方在SECS里面成为PPID&#xff0c;叫成recipe 配方有什么用&#xff1f; 设备在针对每款产品&#xff0c;都需要不同的加工工艺&#xff0c;这个加工工艺参数统称配方recipe SECS/GEM对配方描述是什么&#xff1f; process program --- process program is the pre-plann…

猴子吃桃问题(python版)

文章预览&#xff1a; 题目python解法一&#xff1a;运行结果 python解法二&#xff1a;运行结果 python解法三&#xff1a;运行结果 题目 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不过瘾&#xff0c;又多吃了一个。 第二天早…

04-prometheus服务的动态发现

一、概述 目前&#xff0c;我们每增加一个被监控的节点&#xff0c;就需要修改prometheus的配置文件&#xff0c;然后重新加载prometheus服务&#xff0c;这种方式比较繁琐&#xff0c;每次新增、删除被监控节点都需要重新操作一遍&#xff0c;不适合生产环境的大规模监控架构&…

回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测&#xff08;完整…

yolov5训练太慢的解决方案

问题原因 训练太慢大多是因为没有安装CUDA和pytorch&#xff0c;导致的只有cpu在跑&#xff0c;显卡没跑 这就是很典型的。 解决方案 第一步&#xff1a;安装CUDA 在本机上面安装CUDA,记住只有N卡可以安装&#xff0c;一开始的电脑是自带CUDA的。 如果不是自带的CUDA&…

MATLAB知识点:for循环的七道经典例题

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 &#xff08;…

贪心的一些题目

题目1&#xff1a;分班 5478. 分班 - AcWing题库 解题 #include<iostream> #include<algorithm> using namespace std; const int N100010; int n,k,l; int a[N]; int main() {scanf("%d%d%d",&n,&k,&l);int mn*k;for(int i1;i<m;i) sc…

opencv实现图像的融合

实现图像的融合并且输出一张jpg格式的照片。 先显示一个彩色图的照片 然后我以彩色方式读取1.png&#xff0c;以灰度图方式读取3.png这张图片&#xff0c;并且用两个窗口独立地去显示(我后来发现不能把灰度图和彩色图相融合) 然后实现两个融合 #include <opencv2/highgu…

使用Matplotlib绘制圆环图

圆环图是饼图的修改版&#xff0c;中间区域被切掉。圆环图更关注使用弧的面积来以最有效的方式表示信息&#xff0c;而不是饼图&#xff0c;饼图更关注比较切片之间的比例面积。圆环图在空间方面更有效&#xff0c;因为圆环图内部的空白空间可用于显示有关圆环图的一些附加信息…

黑科技工具盒源码 好用的手机工具盒iAPP源码

全新推出&#xff01;多功能工具箱&#xff1a;一款实用的手机工具集&#xff0c;提供丰富的免费小工具&#xff0c;操作简便。目前包含六项黑科技功能&#xff0c;分别为QQ云端、短信测压、Q绑查询、照妖镜、chatgpt、网页一键打包APP。工具箱体积小巧&#xff0c;不占内存&am…

自建Web视频会议,视频互动,SFU/MCU融合架构选型方案分析

网络越来越好&#xff0c;大家已经越来越多接受在家在线办公&#xff0c;在线工作越来越离不开视频会议&#xff0c;视频互动&#xff0c;当然云平台很多&#xff0c;但也用不同的需求&#xff0c;很多需要自建平台与自已的业务系统集成对接。因为大家业务系统多是b/s架构。一般…

Go-zero中分布式事务的实现(DTM分布式事务管理器,在一个APi中如何调用两个不同服务的rpc层,并保证两个不同服务之间的业务逻辑同时成功)

涉及到的相关技术 1.DTM分布式事务管理器,解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 2.SAGA事务模式,SAGA事务模式是DTM中常用的一种模式,简单易上手.(当然还有其它更多的事务模式,这里采用的SAGA只不过是其中一种较为简单的方法) 3.Go-zero框架,ETCD服务注册... …

绝地求生:【2024PGC之路——PUBG电竞积分分布】

亲爱的PUBG电竞爱好者&#xff0c; 你们好&#xff01; 2024年PUBG电竞即将开始&#xff0c;让我们一起深入了解下今年令人激动的PGS 和 PGC赛事积分分配情况。 PUBG GLOBAL SERIES&#xff08;PGS全球系列赛&#xff09;: 积分分布 根据我们之前概述的《PUBG 2024电竞计划》…

[项目设计] 从零实现的高并发内存池(一)

&#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[高并发内存池] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 ​ 目录 前言 项目介绍 1.内存池 1.1 什么是内存池 池化技术 内存池 1.2 为什…

P9905 [COCI 2023/2024 #1] AN2DL 【矩阵区间最大值】

文章目录 题目大意1.输入格式2.输出格式3.数据范围与约定 思路维护每一行区间维护每一列区间维护区间最大值code↓ 完结撒花(&#xffe3;▽&#xffe3;) / 题目大意 给定 n , m , r , s n,m,r,s n,m,r,s 和一个 n m n\times m nm 的整数矩阵 A A A&#xff0c;求它每个 …

PyTorch-神经网络

神经网络&#xff0c;这也是深度学习的基石&#xff0c;所谓的深度学习&#xff0c;也可以理解为很深层的神经网络。说起这里&#xff0c;有一个小段子&#xff0c;神经网络曾经被打入了冷宫&#xff0c;因为SVM派的崛起&#xff0c;SVM不了解的同学可以去google一下&#xff0…

Android 多桌面图标启动, 爬坑点击打开不同页面

备注 &#xff1a; MainActivity 正常带界面的UI MainActivityBt 和 MainActivityUsb 是透明的&#xff0c;即 android:theme"style/TranslucentTheme" ###场景1:只有MainActivity 设置成&#xff1a;android:launchMode"singleTask" 点击顺序&#xff1…

外贸网站模板建站

测绘检测wordpress外贸主题 简洁实用的wordpress外贸主题&#xff0c;适合做测绘检测仪器设备的外贸公司使用。 https://www.jianzhanpress.com/?p5337 白马非马衣服WordPress外贸建站模板 白马非马服装行业wordpress外贸建站模板&#xff0c;适用于时间服装企业的官方网站…

ehcache3介绍和使用示例

介绍 EhCache是一个广泛使用的Java进程内缓存框架&#xff0c;具有快速和精干的特点。它提供了以下主要优势&#xff1a; 速度快&#xff1a;由于其直接在JVM进程中运行&#xff0c;EhCache的访问速度非常快&#xff0c;适合对响应时间要求较高的应用。 配置灵活&#xff1a;…

使用 Haproxy 搭建Web群集

Haproxy是目前比较流行的一种群集调度工具&#xff0c;同类群集调度工具有很多&#xff0c;如LVS 和Nginx。相比较而言&#xff0c;LVS.牲能最好&#xff0e;但是搭建相对复杂:Nginx的upstream模块支持群集功能&#xff0e;但是对群集节点健康检查功能不强&#xff0c;性能没有…