PNUTS是Yahoo!的分布式数据库系统,支持地域上分布的大规模并发操作。它根据主键的范围区间或者其哈希值的范围区间将表拆分为表单元(Tablet),多个表单元存储在一个服务器上。一个表单元控制器根据服务器的负载情况,进行表单元的迁移和拆分。每条记录的数据都没有固定的模式(采用JSON格式的文本)

组件

  • 区域(Region):一个区域包含全部表的数据和相关组件。
  • 表单元控制器(Tablet controller):一个表单元是是表中被划分出来的一组记录的集合。表单元控制器管理着表单元的创建,切分,维护存储单元与表单元的映射关系。有主备服务器来保证其可用性。
  • 路由器(Router):根据从表单元控制器中读取到的信息将数据路由到正确的存储单元。另外也支持数据的聚合。
  • 存储单元(Storage unit):存储表单元。可以是一个Ulix文件系统(hash表)或者MySQL InnoDB(顺序表)
  • 消息中间件(YMB):分发备份记录到其他的Region或者更新通知给客户端。

一致性

由于PNUTS设计数据分布在地理上的不同位置,所以它没有采用代价比较高的事务操作。另外由于最终一致性可能会出现一些不希望看到的中间结果,所以PNUTS主要实现一种时序上的一致性。

在每条记录中,有一个字段标志该记录Master所属的区域,所有的更新先发往Master,由Master将数据同步到其他的备份中。为了避免插入操作的冲突,表也分为主备,所有的记录插入操作都先在主表上执行。在底层,通过消息中间件(YMB, Yahoo! Message Broker)来保证数据分发的顺序。

另外每条记录都有一个版本号,由应用根据自己的需要,来决定读写记录的方式: 可以读取任意的备份,也可以读取最新的记录,或者读取指定的版本,在写的时候既可以直接覆盖,也可以实现乐观锁的控制。通过这种方式,来保证应用的读写一致性和写读一致性。

可用性

数据的可用性主要是通过YMB来保证,YMB也同时管理日志,数据发布到YMB视为数据的提交,初始时YMB将数据写到两个服务器的日志中, 只有当数据分发到所有的区域上后,YMB才将日志删除。

在一条记录的master区域不可用时,应用程序可以决定是否继续更新,如果更新则需要手动解决潜在的冲突。

客户端支持自动的failover

高性能

主要通过本地化操作实现,系统统计最近三次请求的来源,将master迁移到相应的Region中。

表单元控制器检测系统的负载情况,通过迁移或者拆分tablet来均衡负载。

另外,数据拷贝的传输为异步操作。

分布式系统介绍-PNUTS的更多相关文章

  1. 大型网站系统与Java中间件实践

    大型网站系统与Java中间件实践(贯通分布式高并发高数据高访问量网站架构与实现之权威著作,九大一线互联网公司CTO联合推荐) 曾宪杰 著   ISBN 978-7-121-22761-5 2014年4 ...

  2. 《大型网站系统与JAVA中间件实践学习笔记》-1

    第一章:分布式系统介绍 定义:分布式系统是一组分布在网络上通过消息传递进行协作的计算机组成系统. 分布式系统的意义 升级单机处理能力的性价比越来越低 单机处理器能力存在瓶颈 处于稳定性和可用性考虑 阿 ...

  3. 《大型网站系统与JAVA中间件实践》【PDF】下载

    <大型网站系统与JAVA中间件实践>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 到底是本什么书,拥有这样 ...

  4. 大型网站系统与 Java 中间件实践

    http://wanglizhi.github.io/2016/07/27/JavaWeb-And-MiddleWare/ 第一章 分布式系统介绍 分布式系统的定义:组件分布在网络计算机上,组件间仅仅 ...

  5. 一文读懂非关系型数据库(NoSQL)

    为了更好的理解非关系型数据库,我又深入的度娘了下 原文地址:https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&co ...

  6. 最新咕咆+鲁班+图灵+享学+蚂蚁+硅谷+源码 Java架构师资料《Java架构师VIP课程》

    最新的Java架构师完整资料,完整视频+源码+文档. 每一套都是一百多个G的资料,无密. JAVA架构师全套课程 咕泡学院互联网架构师第一期 咕泡学院互联网架构师第二期 咕泡学院互联网架构师第三期 博 ...

  7. 【译】Object Storage on CRAQ 上篇

    摘要 大型存储系统通常会在许多可能出故障的组件上进行数据复制和数据分区,从而保证可靠性和可扩展性.但是许多商业部署系统为了实现更高的可用性和吞吐量,牺牲了强一致性,特别是那些实时交互系统. 本论文介绍 ...

  8. Zipkin分布式跟踪系统介绍

    Zipkin是什么Zipkin分布式跟踪系统:它可以帮助收集时间数据,解决在microservice架构下的延迟问题:它管理这些数据的收集和查找:Zipkin的设计是基于谷歌的Google Dappe ...

  9. MooseFS分布式文件系统介绍

    一.简介 MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本.对于访问的客户端或者用户来说,整个分布式网络文件系统 ...

随机推荐

  1. 支持xp风格的manifest

    MSDN 和一些网站上的manifest 有问题 ,  自己修改了一下加上Microsoft.VC80.DebugCRT 和 Microsoft.VC80.DebugMFC 就可以了.如果是relea ...

  2. Odoo9发行说明

    2015年10月1日,期待已久的Odoo9正式发布.本文是Odoo9正式版发行说明,基于官网资料翻译. 译者: 苏州-微尘原文地址:https://www.odoo.com/page/odoo-9-r ...

  3. iOS App与iTunes文件传输的方法和对iOS App文件结构的说明

    转:http://www.xiaoyaoli.com/?p=368 就像很多iOS上面的播放器App一样,本文编写一个程序可以通过iTunes往里面放文件,比如编写一个音乐播放器程序,通过itune往 ...

  4. Android之针对WebView的全屏播放

    转载请标明转载处:http://bbs.csdn.net/topics/390839259 本人刚学android,菜鸟一个,第一次写帖子,最近因为项目要用webview加载html5的视频,开始不能 ...

  5. Android组件化之终极方案

    Android组件化项目地址:Android组件化项目AndroidModulePattern Fragment或View如何支持组件化 如何管理组件 Fragment或View如何支持组件化 距离 ...

  6. 用SwipeBackLayout实现滑动关闭当前Activity

    说起SwipeBackLayout,我对它还是有一定怨念的.当时就希望能实现关闭当前Activity的效果,但完全搜不当相关的东西,最后好不容易搜到了这个SwipeBackLayout,觉得可以实现滑 ...

  7. java 生成zip文件并导出

    总结一下,关于Java下载zip文件并导出的方法,浏览器导出. String downloadName = "下载文件名称.zip"; downloadName = Browser ...

  8. [Web 前端] inline-block元素设置overflow:hidden属性导致相邻行内元素向下偏移

    cp from : https://blog.csdn.net/iefreer/article/details/50421025 在表单修改界面中常会使用一个标签.一个内容加一个修改按钮来组成单行界面 ...

  9. DP思路

    在这里记录一些在大神们的博客,以及自己做过的一些DP的神奇思路吧 1.2015/04 NEUQ 月赛  转自:http://zyfzyf.is-programmer.com/posts/89993.h ...

  10. C C++ 去除 unused的提示

    C C++ 去除 unused的提示 #define UNUSED(VAR) {VAR++;VAR--;} unsigned int user_id=0; UNUSED(user_id); 这样就可以 ...