姚文辉课程笔记]大规模分布式存储系统的高可用和可扩展方案

【元数据管理的高可用性和可扩展性】 (1)高可用:单个节点出现问题,服务仍旧可以用。 (2)可扩展:分布式做法线性提高扩展能力。 通常的做法是可以将这些节点做成多个备份,保证在一个备份出现问题的时候,仍然可以提供服务。但是多个备份间需要维护数据一致性,防止服务切换造成的数据不一致或者丢失。 【高可用性方案】 方案一: HDFS中元数据的高可用性方案是引入了分布式锁服务ZooKeeper,每个NameNode的FailoverController来维护分布式锁状态,在出现锁丢失的情况下,触发主备切换。主NameNode将操作日志写入到共享数据存储的设备上,这样的设备可以是有DRBD功能的磁盘或者NFS系统。 这个实现方案相对简单,因为较复杂的功能都放到了锁服务和共享存储系统中。这样的做法也是非常经济实惠的,复杂性均由分布式系统的单个模块来维护,其他服务进行依赖,这种做法降低了软件的实现难度和维护工作量。 方案二: 阿里的盘古分布式文件系统Meta server之间采用了Paxos的特化Raft实现数据选举和同步,可以存在多个master的备份。 方案三: 在Ceph系统的元数据管理模块MDS从原理上来说使用了共享存储,每个MDS有一个Standby进程作为热备。但是其独特之处在于是利用了OSD同Ceph monitor组成的RADOS最为共享存储,这样的实现方法即保证了元数据管理的高可用,又提供了无限可扩展的能力,同时可以不依赖于其他系统做到了独立自包含。 【可扩展性方案】 方案一: HDFS的可扩展性,Namespace切分的Fedeation。在HDFS Federation中NameNode的扩展性依赖于目录树的静态切分,每个目录子树被称为一个Volume,并将切分后的Volume分配到不同的NameNode上。DataNode则作为数据存储池,被所有的NameNode共享使用。为了让客户端可以找到某棵树中的节点,在client端需要加载ClientSideMountTable,这里记录了目录树同NameNode的对应关系,用户使用文件名访问元数据时,客户端首先用文件名从MountTable中获取NameNode的服务端口后,再发送元数据请求。 Federation的这种做法简单高效,静态划分的方法需要提前对各个NameNode未来元数据量有比较准确的估计,否则很容易造成各个NameNode间元数据的不平衡,给整个存储系统带来瓶颈。 盘古系统采用了同HDFS一样的解决方案,在实现过程中对应每个HDFS中的NameNode会部署一组盘古多master。盘古Federation除了用MountTable让用户透明访问系统外,还提供了新的访问方式。用户可以在文件名前指定Volume名称,这样可以绕过mount

Read More

[姚文辉课程笔记]大规模分布式存储系统的数据正确性、数据可靠性、数据均衡、垃圾回收

【数据正确性 checksum】 在集群中网络、内存、磁盘和软件都有可能导致数据错误,那么在分布式存储系统中如何保证海量数据中没有任何数据错误呢? (1)数据应该给全程保护,否则任何一个环节出现问题导致数据错误未被检查到,都可能会导致数据出错。 (2)被保护的数据至少应该具有数据、数据长度和CRC校验值这样的三元组,而且在任何后续的处理中,都应该先对数据进行处理后,再校验这个3元组的一致性,来保证刚被处理过的数据是正确的。 在数据进入系统前,有checksum保护。否则数据在系统内部传输,则可能出现错误。 【数据可靠性 Replication】 (1)当机器/磁盘出现异常,通过其它副本快速恢复。 (2)充分利用多台机器的复制带宽。 (3)实际系统中,应考虑复制的优先级以及复制的流量控制。 通常会按照数据的剩余拷贝来计算复制的优先级。 剩余拷贝数量越少的数据应该优先被复制。 优先级高的数据流量复制也不能超过复制流量限制。 【数据均衡 Rebalance】 (1)当有新的机器/磁盘上线时,迁移数据保证负载均衡。 (2)充分利用多台机器的复制带宽。 (3)实际中,也需要考虑控制因为负载均衡而导致复制优先级和流量控制。 【垃圾回收

