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