zookeeper 实战

编程题一

在基于Netty的自定义RPC的案例基础上,进行改造。基于Zookeeper实现简易版服务的注册与发现机制要求完成改造版本:

  1. 启动2个服务端,可以将IP及端口信息自动注册到Zookeeper

  2. 客户端启动时,从Zookeeper中获取所有服务提供端节点信息,客户端与每一个服务端都建立连接

  3. 某个服务端下线后,Zookeeper注册列表会自动剔除下线的服务端节点,客户端与下线的服务端断开连接

  4. 服务端重新上线,客户端能感知到,并且与重新上线的服务端重新建立连接

思路

1.在一个list节点下面创建节点,这些节点存储服务端的ip及端口信息。客户端获取list下的所有节点就是相应的路由信息。
2.客户端监听list下节点的删除或者掉线,当掉线以后断开该节点的连接。
3.客户端监听list下节点的添加,当新增节点就连接该服务端。

实现

1.下载zookeeper,配置conf文件,运行server端。
2.服务端添加代码连接服务端。
3.服务端判断serverList节点是否存在,不存在则进行创建
4.根据服务端的ip地址以及netty监听的端口在serverList下创建临时节点,/serverList/127.0.0.1:8999
5.客户端启动时连接zookeeper,获取serverList下及其子节点,如果不存在则等待2s再进行检测。
6.分析rpc的运行模式,客户端通过代理模式创建出待调用的远程服务的对象,当调用该对象的方法时,会进入invoke方法,这个时候我们通过netty连接远程服务端,服务端接收到请求信息后,解析该信息,执行调用返回结果到客户端。要实现客户端连接多个服务端,核心就在于netty,我们创建多个连接,保存userClientHandler到一个List中,发送时随机调用一个。
7.要实现掉线断开连接,或者重连的效果,我们必须时刻关注/serverList下子节点的状态,我们使用Path Cache来实现。根据子节点的添加或者删除进行下线、连接的操作。

编程题二:

在“编程题一”的基础上,实现基于Zookeeper的简易版负载均衡策略
要求完成改造版本:

  1. Zookeeper记录每个服务端的最后一次响应时间,有效时间为5秒,5s内如果该服务端没有新的请求,响应时间清零或失效。(如下图所示)
    zookeeper 实战_第1张图片
  2. 当客户端发起调用,每次都选择最后一次响应时间短的服务端进行服务调用,如果时间一致,随机选取一个服务端进行调用,从而实现负载均衡。

思路

1.首先统计请求耗时,更新相应的请求耗时和系统时间。
2.我们设计服务端的节点结构为:
serverList
127.0.0.1:8998(响应时间) 127.0.0.1:8998 (响应时间)
3.客户端启动定时器,5s执行拉取一次zookeeper服务端的子节点的值与状态,检查该节点的最后上一次请求的修改时间mtime与当前时间是否有超5s,超过则进行置空数据。没有超过5s,则不处理。
4.客户端访问前,拉取所有子节点,检查是否存在最小响应时间的节点,没有的话就随机请求一个。

你可能感兴趣的:(#,zookeeper)