Read More

[姚文辉课程笔记]大规模分布式存储系统的服务质量

【IO QoS】(服务质量) 问题:当多个用户访问存储系统时如何保证优先级和公平性 阿里盘古文件系统中采用的方案: (1)将IO请求按优先级分成多个类别,每个类有相应的权重表示该类请求占用IO带宽的比例 (2)IO请求根据分类放入相应的队列,队列内根据队列限制和任务做调度和丢弃 (3)调度器根据相应权重从队列取出请求进行调度 0

Read More

[姚文辉课程笔记]大规模分布式存储系统的读流程和读流程优化

【读正常流程】 (1)Clinet携带文件名从Master中获取数据位置。 (2)Clinet任意选择一份副本来进行读取(其中,也要考虑读取的位置等)。 对异常的读取: 如果读取第一个位置出错,则开始读取第二个位置……依次尝试直到读取到正确数据。这种方式增加了读取的时间。 【读流程优化】 目的是为了解决依次重试带来的性能下降。 关键:并行读取某几个CS(比如两个)。一旦一份读取完成,就发送结束读取的消息。 缺点:增加了两份IO复用。 慢节点规避 Clinet收到Master返回的文件位置后,对多个位置评价延迟时间,然后选择延迟时间最小和第二小的进行读取。 0

Read More

[姚文辉课程笔记]链式写流程与主从模式写流程

【链式写正常流程】 (1)Client端进程在Master上打开文件写(Client请求时传输文件名,Master返回数据写入位置等)。 (2)Client端以链式方式将数据写入到多个CS中。 Client将数据传递给CS1,CS1将数据传递给CS2,CS2将数据传递给CS3……最后一个节点将写入成功的结果依次向上传递给Client。 【写流程——主从模式】 链式写入方式适合:数据写入量大,但是不注重latency(延迟)的业务。 主从模式适合:数据写入频繁,要求低延迟的业务。 primary:写操作的协调者和接收者 replica:数据的接收者 流程: (1)Client将数据传送给Primary,Primary将数据转发给另外两台Replica,等到所有数据都合并到内存的cache后,Primary返回给Client确认消息。 (2)等待Replica将所有数据都写入到物理磁盘后,Replica将发送磁盘写入成功的消息给Primary。Primary在将数据成功写入磁盘后,也将发送数据写入成功的消息给Client。 分析: (1)Primary流量是两份流量(有两个Replica交互)。如果是数据导入量较大的业务,则不适合。 (2)在写入3个副本的情况下,只需两跳即可达到Client端(1个Primary和2个Replica一共写了3个副本,之后Replica发送一跳到Primary,Primary再发送一跳到Client,一共需要发送两跳)。从而减小了网络延迟。 【链式写入异常】 以链式写入方式为例。使用链式写入方式在写入时,如果链条中间节点写入失败,可以采取放弃写入,直接写入到失败节点后边的节点的方法来提高写入成功率。 【Seal and New】

Read More

[姚文辉课程笔记]大规模分布式存储系统的挑战

【小概率事件】 (1)磁盘机器损坏:磁盘具有损坏率(5000中有每天5-6个),要对数据进行紧急复制 (2)Raid卡故障:Raid卡将数据写入磁盘 (3)网络故障:集群中的部分节点网络失联、网络丢包等 (4)电源故障:机器掉电,影响数据可靠性 (5)数据错误:数据在磁盘上可能会发生错误 (6)系统异常:多个节点时钟不一致、机器死机 (7)热点:计算热点过度抢占存储资源,热点机器需要做存储隔离,否则可能发生错误 (8)软件缺陷:用户经常重启、用户频繁切换文件、软件设计不合理、低效的用户程序 分布式存储系统应具备识别和检验数据有效性的能力,防止数据混乱。 0

