系统设计(二)

分布式存储系统中,将一台服务器或者服务器上运行的一个进程称为一个节点,节点与节点之间通过网络互联。大规模分布式存储系统的一个核心问题在于自动容错。常见的异常有:服务器宕机、网络异常、磁盘故障。

分布式存储系统三态:成功、失败、超时。

副本是分布式存储系统容错技术的唯一手段。

分布式存储系统评价常用的指标

1)性能系统的吞吐能力以及系统的响应时间。吞吐能力指系统在某一段时间可以处理的请求总数,通常用每秒处理的读操作数或者写操作数。

2)可用性

3)一致性

4)可扩展性

 性能分析性能分析是需要找出可能出现的资源瓶颈。

 数据分布


分布式系统区别于单机系统在于能将数据分步到多个节点,并且在节点之间实现负载均衡。数据分布的方式主要有两种,一种是哈希分布,如一致性哈希,代表系统是Amazon的Dynamo系统;另一种方法是顺序分布,即每张表格上的数据按照主键整体有序,代表系统有Google的Bigtable系统。

分布式存储系统的一个基本要求就是透明性,包括数据分布透明性,数据迁移透明性,数据复制透明性,故障处理透明性。

一致性哈希:给系统中每个节点分配一个随机token,这些token构成一个哈希环。执行数据存放操作时,先计算key(主键)的哈希值,然后存放到顺时针方向第一个大于或者等于该哈希值的token所在的节点。优点在于节点加入/删除时只会影响到在哈希环中相邻的节点,而对其他节点没影响。

1. 复制

2. 容错

3. 可扩展性

传统数据库扩容与大规模存储系统的可扩展性有何区别?未说明这一问题,我们首先定义同构系统。将存储节点分为若干组,每个组内的节点服务完全相同的数据,其中有一个节点为主节点,其他节点为备节点。由于同一个组内的节点服务相同的数据,这样的系统称为同构系统。同构系统的问题在于增加副本需要迁移的数据量太大,很难做到自动化扩展。大规模分布式存储系统要求具有线性可扩展性。为实现线性可扩展性,存储系统的存储节点之间是异构的。异构系统将数据划分为很多大小接近的分片,每个分片的多个副本可以分布到集群中的任何一个存储节点。如果某个节点发生故障,原有的服务将由整个集群而不是某几个固定的存储节点来恢复。

分布式协议


分布式系统涉及的协议很多,例如租约、复制协议、一致性协议,其中以两阶段提交协议(2PC)和Paxos协议最具有代表性。两阶段提交协议用于保证跨多个节点操作的原子性,也就是说跨多个节点的操作要么在所有节点上全部执行成功,要么全部失败,经常用来实现分布式事务。Paxos协议用于确保多个节点对某个投票(例如哪个节点为主节点)达成一致。

常用的做法是将2PC和Paxos协议结合起来,通过2PC保证多个数据分片上的操作的原子性,通过Paxos协议实现同一个数据分片的多个副本之间的一致性。通过Paxos协议解决2PC协议中协调者宕机问题。当2PC协议中的协调者出现故障时,通过Paxos协议选举出新的协调者继续提供服务。

跨机房部署

跨机房问题主要包含两个方面:数据同步以及服务切换。跨机房部署方案有三个:集群整体切换、单个集群跨机房、Paxos选主副本。


大数据系统:Hadoop与MapReduce



系统设计(二)_第1张图片
Hadoop

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算

(摘自百度百科 http://baike.baidu.com/link?url=2zFAQKgHgown_IZS5NPYWK6I4LEpq8HTPt2WtNvIW2SHl17Lazpt3UFx2pZAT2g16jhcnLB4KcWw92fDdlQCgK)

系统设计(二)_第2张图片
MapReduce

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组

你可能感兴趣的:(系统设计(二))