文档章节

分布式介绍

l
 liuqqq
发布于 2016/05/08 21:28
字数 1643
阅读 10
收藏 0
1 EC纠删码 & Reed-Solomon 算法

    分布式存储要讲究效益。正常情况下系统对一个数据会通过备份数据以保证数据安全,例如把数据存储为两份或者三份,这个方法的优点是简单,CPU没有计算量,但是存储成本高。

     一些公司未来节约成本会使用EC纠删码算法,如七牛公司,其具体的算法我不清楚,其大概就是把数据氛围28分,计算出4份冗余数据,即以1.1倍的数据量以达到存储三倍的等同效果。百度网盘也用了EC方法来节约存储,如Reed Solomn算法,它把数据划分为8份,通过这个算法计算出4份冗余数据,通过1.5倍数据来达到3倍数据的效果。EC纠删码的缺点当然是CPU的计算量比较高。

   2 多粒度存储

   SATA盘存储数据时候,以4k为一个物理单位作为一个page给文件分配空间,其粒度就是4k。类似的,分布式存储中也要区分数据的粒度。一般地,分布式系统为了在系统存储利用率和io效率之间取得一些平衡,会采取多级粒度,如大文件存储系统如HDFS之类可以8M为最小粒度,以256M为最大粒度,中间有16M、32M、64M和128M四种粒度,共6种粒度。分布式系统可以把集群中每台机器按照某种粒度均匀划分,当外部有文件写申请的时候,metaserver可以根据文件的大小来把文件写在不同的机器上。

   有些内存数据库(如鹅厂的CMEM)可以认为是一个object文件系统,它的object大小默认为84B,当然这个object大小是可以由client决定的。CMEM及其继承者CKV中的datanode(即集群中的数据存储者)每个数据的桶的大小为1G,所以如果你去搜索CKV时候,它自称数据伸缩范围为1G至1P。

   3 串行写以及多次读取

   如上面已经叙述过的,一般大型的分布式系统中如HDFS为了保证数据的CAP中的P一般会把数据存储三份。那么,第一个问题就是选取集群中的那三台机器呢?分布式系统一般写速度要比读速度快,这是其与单机系统有所区别的一个显著特点,因为大部分分布式系统读的次数要远多于写的次数。metaserver可以先选取四台机器,分别进行网络测速,从中选择三台网速最快的系统,其中一台为master,其他两台为slave。

    当FS中的metaserver收到client通过写请求发来的数据包时候,它为了保证CAP中的C即严格数据一致性,会通知三台机器进行串行写。metaserver先把请求包发给master,master收到包的时候,把要写的文件内容放在内存中,不待写成功就会立即把请求包再转发给一个slave,第一个slave写成功后再把数据转给第二个slave,待第二个slave写成功后再把给master一个ack包,以通知master两个slave都已经写成功。master再检测自己的数据是否写成功了,只有自身也写成功才会给metaserver返回ok包。master不待自己写成功就把数据包转给slave有两层意义,第一是保证串行速度,第二也是最终的一条就是当master-slave-slave三份数据还没有写成功时,如果master收到了metaserver转发的外部其他client的对这个文件的读请求,此时它从磁盘上就读不到数据,其他client就得不到这个文件,这就保证了数据的严格一致性。

     4 命令取消

     在HDFS这种保证数据严格一致性的系统中,数据存储采用了master-slave-slave结构,只有master对外提供读服务。有的分布式系统只用了master-slave两级结构保证数据备份,master和slave都可以对外提供数据读服务。如果client规定读超时为10ms,它可能受限把读请求发送给master,当10ms超时后后还没有收到master的返回包,它就可以再向slave发送读请求。

    如果发出去2ms后,client收到了master的返回包,它就可以再向slave发送一个cancel读命令,当slave收到这个命令后就不再执行先前收到的读请求。

    5 单线程与多线程

    分布式系统的开发者,有人喜好多线程如memcached,有人喜好单线程如redis。依照现在的趋势看来,redis的用户貌似比memcache多一些。但是redis因为采用了单线程模式开发,它就有可能发生一些莫名其妙的问题。

    我知道的一个场景就是,如果用户采用了aof方式在sata中备份内存的数据,当sata盘写满的时候,redis就会把磁盘清空,把内存中的所有数据写入sata盘。这个时候如果有外部写请求,它会在处理写请求和把内存中的数据写入磁盘两个任务之间倒腾,此时就有可能把写请求的数据丢掉。如果此时还有外部读请求,它就会疯掉。

  6 主从数据同步
  很多通过log进行主从同步的系统如mysql,都有一个checkpoint的概念。每隔一段时间,就检查上一次checkpoint到目前为止数据的checksum是否一致,如果不一致只用从checkpoint到目前为止之间的数据进行同步就可以了。
  详细步骤可以参考[《腾讯游戏数据自愈服务方案简介》][1]。

Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx 
1.     项目核心代码结构截图

