ZK

zookeeper3.5单机版安装教程

谁说胖子不能爱 提交于 2019-11-30 20:39:26
1、从官网上下载好安装包, 链接见这 2、用SercureCRT连接到ubuntu机器上,输入命令:rz,如果没安装的话,用 sudo apt-get install lrzsz安装一下即可。rz是传到当前目录的,我的是/home/localadmin 3、解压一下,用tar.(我这报了一个异常,在最后有解答) 4、进入到zk目录,将zoo_sample.cfg复制一份成zoo.cfg,配置改动如下: dataDir=/home/localadmin/zookeeper-3.5.3-beta/data 5、启动zk:bin/zkServer.sh start,注意这里检查zk是否正常启动,方法很重要。 5.1、输入jps,要能看到zk进程名才行,如下所示: 3118 Jps 2874 QuorumPeerMain 其中,QuorumPeerMain是它的进程名称。一般看到这个就表示zk启动成功了。但是还不足够。我就见过这个服务启动后随后又自动消失的。 5.2、那就直接看服务状态。用bin/zkServer.sh status来看,正常的话提示如下: /usr/bin/java ZooKeeper JMX enabled by default Using config: /home/localadmin/zookeeper-3.5.3-beta/bin/../conf/zoo.cfg

Dubbo重要概念介绍

非 Y 不嫁゛ 提交于 2019-11-30 19:55:34
1.proxyFactory:就是为了获取一个接口的代理类,例如获取一个远程接口的代理。 它有2个方法,代表2个作用 a.getInvoker:针对server端,将服务对象,如DemoServiceImpl包装成一个Invoker对象。 b.getProxy :针对client端,创建接口的代理对象,例如DemoService的接口。 2.Wrapper:它类似spring的BeanWrapper,它就是包装了一个接口或一个类,可以通过wrapper对实例对象进行赋值 取值以及制定方法的调用。 3.Invoker:它是一个可执行的对象,能够根据方法的名称、参数得到相应的执行结果。 它里面有一个很重要的方法 Result invoke(Invocation invocation), Invocation是包含了需要执行的方法和参数等重要信息,目前它只有2个实现类RpcInvocation MockInvocation 它有3种类型的Invoker 1.本地执行类的Invoker server端:要执行 demoService.sayHello,就通过InjvmExporter来进行反射执行demoService.sayHello就可以了。 2.远程通信类的Invoker client端:要执行 demoService.sayHello,它封装了DubboInvoker进行远程通信

zk中ReferenceCountedACLCache

左心房为你撑大大i 提交于 2019-11-30 18:18:25
作用:完成LIst<ACL>与Long互相转换,DataNode中acl是一个Long值,并不是ACL列表 空间复杂:内部类AtomicLongWithEquals 属性: //日志信息 private static final Logger LOG = LoggerFactory.getLogger(ReferenceCountedACLCache.class); // long ACL 列表对应关系 final Map<Long, List<ACL>> longKeyMap = new HashMap<Long, List<ACL>>(); // ACL 列表 long对应关系 final Map<List<ACL>, Long> aclKeyMap = new HashMap<List<ACL>, Long>(); final Map<Long, AtomicLongWithEquals> referenceCounter = new HashMap<Long, AtomicLongWithEquals>(); private static final long OPEN_UNSAFE_ACL_ID = -1L; /** * these are the number of acls that we have in the datatree */ long aclIndex =

zookeeper知识点总结

末鹿安然 提交于 2019-11-30 18:08:46
1.ZooKeeper是什么? ZooKeeper是一个 分布式 的,开放源码的分布式 应用程序协调服务 ,是Google的Chubby一个开源的实现,它是 集群的管理者 , 监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作 。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 客户端的 读请求 可以被集群中的 任意一台机器处理 ,如果读请求在节点上注册了监听器,这个监听器也是由所连接的zookeeper机器来处理。对于 写请求 ,这些请求会同 时发给其他zookeeper机器并且达成一致后,请求才会返回成功 。因此,随着 zookeeper的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降 。 有序性是zookeeper中非常重要的一个特性,所有的 更新都是全局有序的 ,每个更新都有一个 唯一的时间戳 ,这个时间戳称为 zxid(Zookeeper Transaction Id) 。而 读请求只会相对于更新有序 ,也就是读请求的返回结果中会带有这个 zookeeper最新的zxid 。 2.ZooKeeper提供了什么? 1、 文件系统 2、 通知机制 3.Zookeeper文件系统 Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点 都可以设置关联的数据

dubbo源码解析之服务export 远程服务②

大城市里の小女人 提交于 2019-11-30 17:59:27
说在前面 前期回顾 sharding-jdbc源码解析 更新完毕 spring源码解析 更新完毕 spring-mvc源码解析 更新完毕 spring-tx源码解析 更新完毕 spring-boot源码解析 更新完毕 rocketmq源码解析 更新完毕 dubbo源码解析 更新中 sharding-sphere源码解析 计划中 netty源码解析 计划中 spring-cloud-alibaba-dubbo源码解析 计划中 github https://github.com/tianheframe sharding-jdbc源码解析 更新完毕 rocketmq 更新完毕 dubbo源码解析 更新中 seata源码解析 更新中 spring-cloud-tianhe 更新中 mq-tianhe 计划中 rpc-tianhe 计划中 源码解析 https://github.com/tianheframe /dubbo.git dubbo源码解析后的源码和公号文章同步更新。 返回到这个方法,服务注册信息恢复com.alibaba.dubbo.registry.support.FailbackRegistry#recover @Override protected void recover() throws Exception { // 获取服务注册的url集合 Set<URL>

