###服务间调用问题?
存在问题待解决?
- 客户端如何维护目标服务的地址信息
- 服务端服务状态变化,客户端如何感知
- 客户端对目标服务如何让负载均衡
注册中心的出现
在这里插入图片描述
注册中心:
Dubbo体系中的Zookeeper
Spring Cloud中的Eureka 和 Consul
Zookeeper定义
分布式协调中间件
背景
Google Chubby 服务为了解决分布式一致性问题而出现。
场景:Google Chubby 有个文件系统(GFS),五个服务,需要选出一个master server,其余节点同意,如何达到一致性?
原理:5个服务都向一个主服务 Google server 创建文件并且写入自己地址,保证只有一个服务写入成功,其他服务通过读取这个文件就能知道这个master server 已经选出。
另一个层面看:这种服务也是粗粒度的分布式锁服务,创建文件就相当于加锁操作。
然而Google Chubby并不开源,雅虎基于Chubby 思想开发 类似的分布式 组件 Zookeeper,后来捐献给Apache。
所以zookeeper的出现不是为了 注册中心而设计,是为了服务一致性、分布式锁而设计,而注册中心能实现的一种功能。
一致性问题
定义理解:分布式节点达到一致性:细粒度可理解投票(意见)一致性、数据同步一致等等。
本质: 在分布式服务系统中,就某个提议达到一致
大名鼎鼎 paxos协议出现就是为了在不可信的 网络环境中,按照 paxos 这个协议就能够针对某个提议达成一致。
zookeeper设计角色
leader:处理事务请求、调度者
follower:处理非事务请求、转发事务请求 、参与投票
Observer:与follower唯一区别的是不参与投票
分布式节点数据同步问题?
分布式事务问题?
2pc提交、3p提交
leader选举?
2n+1个服务组成、必须过半
zookeeper的安装?
-
单机安装
下载安装包
解压 tar -zxvf
cp conf/zoo_sample.cfg zoo.cfg
vi zoo.cfg 修改dataDir日志存放目录
-
集群安装(2n+1)
单机安装3台 准备好
修改zoo.cfg 端口
建dataDir目录,设置myid文件 dataDir/myid文件,内容是对应的 server id
zoo.cfg文件
server.1=IP1:2888:3888 【2888:访问 zookeeper 的端口;3888:重新选举 leader 的端口】 ser server.2=IP2.2888:3888
ser ver.3=IP3.2888:2888新
myid文件
1
-
相关命令
bin/zkServer.sh start
bin/zkServer.sh status
bin/zkServer.sh stop
bin/zkServer.sh restart
zkCli.sh -timeout 0 -r -server ip:port