分布式框架介绍 - kafkaee - kafkaee的博客

   项目模块依赖

分布式框架介绍 - kafkaee - kafkaee的博客

特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化

2.    项目依赖介绍

   2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图:

 

分布式框架介绍 - kafkaee - kafkaee的博客

       2.2 Dubbo独立服务项目依赖如下图:

 

分布式框架介绍 - kafkaee - kafkaee的博客

3.  项目功能部分截图:

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

zookeeper、dubbo服务启动 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

dubbo管控台 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 REST服务平台

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客


© 著作权归作者所有

共有 人打赏支持
l
粉丝 2
博文 11
码字总数 42714
作品 0
东城
私信 提问
加载中

评论(2)

l
liuqqq
在HDFS这种保证数据严格一致性的系统中,数据存储采用了master-slave-slave结构,只有master对外提供读服务。有的分布式系统只用了master-slave两级结构保证数据备份,master和slave都可以对外提供数据读服务。如果client规定读超时为10ms,它可能受限把读请求发送给master,当10ms超时后后还没有收到master的返回包,它就可以再向slave发送读请求。s
l
liuqqq
在HDFS这种保证数据严格一致性的系统中,数据存储采用了master-slave-slave结构,只有master对外提供读服务。有的分布式系统只用了master-slave两级结构保证数据备份,master和slave都可以对外提供数据读服务。如果client规定读超时为10ms,它可能受限把读请求发送给master,当10ms超时后后还没有收到master的返回包,它就可以再向slave发送读请求。

暂无文章

追加字节能优化性能

这种方式看起来很神奇,单如果深入理解处理器架构就能理解其中的奥秘。让我们先来看看LinkedTransferQueue这个类,它使用一个内部类型来定义队列的头队列Head和尾节点tail,二这个内部类Pad...

无知的小狼
30分钟前
3
0
性能优化(JVM概念及配置)

虚拟机组成 一次编写,到处运行 Java虚拟机是对操作系统的模拟,隔离差异 2018编程语言排行榜 一个复杂的构架 虚拟机的内部概念 运行原理 编译器,解释器执行流程 内存分配-线程模型 栈帧模型...

这很耳东先生
36分钟前
3
0
Scala之初步认识与环境准备

1. 了解 Scala 1.1. 什么是 Scala Scala 是 Scalable Language 的简写,是一门多范式的编程语言。 Scala设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚...

飞鱼说编程
57分钟前
4
0
Vue项目分环境打包的实现步骤

在项目开发中,我们的项目一般分为开发版、测试版、Pre版、Prod版。Vue-cli的默认环境一只有dev和prod两个,之前每次要发布测试版或Pre版都是修改了源码中API地址后打包,这样很麻烦。如果能...

peakedness丶
58分钟前
6
0
vue+lowdb+express

搭建流程: 1.安装Node.js; 2.安装npm; 3.安装Express; 搭建流程 npm install -g express 安装 express 生成器 npm install -g express-generator 查看是否安装成功,随便输的一个命令...

Js_Mei
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部