Docker 部署 zookeeper

核能气质少年 提交于 2019-11-30 17:59:08
说明 系统:CentOS-7.6 1810 Minimal zookeeper_ver: 3.4.14 基于此环境之上 1.安装docke环境 https://my.oschina.net/yx571304/blog/3113758 2.配置存储(Glusterfs) https://my.oschina.net/yx571304/blog/3113769 3.docker-compose 安装(使用下面的脚本安装docker-compose) curl -sSL https://dwz.cn/XOJj0Njx -o docker.sh chmod +x docker.sh ./docker.sh compose docker-compose方式部署 可固定容器IP 容器名称 健康检查无法做到异常退出(仅显示容器状态) 仅单机部署 创建数据目录 mkdir -p /swarm/volumes/zk-{1..3} 创建yaml文件 cat > zookeeper.yaml <<'EOF' version: '3.7' services: zk-1: image: zookeeper:3.4.14 restart: always hostname: zk-1 container_name: zk-1 ports: - 2181:2181 environment: TZ: Asia

ZooKeeper与Curator注册和监控

前提是你 提交于 2019-11-30 17:26:01
Curator提供了对zookeeper客户端的封装,并监控连接状态和会话session,特别是会话session过期后,curator能够重新连接zookeeper,并且创建一个新的session。 对于zk的使用者来说,session的概念至关重要,如果想了解更多session的说明,请访问: http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html zk客户端和zk服务器间主要可能存在下面几种异常情况: 短暂失去连接:此时客户端检测到与服务端的连接已经断开,但是服务端维护的客户端session尚未过期,之后客户端和服务端重新建立了连接;当客户端重新连接后,由于session没有过期,zookeeper能够保证连接恢复后保持正常服务。 失去连接时间很长:此时服务器相对于客户端的session已经过期了,与先前session相关的watcher和ephemeral的路径和数据都会消失;当Curator重新创建了与zk的连接后,会获取到session expired异常,Curator会销毁先前的session,并且会创建一个新的session,需要注意的是,与之前session相关的watcher和ephemeral类型的路径和数据在新的session中也不会存在,需要开发者在CuratorFramework

不知道如何实现服务的动态发现?快来看看 Dubbo 是如何做到的

守給你的承諾、 提交于 2019-11-30 16:21:22
上篇文章 如果有人问你 Dubbo 中注册中心工作原理,就把这篇文章给他 大致了解了注册中心作用以及 Dubbo Registry 模块源码,这篇文章将深入 Dubbo ZooKeeper 模块,去了解如何实现服务动态的发现。 ps: 以下将 ZooKeeper 缩写为 zk。 一、dubbo zk 数据结构 在 ZooKeeper 基本概念分享 一文讲道,ZK 内部是一种树形层次结构,节点存在多种类型。而 Dubbo 只会创建持久节点和临时节点。 若服务提供者服务接口为 com.service.FooService ,将会在 ZK 中创建创建如下路径 /dubbo/com.service.FooService/providers/providerURL 。 服务路径分为四层,根节点默认为 dubbo,可以在 dubbo-registry 设置 group 属性改变该值。 ps: 若无注册中心隔离需求,不要随便修改。 第二层节点为服务节点全名称,如 com.service.FooService 。 第三层节点为服务目录,如 providers。另外还存在其他目录节点,分别为 consumers(消费者目录),configurators(配置目录),routers(路由目录)。下面服务订阅主要针对这一层节点。 第四个节点为具体服务节点,节点名为具体的 URL 字符串,如 dubbo:

三种实现分布式锁的方式

戏子无情 提交于 2019-11-30 14:59:37
一、为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间! 后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图: 上图可以看到,变量A存在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象,例如:UserController控制器中的一个整形类型的成员变量),如果不加任何控制的话,变量A同时都会在JVM分配一块内存,三个请求发过来同时对这个变量操作,显然结果是不对的!即使不是同时发过来,三个请求分别操作三个不同JVM内存区域的数据,变量A之间不存在共享,也不具有可见性,处理的结果也是不对的! 如果我们业务中确实存在这个场景的话,我们就需要一种方法解决这个问题! 为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLock或Synchronized)进行互斥控制。在单机环境中,Java中提供了很多并发处理相关的API

分布式一致性算法

亡梦爱人 提交于 2019-11-30 14:53:30
分布式一致性理论 CAP 理论 一个分布式系统 不可能同时满足 一致性( C:Consistency ),可用性( A: Availability )和分区容错性( P:Partition tolerance )这三个基本需求, 最多只能同时满足其中的 2 个 。 如下: 选项 描述 C(Consistence) 一致性 ,指数据在多个副本之间能够保持一致的特性( 严格的一致性 )。 A(Availability) 可用性 ,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。 P(Network partitioning) 分区容错性 ,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。 Base 理论 BASE 是 Basically Available (基本可用) ,Soft state (软状态),和 Eventually consistent (最终一致性)三个短语的缩写。 既是无法做到 强一致性 ( Strong consistency ),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到 最终一致性 ( Eventual consistency ) 基本可用 允许出现响应时间损失或者功能损失。 软状态 允许系统中的数据存在中间状态