For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
在分布式系统中,为解决由于机器硬件故障如磁盘损坏等导致的数据丢失以及由于网络不通、系统宕机造成的服务不可用等问题,通常对 数据或者服务冗余备份。
1 数据备份
比如下图所示的Elastic Search冗余备份数据:
图例中,对Index1划分的3个主分片存储在三个不同的节点上(每个分片无副本),Index2的2个主分片数据分布在两个节点上(每个分片各有一个副本分片)。副本(Replica)的目的有三个:
1. 保证服务可用性:当设置了多个Replica的时候,如果某一个Replica不可用的时候,那么请求流量可以继续发往其他Replica,服务可以很快恢复开始服务。
2. 保证数据可靠性:如果只有一个Primary,没有Replica,那么当Primary的机器磁盘损坏的时候,那么这个Node中所有Shard的数据会丢失,只能reindex了。
3. 提供更大的查询能力:当Shard提供的查询能力无法满足业务需求的时候, 可以继续加N个Replica,这样查询能力就能提高N倍,轻松增加系统的并发度。
数据冗余备份已经成为大数据系统设计的标配,如hdfs、mongodb、kafka以及云数仓产品redshift等。但是冗余备份也带来了一些问题,比如对ES来说:
1. Replica带来成本浪费。为了保证数据可靠性,必须使用Replica,但是当一个Shard就能满足处理能力的时候,另一个Shard的计算能力就会浪费。
2. Replica带来写性能和吞吐的下降。每次Index或者update的时候,需要先更新Primary Shard,更新成功后再并行去更新Replica,再加上长尾,写入性能会有不少的下降。
3. 当出现热点或者需要紧急扩容的时候动态增加Replica慢。新Shard的数据需要完全从其他Shard拷贝,拷贝时间较长。
4. 容易造成数据不一致,特别是当主分片数据写入完成,但是在写副本过程中出现中断,造成不同副本的数据不一致。
2 服务备份
系统宕机等导致的服务不可用等问题,通常对服务冗余备份,典型的应用场景是Hadoop HA高可用。在Hadoop中,最重要的两种组件应用:HDFS NameNode和YARN Manager。两者的HA实现方式类似,但前者更为复杂。因为主、备NameNode在实现高可用的同时维护了NameNode的Editlog信息,为防止Editlog数据不一致,除了使用NFS共享存储之外,HDFS引入了更优的 Journal Node来实现Editlog共享。Journal Node基于Quorum,Active NameNode只需要保证写入大多数Journal Node节点成功,就认为本次写入成功,Standby NameNode在从Journal Node同步数据时,也只需要保证读取大多数Journal Node节点成功,就认为读取成功。
Quorum机制是“抽屉原理”的一个应用。定义如下:假设有N个副本,更新操作需要至少在W个副本中更新成功,才认为此次更新操作成功。读操作需要至少读R个副本才认为读取成功(读取到更新的数据),那么需要满足条件 W+R>N ,即W和R有重叠,一般情况下 满足 W+R=N+1即可。假设系统中有5个副本,W=3,R=3,初始时数据版本为(V1,V1,V1,V1,V1),当某次更新操作在大多数(如3个)副本上成功后,就认为此次更新操作成功。数据变成:(V2,V2,V2,V1,V1),因此,最多只需要读大多数(如3个)副本成功,一定能够读到最新版本V2的数据。因为Quorum机制不是强一致性,此时读到的最新数据不能确定是成功写入的版本数据,还需要保证读取V2的副本数达到大多数(3个)。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请添加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。