Read More

[姚文辉课程笔记]大数据对分布式存储系统需求

【大数据对分布式存储系统需求】 关键网站:www.sortbenchmark.org。可以通过这个网站来查看性能。 【大数据对分布式存储系统需求】 (1)高容量:需要至少100PB (2)高吞吐量:每小时1PB (3)数据的高可靠性:数据不能丢失、错误 (4)数据的高可用:需要达到99.95% (5)高效运维(自动化运维):业务种类多、硬件设备多、软件负责度高 (6)低成本:数据压缩、混合存储 要实现这6个方面,如果要满足上述要求,对大数据的要求比较大。 偶尔会发生硬件错误,导致系统重启或数据错误。 在大数据场景下,要正确处理这种小概率事件,并减少这种小概率事件的发生。使得大规模下的小概率事件成为常态。 0

Read More

大数据的步骤、应用、系统的分类、难点

【大数据的一般步骤】 (1)大数据采集和预处理 (2)大数据存储和管理 (3)大数据的计算和处理 【大数据的应用】 谷歌的广告推荐、Facebook的广告推荐等用到了大数据。通过挖掘大数据中的关键信息可以获取用户特征数据,然后用于营销。 【大数据系统的分类】 (1)分布式文件系统:HDFS、GFS (2)半结构化存储系统:HBase(NoSQL数据库)、 (3)计算机框架和编程模型:Hadoop、Spark、Storm (4)图计算和机器学习系统:MLbase (5)类SQL查询系统:Hive、 【大数据的难点】 多样性、试试行、不确定性、关联性、异质性 0

Read More

青春期孩子叛逆怎么办?

一般来说,青春期的孩子叛逆,不能仅仅认为是孩子的原因。也可以是家长的原因,也可以是社会的原因。 我在上中学的时候,也曾经叛逆过。现在想想,叛逆的原因大多是自己的想法与别人的想法冲突了,然后又没有能力和权力来说服别人自己的想法正确的,所以就产生了叛逆的行为。青春期的孩子,已经初步有了自己的想法,并且渴望得到别人的认同。如果得不到认同,就会一直坚持自己的想法,然后想要不断证明自己的想法的正确的。但是对于父母和老师来说,可能认为孩子的想法太天真太幼稚,于是马上就否定了。特别是,如果父母和老师比较激动和着急,会用不好的语气和孩子来讲话。这时候,孩子会觉得与大人之间沟通有障碍,大人的想法已经落伍,然后就会与大人对着干。 然而,如果家里有青春期叛逆的孩子,该怎么办呢? 笔者认为,首先,大人一定要用温和的语气和孩子谈话。一旦语言过于激烈,孩子便觉得与大人之间的代沟加大了,孩子也就不愿意与大人吐露内心真正的想法了。因此,在与孩子沟通的过程中,无论心里有多么大的怒火,都尽量进行非暴力的沟通。如果通过暴力解决,孩子只会表面接受大人的言论,内心仍旧是很抗拒的。 第二,大人们一定要学会倾听孩子内心真正的想法。青春期的孩子,希望自己能够与大人们进行平等的交流,也急切的希望大人们能够和孩子平等相处。有些父母可能习惯于训斥孩子,用自己的经验来教育孩子。比如会说:我吃过的盐比你说过的米饭还多,所以孩子们需要听大人的意见。但是孩子没有经历过这样的人生,即使讲了道理他也不能够透彻地理解。况且有的时候大人们说的道理也不一定对。因此,大人们一定要学会倾听孩子的想法,与孩子平等交流。孩子获得了尊重,自然也会尊重大人们。 那么,听完孩子的想法后,应该怎么做呢?我觉得这个需要针对具体的事情采取合适的方法。现在对于家长来说,最重要的也是最敏感的莫过于孩子的成绩了。毕竟没有成绩就上不了好的高中,也上不了好的大学,之后的日子可能会过得比较艰难。对于孩子的成绩,我觉得一方面是要培养孩子的科学思维,另一方面是要找到孩子成绩不好的原因。但是关键一点是一定不要经常批评孩子的成绩。每个孩子都希望得到父母的认可,得到别人的夸奖,一直批评孩子可能会让孩子失去学习的信心。当然,这里是只针对成绩的,对于品德方面的问题该批评还是要批评。对于孩子成绩的提高,我认为最好能够经常性地鼓励孩子,可以说些善意的谎言。比如某某老师今天说你上课更加认真了,老师相信你可以做得更好;或者班主任说你最近表现很棒,进步了很多。除了这些鼓励,也希望能够让孩子担任班级里的一些小职务,让孩子在帮助同学的过程中提高成就感和荣誉感。 对于家长来说,另一个头疼的事情就是孩子沉迷了游戏了。针对游戏,我觉得孩子是没有更加好玩的东西了所以才沉迷于游戏。针对于这种情况,我觉得周六和周日,家长尽量能够陪孩子去运动运动,出去玩一玩,获取逛逛博物馆,或者参加一下小竞赛啥的,让孩子远离可以游戏的环境,这样会玩得少一点。另一方面,我觉得家长可以带孩子做一些有意义的事情,让孩子能够从中得到成就感,转而将精力投入到有意义的事情上。比如,可以和班级的其他孩子组成互助小组,然后每个孩子传授自己的优势学科经验或者知识给其他的孩子,或者也可以让孩子给低年级的小朋友辅导功课。在教授的过程中,孩子能够获得成就感,提高自己的自信,也同时巩固了知识。 总之,每个叛逆期的孩子,心底都是善良的孩子。只要能够引导正确,都能够实现人生的成功! 0

Read More

分手吧!我也厌倦了。

我真的想和他分手了。想结束这段关系了。 我们之前的感情已经很淡了。这么长时间之后,终于厌倦了。我发现他根本不关心我的生活,从来不去过问我的生活。我最近在干什么,发生了什么事情他完全不知道。隔几天联系一次,联系也是要炫耀自己又完成了什么事情,然后在你面前炫耀一番。 对于我说过的话,指出的他的毛病,他一点都没有改。我很早就和他说过,不要和我说谎和吹牛逼,而他这么多年了一点都没有改。刚刚认识的时候,他有和我说他是长沙人,结果后来在一起后发现他根本不是长沙人。而且,我很清楚的记得第一次出去玩的时候,他和我说他去过快乐大本营,结果相处一段时间后又说自己没有去过。后来,通过查看他的手机,发现他经常和姐姐和妈妈说谎。例如,本来比赛是拿了三等奖,偏偏要和父母说是二等奖。这次也是,明明和我说了不会再搞这个了,但是几天没有联系后,突然打电话,就是为了和我说他做出来了。说实话,丑的一逼,而且没有任何意义。 而且自大的毛病一直以来就没有改。以前和他一起做比赛的时候,就发现他极其自大,以为自己很厉害,其实什么都不懂,然后还要装出一副自己很懂的样子。我看到那个样子就很生气。以前忍过来了,但是现在不能忍了。因为我发现无论我说多少次,他都不会改的。从来都没有改过。现在仍旧是这样的。 第三,他根本不会站在我的角度去想一下我的感受。这让我觉得他一直以来根本就不了解我。我每次表达我的观点,告诉他发生了什么事情,都没有进入他的耳朵。当你以后和他谈起来的时候,他却一点都不知道。我感觉自己简直是对牛弹琴。 还有很多很多,我真的不想一一数落了。总之,我想放弃这段感情了。我也厌倦了。 1+

Read More

reactor模式——主从reactor多线程

