文档章节

分布式介绍

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发送读请求。

暂无文章

科学利用谷歌云平台

当今既是大数据时代,也是云计算时代。云平台构建已经成了诸多大数据平台建设第一步。于是各家互联网巨头们纷纷都开启了云平台服务。国内的以阿里云、腾讯云、百度云、华为云为首,国外的有A...

胖胖雕
9分钟前
0
0
公众号关联小程序发送关联通知

公众号关联小程序发送关联通知,对于推广小程序有着很大的帮助。所以问题来了,怎么做到在公众号关联小程序发送关联通知呢? 一:开发中遇到的问题 之前在开发过程中发现,公众号已经关联小程...

Code辉
12分钟前
0
0
并发编程基础之JMM学习摘要

一、JMM定义 Java内存模型即Java Memory Model(JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见(内存可见性),从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程...

狠一点
17分钟前
0
0
mysql 开启日志记录并且解决日志时间错误问题

查看日志开启状态 SHOW VARIABLES LIKE 'general%'; 开启日志 SET GLOBAL general_log = 'ON'; 本人mysql版本5.7 在查询日志的时候发现时间和系统时间不对 查看系统默认时间参数 SELECT @@l...

Marhal
19分钟前
0
0
Kubernetes上的负载均衡详解

如果您的应用程序是面向大量用户、会吸引大量流量,那么一个不变的目标一定是在高效满足用户需求的同时、不让用户感知到任何类似于“服务器繁忙!”的情况。这一诉求的典型解决方案是横向扩展...

RancherLabs
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部