观察者
- Zookeeper集群中除了群首和追随者,还可能存在一类服务器器:观察者。
- 观察者和追随者的异同点如下:
- 相同点:他们都提交来自群首的提议(即更新数据)。
- 不同点:观察者不参与群首的选举过程。只观察和监听投票结果,然后去更新状态。
- 引入观察者的原因
- 是为了提高读请求的可扩展信息。可以在不牺牲写操作的吞吐率的前提下服务更多的读操作。其中写操作的吞吐率取决与仲裁数量的大小。
- 进行跨多个数据中心部署。由于数据中心之间的网络链接延时,将服务器分散于多个数据中心会明显降低系统的速度。在引入观察者之后,更新请求能够先以高吞吐率和低延迟的方式在一个数据中心内执行,接下来再传播到异地的其他数据中心得到执行。
服务器的构成
- 群首,追随者和观察根本上都是服务器,在服务器上主要的抽象概念为请求处理器。请求处理器是对处理流水线上不同阶段的抽象。每一个服务器实现了一个请求处理器的序列。
- Zookeeper的代码里有一个叫RequestProcessor的接口。这个接口主要方法是processRequest,接收一个request参数。在一条请求处理器的流水线上,对相邻处理器的请求的处理通过队列来实现解耦合。当一个处理器有一条请求需要下一个处理器进行处理时,他将这个请求加入到队列。
- 独立服务器
- 请求处理流水线如图:
- 请求处理流水线如图:
- 群首服务器
- 请求处理流水线如图:
- 请求处理流水线如图:
- 追随者和观察者服务器
- 请求流水线如下:
- 请求流水线如下: