思考题:
- GFS容错机制
- HDFS容错机制
- 内存数据库容错机制
- 计算框架容错机制
- Ring算法是什么,有哪些改进
- Zookeeper的实现机制是什么
- 时间片机制有什么用,chubby释放和重连机制是什么
-
容错
ITTL和SLA
- 容错必定要有冗余,冗余并不一定带来容错,是需要机制设计的。
- 容错指的是计算机系统在发生故障或出现问题时,能自行采取补救 措施,仍能保证不间断提供正常的服务的方法和技术。
硬件问题包括:永久性错误、瞬态错误、间歇性错误;间歇性错误处于前面两种错误之间。
分布式文件系统
GFS的容错机制
一主多辅架构下的容错机制
- master容错
- 三类元数据:命名空间(目录结构)、Chunk与文件名的映射以及Chunk副本的位置信息
- 前两类通过日志进行容错,Chunk副本信息存储于Chunk Server,Master出现故障时可以恢复
- 可以理解为使用镜像备份实现容错,只有一个主节点,而且主节点也足够重要,因此主节点的容错机制可以相对奢侈一些。
Chunk Server容错
一个NameNode和多个DataNode
- 数据复制(冗余机制):机架感知策略
- 故障检测
- DataNode:心跳包,块报告,数据完整性检测
- NameNode:日志文件和镜像文件
- HDFS读文件容错
-
内存数据库——Redis
主从复制过程
- 当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令;
- 无论是第一次同步建立还是连接断开后的重新连接,master都会启动一个后台进程进行主从复制,将数据库快照保存到文件中,同时收集新的写命令缓存起来;
- 后台进程完成写文件后,master发送文件给slave,slave将文件保存到磁盘上,然后加载内存恢复数据库快照到slave上;
- 接着master将缓存的写命令转发给slave,而且后续master收到的写命令都将通过开始建立的连接发送给slave。
- 数据存储格式
- string字符串、list双向链表、set无序集合、zset有序集合、hash哈希表
- 存储命令
- save:将数据同步保存到磁盘
- bgsave:将数据异步保存到磁盘
- lastsave:返回上次成功将数据保存到磁盘的UNIX时间戳
- shutdown:将数据同步保存到磁盘,然后关闭服务
- 持久化机制snapshot(类似于镜像)
- 将内存数据以二进制形式保存到快照文件中
dump.rdb
- 可以配置进行自动保存
- Redis开启父子进程实现快照
- 将内存数据以二进制形式保存到快照文件中
持久化机制AOF(类似于日志)
Worker故障
- master周期性地ping每个worker,如果master在一个确定的时间段内没有收到worker返回的信息,那么它将把这个worker标记为无效;
- 重新执行该节点上已经执行或尚未执行的Map任务;
- 重新执行该节点上未完成的Reduce任务,已完成的不再执行。
- Master故障(镜像加日志)
- 定期写入检查点数据;
- 从检查点恢复。
- 本地处理
- Master调度策略:向GFS询问获得输入文件blocks的副本位置信息,Map tasks的输入数据通常按64MB划分,即GFS Block的大小
- 节省带宽,同时更不容易出错
跳过有问题的记录
我们需要将任务分配到恰当的节点上去,负载均衡机制需要使用统一的处理方式、对任务进行快速高效的分配(负责任务分配的节点需要分配所有任务,因此必须要快),同时需要适应各种情况。
简单哈希分配
最简单的方法:哈希随机分配,仅适用于节点数量不变的情况;采用传统哈希算法,当节点数量很大时,向系统中增加一个新的节点可能会导致几乎整个哈希环的重新分配,几乎全部的数据都要移动一遍,这种开销是不可容忍的。因为哈希分配仅适用于两种情景:节点数目不变或一次性分配。
直接哈希分配:
Ring算法是对简单哈希分配的一个改进,DHT的一种实现;
- 简化的哈希,能够很好地应对节点个数增减;
- 当节点个数多,ring值足够大的时候,均衡性受节点增减影响较小;
-
Ring算法的改进
虚节点个数不变
- 对象与虚节点的映射关系不变
- 当节点个数发生变化时,调整节点与虚节点的映射
- 虚节点的作用是降低了单位节点上的对象个数
- 预设的虚节点数十分重要
-
告示板
大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源)
ZooKeeper提供通用的分布式锁服务,用以协调分布式应用
ZooKeeper
ZooKeeper是一个由多个Server组成的集群,一个Leader,多个Follower,Leader负责写和同步,follower负责读,Zookeeper适合主要负载为读的场景
- 层次化目录结构的数据模型
- 节点创建属性
- 短暂:创建的节点不是持久节点,一旦与客户端的会话结束,节点自动删除;
- 持久:节点会一直存在,直到被明确地删除。
ZooKeeper中的“锁”并非对ZooKeeper的资源加锁,用于对第三方资源 加锁
操作的允许授权是通过限时的,倒计时“租期”系统来处理的——时间片通信协议
多租户
多租户技术(英语:multi-tenancy technology)或称多 重租赁技术,是一种软件架构技术,它是在探讨与实现如 何于多用户的环境下共用相同的系统或程序组件,并且仍 可确保各用户间数据的隔离性。
- 除了可以让系统平台可以允许同时让多份相同的应用程序 运行外,保护租户数据的隐私与安全也是多租户技术的关 键之一。