分布式-Zookeeper介绍
ZK具体安装步骤见:https://www.cnblogs.com/xin-xing/p/13109655.html
分布式和微服务的关系
微服务更多强调不同业务服务放在不同物理机上实现相互调用,是一种特殊的分布式。
分布式更多强调相同服务放在不同物理机上实现集群部署。
分布式的缺点
1.分布式session问题
解决方案:
session粘滞:用户访问集群中的某台设备后,强制后续所有请求都落在这台机器。
- 使用场景:机器数量适中、不适合对稳定性要求较高的系统
- 优点:实现简单、配置方便、没有额外网络开销
- 缺点:集群中有机器Down掉,用户session会丢失、容易造成单点故障
- 技术:Nginx的ip_hash负载均衡方案
session复制:将一台机器的session广播到其他机器
- 使用场景:机器数量较少,网络流量较少
- 优点:实现简单、配置方便、集群中有机器Down掉不影响客户访问
- 缺点:广播复制存在一定延时,有网络开销
- 技术:tomcat-redis-session-manager
session缓存集中管理:将session内容直接放到某个机器集中管理,当用户访问不同节点时从缓存中取session
- 使用场景:集群数量多,网络环境复杂
- 优点:可靠性好
- 缺点:实现复杂,稳定性依赖缓存稳定性,session信息存入缓存要有写入策略
- 技术:redis、spring-session
2.分布式配置问题
多台机器配置文件(如:线程池、数据库配置)需要多份,一个配置修改需要改多个地方,使用需要统一管理方便后期维护
解决方案:
etcd:CoreOS开源,轻量级分布式key-value数据库。可以为集群提供发现注册服务、管理节点状态,提供TTL数据失效时间、数据改变监控、多值、目录监听、分布式锁操作。
zookeeper:后续说
3.分布式的事务管理
4.分布式锁
解决方案:
mysql的行级锁和表级锁机制,不推荐使用。
内存数据库:redis分布式锁
etcd分布式锁、zookeeper分布式锁
5.分布式定时任务
定时任务只需要某个机器运行,由于分布式服务每台机器上都有定时任务代码,这事就会跑多次,这时我们不需要的。如果单机部署,一旦部署机器Down掉,则定时服务不执行。
解决方案:Elastic-job是当当网基于Quartz二次开发的弹性分布式任务调度系统,采用zookeeper实现分布式协调,实现任务高可用及分片。
Zookeeper介绍
Zookeeper可以理解为一个数据库,这个数据库存储的数据类型是树型目录结构。
Zookeeper中服务端集群的角色
领导者(Leader):负责进行投票的发起和决议,大于半数成为Leader,最终更新状态
跟随者(Follower):可以接收客户端请求并返回客户端,参与Leader投票
观察者(Observer):可以接收客户端链接,将写请求转发给Leader节点,但不参与Leader投票
客户端写请求流程

tickTime = 2000 initLimit = 10 syncLimit = 5 dataDir = $zookeeper_path/data #数据所在目录 dataLogDir = $zookeeper_path/datalog #数据日志所在目录 peerType = observer #只有是observer中才配置这个,不是observer的不用加这个配置 server.1 = node1:2888:3888 #2888集群内部同步端口,3888投票端口 server.2 = node2:2888:3888 server.3 = node3:2888:3888 server.4 = node4:2888:3888:observer

浙公网安备 33010602011771号