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

Voldemort的RoutedStore相关推荐

  1. LinkIn基于Dynamo设计的系统:伏地魔(voldemort)设计中文文档

    引用说明:原文来自于http://www.54chen.com/document/dynamo-based-systems.html,为了方便本人阅读,文本格式略有调整. Key-Value存储 为了 ...

  2. GitHub上整理的一些工具【转载】

    技术站点Hacker News:非常棒的针对编程的链接聚合网站Programming reddit:同上MSDN:微软相关的官方技术集中地,主要是文档类infoq:企业级应用,关注软件开发领域OSCh ...

  3. MongoDB(3)--有关NoSQL及MongoDB的一些概念

    学习任何东西在没有理解的前提下去背熟一些概念是没有用的,就像只背会了几个概念而没有理解的开发人员去面试是经不住面试官的追问的.前面的两篇对MongoDB做了简单的介绍,能够很快上手,对MongoDB有 ...

  4. 一致 先验分布 后验分布_浅谈Loki分布式架构中的一致性哈希

    云原生小白 看到上面蓝色字了么?关注下吧! Loki在分布式部署的模式下,保存Ingester服务的状态主要有3个渠道,分别是etcd.consul和基于gossip协议的memberlist.不管L ...

  5. 满足极高读写性能需求的Key-Value数据库

    满足极高读写性能需求的Key-Value数据库 高性能Key-Value数据库的主要特点就是具有极高的并发读写性能,Redis,Tokyo Cabinet, Flare,这3个Key-Value DB ...

  6. NoSQL数据库探讨 - 为什么要用非关系数据库?

    源地址:http://robbin.javaeye.com/blog/524977 随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速.而传 ...

  7. 史上最全的“大数据”学习资源

    2019独角兽企业重金招聘Python工程师标准>>> 资源列表: 关系数据库管理系统(RDBMS) 框架 分布式编程 分布式文件系统 文件数据模型 Key -Map 数据模型 键- ...

  8. [转]程序员技术练级攻略

    2019独角兽企业重金招聘Python工程师标准>>> 月光博客6月12日发表了<写给新手程序员的一封信>,翻译自<An open letter to those ...

  9. mysql 从零开始_MySQL从零开始:01 数据库简介

    1.什么是数据库 从字面意思理解,首先数据库是一个存放东西的库,里面存的东西是数据.以下解释来自百度百科: 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库 ...

  10. 如何设计一个支撑数亿用户的系统

    欢迎关注方志朋的博客,回复"666"获面试宝典 要设计出一套能支撑几十亿人的系统是很困难的.对于软件架构师来说,这一直是一项很大的挑战,但是,从现在开始,看完我的文章,你就会觉得容 ...

最新文章

  1. linux下修复win8引导文件,微软为推广win8系统linux删除文件的修复技巧
  2. 3.14-19 wc、iconv、dos2unix、diff、vimdiff、rev
  3. 通用权限管理系统组件 (GPM - General Permissions Manager) - 支持请求
  4. ubuntu下sublime如何一次只打開一個文件
  5. 大数据、AI“武装”企业服务:风控、检索、安全
  6. Java Web应用程序的反跨站点脚本(XSS)过滤器
  7. Postman: Test
  8. Linux服务之httpd基本配置详解
  9. python房子代码_基于python的链家小区房价爬取——仅需60行代码!
  10. 【codevs1935】【BZOJ2879】美食节,网络流之动态加点
  11. graphviz 画决策树_决策树算法-实战篇
  12. matlab:图像的余弦变换(DCT)
  13. Vissim4.3之API/SDK编程;Vissim编程;
  14. 【错误记录】springboot项目报错Field xxx in com.xx.xx.xx.impl.xxImpl required a bean
  15. 沟通CTBS常见问题
  16. 为什么Sql Server的查询有时候第一次执行很慢,第二次,第三次执行就变快了
  17. 蓝桥杯试题算法训练之删除数组零元素——Python满分解答
  18. 【嵌入式】SIM808/SIM900发送短信AT指令0X1A
  19. python 进程详解
  20. 视频驱动V4L2子系统驱动架构-框架

热门文章

  1. 最近3年股息率最高排名
  2. git推送拉取需要验证信息
  3. Android开发笔记(一百七十三)给安装包APK文件瘦身
  4. 基于UMeng消息推送测试-demo教程(iOS版)
  5. Python采集《雪中》弹幕做词云图可视化分析,看看它为何高开低走
  6. 哈曼推出Savari MECWAVE:超低时延边缘计算平台提供交钥匙式互联服务
  7. DTAS 国产三维尺寸公差分析软件尺寸链计算几何数据导入应用
  8. 快速保存网页资料——fireshot与PDFdownload
  9. 寓教于乐:12个学习编程的游戏化平台
  10. 矸石称重自动化系统有什么功能性要求