1.简介
Paxos算法
《Paxos Made Simple》 2001, Leslie Lamport
Leslie Lamport,LaTeX 中的”La”,(现微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。
解决分布式一致性问题(三阶段提交)
案例分析:
paxos算法如何容错的—讲述五虎将的实践
工业实现:
Google chubby lock service (Bigtable)
Zookeeper(apache hadoop) http://zookeeper.apache.org/
Zookeeper是什么?
zookeeper是一个分布式协调器(动物园管理者)。如何协调?保证:一致性(让一组机器用上去像一台机器),但是又是高可用(可以容灾,挂掉少于一半的机器,集群还是可用)。
我的理解:zookeeper是保证了一致性和可用性的一个低性能的文件系统。
zookeeper与文件系统和数据库的区别:zookeeper用来存一些元数据(配置数据,集群信息等),不用来存大量业务数据。zookeeper查询速度比较慢。zookeeper是高可用的。
为什么要用Zookeeper?
为什么不用数据库?1. 数据库是一个中心节点而zk是一个高可用集群 2. zk提供了心跳和异步通知的机制,数据库不提供这种机制
我们用Zookeeper用来干嘛?
服务治理:上报和发现:服务提供者zk告诉别人我是谁,我的地址是什么,服务消费者跟zk订阅内容,并访问内容,同时提供内容变更的通知。
配置管理
分布式选举
分布式锁
Zookeeper应用
集群状态监测:ESB监控zk上/service/
配置管理与监测:每个服务都会通过一个zk客户端,监听配置中心的配置节点的状态(更新),一旦配置节点被更新,服务接收到zk的回调,动态加载配置。
分布式锁:暂无应用。
leader选举:暂无应用。
3.服务器框架
java服务:服务启动时会上报自己的状态到zookeeper,在zk创建临时节点,同时监听zookeeper上的配置节点。当服务关闭或者下线时,心跳流切断,临时节点消失,ESB作出调整,关闭与该服务的链路。当服务上线,临时节点创建,ESB监测到之后与服务建立连接。
ESB:ESB会监听zookeeper上每个服务的状态(通过ephemeral node监测),跟在线的服务实例建立长连接。ESB一旦监测到下游实例的上线或者下线,会实时管理跟下游的连接。正常工作的时候,ESB在接到上游或者下游请求时,查找路由表,找到对应实例的链路,转发请求到下游服务实例,等下游请求返回时再将回复发送回开始的上游链路。
4.节点管理中心
配置中心:java的所有配置文件都存储在zk集群(配置中心),配置支持动态加载。
多个服务共享的公共配置:/config/global/db/mysql-cp.conf
单个服务的多个实例共享的配置:/config/com.helloworld/conf/mysql.conf
单个服务单个实例私有配置:/config/com.helloworld/1/logback.xml
服务中心:ESB监控服务中心的服务和实例,作动态路由。
路由策略控制:
policy=random|priority
instances=1;2;3