简述ZAB协议?
zab协议是zookeeper专门设计的支持崩溃恢复的原子广播协议。目的是实现分布式zoopkeeper各个节点数据一致性。
zk的数据模型和节点类型?
ZK数据模型
ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”。
需要注意的是 创建znode时,每个znode都必须指定值,如果没有值,节点是不能创建成功的。
ZK节点类型
- 持久(persistent)节点:
1.session断开后,数据不会丢失
2.可以创建子节点 - 临时(ephemeral)节点:
1.session断开后,数据会丢失
2.不可以创建子节点 - 持久顺序(PERSISTENT_SEQUENTIAL)节点:
(1)、(2)同持久节点
(3)创建顺序节点时会默认设置顺序标识,即znode名称后会附加一个值 — 顺序号 ,顺序号是一个单调递增的计数器,由父节点维护; - 临时顺序(EPHEMERAL_SEQUENTIAL)节点:—> ZK实现分布式锁的基础。
(1)、(2)同临时节点,(3)同持久顺序节点
简述ZK的统一配置管理、命名服务、配置管理、集群管理、分布式锁?
统一配置管理
把N个服务都共需的配置放在同一个Znode节点中,并在每个服务中watch(监听)节点的变动来改变每个服务中的配置;
命名服务
统一命名服务的理解其实跟域名一样,是我们为这某一部分的资源给它取一个名字,别人通过这个名字就可以拿到对应的资源。
比如说,现在我有一个域名www.java3y.com,但我这个域名下有多台机器:
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
别人访问www.java3y.com即可访问到我的机器,而不是通过IP去访问。
配置管理
集群管理
- 1.集群状态:可以在某个节点下为每个服务创建临时节点,如果某一个服务挂掉,临时节点自动删除;
- 2.动态选举Master:在某个节点下为每个服务创建临时顺序节点,最小序号的节点为master,当master挂掉后,可以及时推举最小序号节点为下一任master;
分布式锁
多个服务创建顺序临时节点,会生成带序号的临时节点,生成临时节点序号最小的一个服务获得锁;获得锁后,记得删除创建的临时节点;
讲下zookeeper的watch机制?
watcher的特性
- 一次性:对于ZooKeeper的watcher,你只需要记住一点,ZooKeeper有watch事件,是一次性触发的,当watch监视的数据发生变化时,通知设置该watch的client,即watcher,由于ZooKeeper的监控都是一次性的,所以每次必须设置监控;
- 客户端串行执行:客户端watcher回调的过程是一个串行同步的过程,这为我们保证了顺序,同时需要开发人员注意一点,千万不要因为一个watcher的处理逻辑影响了整个客户端的watcher回调;
- 轻量:WatchedEvent是ZooKeeper整个Watcher通知机制的最小通知单元,整个结构只包含三个部分:通知状态、事件类型和节点路径。也就是说Watcher通知非常的简单,只会告知客户端发生了事件而不会告知其具体内容,需要客户端自己去进行获取,比如NodeDataChanged事件,ZooKeeper只会通知客户端指定节点的数据发生了变更,而不会直接提供具体的数据内容;
zk和eureka的区别?
SpringCloud和Dubbo的区别?
什么是Hystrix?简述实现机制?
SpringCloud的核心组件及其使用?
spring cloud 常用的核心组件:
服务注册与发现——Netflix Eureka
客户端负载均衡——Netflix Ribbon
服务熔断器——Netflix Hystrix
服务网关——Netflix Zuul
服务接口调用——Netflix Feign
服务跟踪——Netflix Sleuth
聚合Hystrix监控数据——Netflix Turbine
分布式配置——Spring Cloud Config
你所知道的微服务技术栈?
服务注册与发现——Eureka,Zookeeper
服务路由(API网关)——Zuul
服务熔断器——Hystrix
服务负载均衡——Ribbon Nginx
服务接口调用——Fegin
服务配置与管理——Netfix公司的Archaiusm ,阿里的Diamond
服务调用——Rest RPC gRpc
消息队列——Kafka Rabbitmq activemq
服务配置中心管理——Spring Cloud Config
事件消息总线——SpringCloud Bus