Voldemort的RoutedStore

RoutedStore是Voldemort客户端的一个重要组件,他的职责是将数据操作路由到不同的节点上。RoutedStore内部维护了与节点通信的客户端列表,这些客户端是Store的实现类,可以是SocketStore或HttpStore。对于每一个节点,RoutedStore会建立请求,发送数据,等待响应,验证响应结果是否正确,执行一些记录的动作,除此之外,RoutedStore还有一些恢复的逻辑。

在使用RoutedStore之前,Voldemort使用的是ThreadPoolStore,但是ThreadPoolStore有两个重要的缺陷:

1. 逻辑非常复杂。

2. 如果某个节点的响应比较慢,会耗尽线程池里的线程。

RoutedStore采用状态机和管道的机制将各种业务操作进行分离,降低了实现的复杂度。同时,RoutedStore采用NIO模式,也避免了线程耗尽的问题。

Action

Action定义了在管道中的粒子逻辑。当Pipeline接收到一个Event时,某个Action的execute方法会被调用。逻辑的粒度没有一个很明确的标准,当然,可以用直觉的逻辑来定义Action的边界。下图是实现Action的类列表:

通过Pipeline.addEventAction(Event, Action)方法,可以将某个Action映射到某个事件上。当Pipeline接收到该事件,与该事件对应的Action会被执行。

Pipeline

Pipeline是Action执行的通道,Pipeline内部维护了一个Event队列,Pipeline会顺序读取该队列的Event,执行该Event对应的Action。addEventAction(Event, Action)接口提供注册Event以及对应的Action的功能。如果需要增加一个需要处理的Event,可以调用addEvent(Event)。

每一个Pipeline都只归属一种操作类型,操作类型有:GET, GET_ALL, GET_VERSIONS, PUT, DELETE。在Pipeline的构造方法中必须要指定某种操作类型。

Event

Event是一个枚举类型,有下面几种:

STARTED

CONFIGURED

COMPLETED

INSUFFICIENT_SUCCESSES

INSUFFICIENT_ZONES

RESPONSES_RECEIVED

ERROR

MASTER_DETERMINDED

ABORTED

HADOFF_FINISHED

猜你喜欢

转载自bofang.iteye.com/blog/1671970