参考视频:Netty核心技术及源码剖析 主从Reactor模式 1 主从reactor多线程模式架构 如上图所示,为主从reactor多线程模式图。 多线程reactor多线程模型的出现,是为了解决单reactor在高并发场景下的性能瓶颈。 一个reactor主线程(MainReactor),多个reactor子线程(SubReactor)。如果目前存在的reactor子线程都处于满运载的状态,则可以增加新的reactor子线程。 2 流程 (1)Reactor主线程MainReactor通过selsect监听连接事件。收到事件后,由Acceptor处理连接事件。 (2)当Accetor处理事件后,MainReactor将连接分配给SubReactor。 (3)SubReactor将连接加入到连接队列进行监听,并创建handler进行各种事件处理。 (4)当有新的事件发生时,Subreactor就会调用对应的handler处理。 (5)handler通过read读取数据,分发给后面的Work线程池处理。 (6)Worker线程池会分配独立的Worker线程进行处理(解码-计算-编码),并返回结果。 (7)handler收到相应的结果后,再通过send方法将结果返回给client。 (8)Reactor主线程可以对应多个Reactor子线程。即MainReactor可以关联多个SubReactor。 3 主从reactor模式的优缺点 3.1

Read More

第一次感觉到看病好难,没钱好痛苦

这几天我的心情很不好,因为妈妈生病了。我第一次感觉到穷人看病难,因为检查一下动辄就上千了。虽然这个钱是该花的,但是让我第一次感觉到没钱的痛苦。 妈妈也不知道从什么时候开始疼的,最近半个月非常疼痛了才寻求医生帮助。 第一次,妈妈去了一个诊所,这个诊所是熟人介绍的。妈妈也没有进行验血和拍片,诊所只是给我妈妈开了很多药。然后我妈妈就带着药回家了。 但是一星期后,我妈妈没有任何好转,仍旧很疼痛。这才在我和我妹妹的鼓励下去医院检查。我们选择了人民医院,因为人民医院比较小,可能不会上来就进行多项检查,然后花很多钱。哎,真的很心酸,作为家中最大的孩子,我还在上学,而家里也没有什么钱了。去了人民医院的那天,人很少,但是拍完片子后,医生也只是进行了 10 分钟的指导和建议,开了一些药,然后让我们回家保守治疗。也就是先回家休息,如果一个星期后仍旧疼痛则拍核磁共振,可能需要手术。 去了人民医院的第二天,我妈妈就在一个熟人的介绍下,去了另一家中医院。那家中医院是私人的医院,我也从来没有去过这家医院。去了医院后,那个医生一直在说来他这边就对了,他就是主治这些的。然后带我们去了一些病房去看了他的病人。虽然看起来有一种被忽悠的感觉,但是妈妈觉得还可以,我们就交了钱,然后在医院住院了。 这家医院主要是针灸和理疗。说实话,感觉不是很正规。这里没有黑针灸和理疗的意思,只是从各个方面综合看来,这个医院并不是特别正规的医院。我们也只是交了一个疗程的钱。我也不知道是不是智商税,但是能减轻疼痛一点是一点。我现在的心态就是:不管是黑猫白猫,能抓住老鼠的就是好猫。 我在网上查到,人民医院推荐的那个手术大概需要 5 万元以上。可能有些人觉得才 5 万元嘛,但是对于我的家庭真的是一笔很大的开支。我们家一分钱的存款都没有。爸爸变老了,一年有大半年都没有活儿可以干,剩余的时间也是在田地上度过。家里还有 3 个孩子在上学。所以压力真的很大。 如果这家中医院对我妈妈的疼痛没有任何缓解,我也会说服我妈妈去市医院去看病,如果需要做手术就做手术。我毕业以后可以工作来还钱。 作为家里最大的孩子,我真的感觉到没有钱真的是太难了。我现在要加倍努力,毕业后找一份好的工作,给家庭医疗保障存一笔钱。希望以后不要再感觉这样难堪和内疚。 该成长了,我已经不是家里的孩子了,我应该学会承担家里的责任了。 0

Read More