精华内容
下载资源
问答
  • 容错机制存在问题
    2021-08-29 12:25:57

    (1).副本机制:每一块都会有2-3个备份存在其他的设备上。

    (2).心跳机制:在namenode和datanode之间维持心跳,当datanode发出的一个数据包没有被namenode收到时,就会认为datanode挂掉了,namenode就检测副本是否小于设置值,如果小于,就会复制其他的副本到另一个机器上。

    更多相关内容
  • YARN的容错机制

    2021-12-04 17:14:12
    MRv1中采用的Master/Slave架构,存在单点故障问题,作为分布式系统,YARN具备高容错性,各个服务组件的容错机制如下: ApplicationMaster容错:RM监控AM的运行状态,一旦发现它运行失败或者超时,就会重新分配资源...

    MRv1中采用的Master/Slave架构,存在单点故障问题,作为分布式系统,YARN具备高容错性,各个服务组件的容错机制如下:

    • ApplicationMaster容错:RM监控AM的运行状态,一旦发现它运行失败或者超时,就会重新分配资源并启动它,启动之后AM内部的状态如何恢复由自己保证,比如MRAppMaster在作业运行过程中将状态信息动态记录到HDFS上,一旦出现故障重启后,它能够从HDFS读取并恢复之前的运行状态,减少重复计算带来的开销。
    • NodeManager容错:NM超时没有心跳,则RM认为它死掉,会将上面的Container状态置为失败,并告诉对应的ApplicationMaster,以决定如何处理这些Container中运行的任务
    • Container容错:如果AM在一定时间内未启动分配到的Container,则RM会将该Container状态置为失败并回收它;如果一个Container在运行过充中,因为外界原因导致运行失败,则RM会转告对应的AM,由AM决定如何处理
    • RM容错:至关重要,接下来介绍

    Hadoop HA基本框架

    为了解决单点故障问题,Hadoop2.0中的HDFS和YARN均采用了基于共享存储的HA解决方案,即Active Master不断将信息写入到一个共享存储系统,而Standby Master则不断读取这些信息,以与Active Master的内存信息保持同步,当需要主备切换时,选中的Standby Master需先保证信息完全同步后,再将自己的角色切换至Active Master。

    常用的共享存储系统:

    • zookeeper:针对大型分布式系统的可靠协调系统,提供包括统一命名服务、配置管理、集群管理、共享锁和队列管理等。
    • NFS(network file system)
    • HDFS
    • QJM:(Qurom Journal Manager),基本原理是用2N+1个节点存储数据,每次有大多数(≥N+1)节点成功 写入数据就认为该次些成功,并保证数据高可用,该算法最多容忍N台机器挂掉,如果多于N台挂掉,则这个算法失效。

    YARN HA采用的是基于Zookeeper的方案,MRv1采用的是基于HDFS的方案。

    尽管共享存储不同,但是HA架构相同,均分为手动模式和自动模式。

    手动模式
    在这里插入图片描述

    自动模式
    在这里插入图片描述
    自动模式的组件构成:

    • MasterHADaemon:和Master服务运行在同个进程中,可接收外部RPC命令,以控制Master服务的启动和停止
    • SharedStorage:共享存储系统,Active Master将信息写入共享存储系统,而Standby Master则读取该信息以保持与Active Master的同步。
    • ZKFailoverController:基于ZK实现的切换控制器,由ActiveStandbyElector和HealthMonitor两个核心组件构成,ActiveStandbyElector负责与ZK集群交互,通过尝试获取全局锁,判断所管理的Master是进入Active还是进入Standby状态;HealthMonitor负责监控各个活动Master的状态,以根据它们状态进行状态切换
    • zookeeper:通过维护一把全局锁控制整个集群有且仅有一个Active Master,如果SharedStorge采用了Zookeeper,则会记录一些其他状态和运行时信息。

    解决HA问题需要考虑以下几个问题

    (1)脑裂问题
    脑裂指主备切换时,由于切换不彻底或者其他原因,导致客户端和slave误以为出现两个Active Master,最终使得整个集群处于混论状态,通常采用隔离(fencing)机制解决。解决脑裂问题从三个方面考虑:

    • 共享存储隔离:确保只有一个Master往共享存储里写数据
    • 客户端隔离:确保只有一个Master可以相应客户端的请求
    • slave隔离:确保只有一个Master可以向slave下命令。

    (2)切换对外透明
    保证整个切换对外透明,保证所有客户端和slave自动重定向到新的Active Master,通常是通过若干次尝试连接旧Master不成功后,重新尝试连接新Master完成的,有一定延迟。

    YARN HA实现

    YARN将共享存储系统抽象为RMStateStore(一个Java接口),以保存恢复RM所必须的信息:

    • Application状态信息ApplicationState。包含应用程序提交描述信息,提交时间,拥有者三个字段
    • Application对应的每个ApplicationAttempt信息ApplicationAttemptState。包含attemptId、所在Container的信息masterContainer、安全Token三个字段
    • 安全令牌相关信息。

    RM不会保存已经分配给AM的资源信息和每个NM的资源使用信息,这些都通过 相应的心跳机制重构出来,所以RM HA是轻量级的。

    RM提供了四种RMStateStore实现:

    • NullRMStateStore(不存储任何状态信息,在不启用恢复机制时,它是默认实现的)
    • MemoryRMStateStore(将状态信息保存到内存中,启用恢复机制时,它是默认实现的)
    • FileSystemRMStateStore(状态信息保存到HDFS中)
    • ZKRMStateStore(状态信息保存到ZK上)

    YARN HA采用基于ZKRMStateStore的共享存储方案。

    具体的自动主备切换,后面阅读HDFS书籍也有,到时候引过来。

    展开全文
  • Spark的容错机制

    千次阅读 2020-08-01 16:35:24
    项目中会经常使用到Spark和Flink这些分布式框架,使用的时候老是担心如果出现异常了会怎样,今天就来了解下Spark以及Flink的容错机制。 容错是指一个系统部分出现错误的情况还能持续的提供服务,当集群达到较大的...

        项目中会经常使用到Spark和Flink这些分布式框架,使用的时候老是担心如果出现异常了会怎样,今天就来了解下Spark以及Flink的容错机制。

        容错是指一个系统部分出现错误的情况还能持续的提供服务,当集群达到较大的规模以后,很可以出机器故障以及网络延迟等情况,导致某个节点不能提供服务,所以分布式框架一般都会进行高容错设计。

     

    Spark的容错机制:

    Master异常退出:

        个人理解是,只有StandAlone模式下才需要额外进行Master容错配置。如果是On Yarn模式,资源是由ResourceManager管理的,RM自身有容错机制,无需外部再进行配置了。

        和HBase的HMaster很像,Spark会启动多个StandBy Master,当前Master异常时,会按照一定的规格选取其中一个接管Master的工作,有如下几种配置:

        1. ZOOKEEPER

            将集群元数据持久化到ZK中,基于ZK进行主备切换

        2. FILESYSTEM

            集群元数据持久化到白嫩地文件系统中

        3. CUSTOM

            用户自定义恢复方式

        4. NONE

            不持久化集群元数据。Master出现异常时,新启动的Master不进行恢复集群状态

     

        这些策略在spark-env.sh配置文件中配置,配置项为spark.deploy.recoveryMode,默认为NODE。个人觉得生产环境下建议使用On Yarn模式,进行资源隔离比较好。如果非得使用Standalone,HA建议配置成ZK。

        总结下就是Master会进行主备切换,接着移除未响应Master切换信息的driver(application)和Worker,然后重新调度driver执行。

    case ElectedLeader =>
      val (storedApps, storedDrivers, storedWorkers) = persistenceEngine.readPersistedData(rpcEnv)
      state = if (storedApps.isEmpty && storedDrivers.isEmpty && storedWorkers.isEmpty) {
        RecoveryState.ALIVE
      } else {
        RecoveryState.RECOVERING
      }
      logInfo("I have been elected leader! New state: " + state)
      if (state == RecoveryState.RECOVERING) {
        // 1. 先走这个方法,通知driver Master发生变更了
        beginRecovery(storedApps, storedDrivers, storedWorkers)
        recoveryCompletionTask = forwardMessageThread.schedule(new Runnable {
          override def run(): Unit = Utils.tryLogNonFatalError {
            self.send(CompleteRecovery)
          }
        }, WORKER_TIMEOUT_MS, TimeUnit.MILLISECONDS)
      }
    
    // 2. 重新调度任务执行
    // Kill off any workers and apps that didn't respond to us
    // Reschedule drivers which were not claimed by any workers
    case CompleteRecovery => completeRecovery()
    

        

    Worker异常退出:

        个人理解是,Worker是StandAlone模式下才有的概念,On Yarn模式对应的是NodeManager,Yarn自身带有NodeManager的容错机制。

        Spark Worker会保持和Master的心跳,当Worker出现超时时,Master调用timeOutDeadWorkers()方法进行处理,移除超时的Worker。移除时会通知Driver Executor已经移除(Executor异常处理详见下文),然后设置运行在当前Worker上的Driver重启或者直接删除:

        个人理解只有在cluster模式下启动时,才会有Driver的资源调度,如果在client模式下启动,Driver就在提交Job的机器上启动。关于Driver的重启策略这个还真不太清楚,有知道的朋友麻烦告知下...因为用的Client模式比较多,我理解driver挂了整个程序就挂了。

        总结下就是Worker挂了会被Master移除,Worker上的Driver有可能会被重新调度执行或者直接移除。

     

    Executor异常退出:

        Executor是真正负责任务的执行,然后将任务的运行状态发送给Driver。

        Executor发生异常时,外部的包装类ExecutorRunner会把异常信息发送给Worker,然后Worker会讲信息发送给Master。Master 接收到 Executor 状态变化消息后,如果发现 Executor 出现异常退出,则调用 Master.schedule 方法,尝试获取可用的 Worker 节点并重新启动 Executor。

        重新启动一个新的Executor会尝试一定次数,如果还不成功,那么整个application就运行失败了。这样是为了保证application不会一直占用集群资源。

     

     

    Spark Job Task的容错(即RDD的容错机制):

        以上所讲的容错其实更多的是说Spark集群自身如何保证任务稳定运行,如果以上异常发生了,个人理解为本次Stage就运行失败了,幸好RDD有容错机制,可以恢复Job。Spark 会对运行失败的Stage进行retry,默认retry 3次。

     

    RDD Lineage血统层容错:

      Spark RDD实现基于Lineage的容错机制,基于RDD的各项transformation构成了compute chain,在部分计算结果丢失的时候可以根据Lineage重新恢复计算。

      (1)在窄依赖中,在子RDD的分区丢失,要重算父RDD分区时,父RDD相应分区的所有数据都是子RDD分区的数据,并不存在冗余计算。
      (2)在宽依赖情况下,丢失一个子RDD分区,重算的每个父RDD的每个分区的所有数据并不是都给丢失的子RDD分区用的,会有一部分数据相当于对应的是未丢失的子RDD分区中需要的数据,整个RDD都要重新计算,这样就会产生冗余计算开销和巨大的性能浪费。所以如果调用链路比较长的话,宽依赖最好做一次Checkpoint。

     

    Checkpoint容错:

      Lineage过长会造成容错成本过高,这时在中间阶段做检查点容错,如果之后有节点出现问题而丢失分区,从做检查点的RDD开始重做Lineage,就会减少开销。

     

     

    总结:

        1. 个人建议Spark尽量不要使用standalone,而是使用Yarn或者K8S等模式,这样可以做到更好的资源隔离。

        2. 如果使用standalone,Master建议基于ZK配置高可用

        3.  Worker或者Executor异常退出没关系,Spark stage会重新执行调度。如果Spark job链路过长的话,建议在宽依赖那里执行CheckPoint,加快spark job的恢复。

     

     

    参考:

        https://blog.csdn.net/qq_32603475/article/details/103617089(Hadoop中Yarn的容错机制)

        https://www.cnblogs.com/juncaoit/p/6542902.html(Spark容错特性)

        https://www.jianshu.com/p/4e1b2d986883(Spark Master主备切换)

        https://blog.csdn.net/u010886217/article/details/103289687(Spark RDD的容错机制)

    展开全文
  • HDFS容错机制

    千次阅读 2020-03-01 11:12:14
    对于廉价机器而言,出现网络故障、节点失效、数据损坏现象的频率并不低,所以在故障之后如何进行数据恢复和容错处理是至关重要的,HDFS提供了完善的容错机制,使得它成为一个高度容错性和高吞吐量的海量数据存储解决...

    概述

    最近看各种分布式组件的容错机制看得有点晕,所以打算理一理,类比学习一下。本篇博文就对HDFS的容错进行简单归纳。如有错误,敬请指出。
    Hadoop的两个重要组件是MapReduce和HDFS,一个提供分布式计算能力,一个提供分布式存储能力。HDFS可以通过廉价机器搭建大规模集群,获得海量数据的分布式存储能力。对于廉价机器而言,出现网络故障、节点失效、数据损坏现象的频率并不低,所以在故障之后如何进行数据恢复和容错处理是至关重要的,HDFS提供了完善的容错机制,使得它成为一个高度容错性和高吞吐量的海量数据存储解决方案。

    故障检测机制

    故障的类型主要有以下三种,针对这三种故障类型,HDFS提供了不同的故障检测机制:

    1. 针对DataNode失效问题,HDFS使用了心跳机制,DataNode定期向NameNode发送心跳信息,NameNode根据心跳信息判断DataNode是否存活;
    2. 针对网络故障而导致无法收发数据的问题,HDFS提供了ACK的机制,在发送端发送数据后,如果没有收到ACK并且经过多次重试后仍然如此,则认为网络故障;
    3. 针对数据损坏问题,所有DataNode会定期向NameNode发送自身存储的块清单,在传输数据的同时会发送总和校验码,NameNode依次来判断数据是否丢失或损坏。

    容错机制

    读容错

    由于在读HDFS的过程中会从NameNode获取到数据块位置列表,如果某个DataNode失效,换个DataNode读即可。

    写容错

    写HDFS的过程中会对多个DataNode建立管道进行写入,如果数据发送者没有收到其中某个DataNode的ACK,则认为该DataNode失效,会跳过该DataNode并将数据写入剩余DataNode。NameNode收集DataNode信息时发现文件的副本数与设置值不一致,会重新寻找一个DataNode保存副本。

    DataNode失效

    在NameNode中会持有数据块表和DataNode两张表。数据块表存储着某个数据块(包括副本)所在的DataNode,DataNode表存储着每个DataNode中保存的数据块列表。由于DataNode会周期性地给NameNode发送自己所持有的数据块信息,因此NameNode会持续更新数据块表和DataNode表。如果发现某个DataNode上的数据块错误,NameNode会从数据块表删除该数据块;如果发现某个DataNode失效,NameNode会对两张表进行更新。NameNode还会周期性地扫描数据块表,如果发现数据块表中某个数据库的备份数量低于所设置的备份数,则会协调从其它DataNode复制数据到另一个DataNode上完成备份。

    HDFS副本放置策略

    HDFS对于读写的容错机制都基于HDFS的副本机制,只要HDFS尚存一个有效的数据副本,就依然能够正常工作。而HDFS采用尽量灵活的副本放置策略,使得它的可靠性更强。
    如果写请求出现在某个DataNode上,第一个副本就会存放在当前DataNode所在的机器上,如果该机器负载过重,可以将该备份放在同一个机架上的随机机器上。接着第二个副本就会存放在不同于第一个副本所在机架的机架上,第三个副本会随机存放在第二个副本所在机架的任一DataNode上。
    简单来说,在三个副本的情况下,第一个副本与原数据在相同机器上,另外两个副本放在其它机架的随机机器上。这样的设置可以使得性能与容灾兼备,优先从同机器上获取备份数据,减少数据传输开销;在该机器宕机的情况下,从另一个机架获取备份数据,避免同一个机架的机器集体宕机的情况出现。

    HDFS的HA架构

    以上的所有容错都是基于DataNode的故障问题进行考虑的,但是NameNode本身就存在单点故障,如果NameNode出现故障,则整个集群会直接宕机。因此HDFS提供了HA的架构,对于一个典型的HA集群而言,NameNode会被配置在两台独立的机器上,在任何时间上,一个NameNode处于Active状态,而另一个NameNode处于Standby状态,Active状态的NameNode会响应集群中所有的客户端的请求,Standby状态的NameNode只是作为一个副本,保证在必要的时候提供一个快速的转移,使得上层对NameNode的切换无感知,Standby NameNode与Active NameNode应时刻保持同步,在Active NameNode和Standby NameNode之间要有个共享的存储日志的地方,Active NameNode把EditLog写到共享的存储日志中,Standby NameNode读取日志并执行,使得Active NameNode和Standby NameNode内存中的HDFS元数据保持同步。

    附:HDFS读写简述

    HDFS读过程:
    1、Client访问NameNode,查询元数据信息,获得该文件的数据块位置列表;
    2、就近选择一台DataNode服务器,Client与其建立输入流并从中读取数据。
    HDFS写过程:
    1、Client向NameNode发出写请求,NameNode会将数据更改写入EditLog(WAL机制);
    2、Client按128M的块大小切分文件,并与可写的DataNode列表构成pipeline,将数据发送给最近的DataNode节点,Client每向第一个DataNode写入一个packet,该packet会通过pipeline向后分发;
    3、当列表中的所有DataNode都写入完成后,向NameNode汇报。

    展开全文
  • 拜占庭容错机制

    2020-10-02 22:23:26
    这个难题也被称为“拜占庭容错”、“拜占庭将军问题”、或者“两军问题”。 这个问题是说,一个拜占庭的陆军部队正在准备攻击一个防御强大的城市。每一队陆军部队都是由一位将军来带领的,这位将军驻扎在敌军所在...
  • 一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新。 面向大规模数据分析,数据检查点操作成本很高,需要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带宽低得多...
  • 一:引入 ●持久化的局限 Spark 在生产环境下经常会面临transformation的RDD非常多或者具体transformation的RDD本身计算特别复杂或者耗时,这个时候就要考虑对计算...●问题解决 Checkpoint的产生就是为了相对...
  • Hadoop基础(四):Hadoop容错机制

    千次阅读 2020-12-17 08:23:34
    文章目录一、HDFS副本机制二、YARN容错机制1.Map/ReduceTask2.ApplicationMaster3.Nodemanager4.ResourceManager三、HA高可用集群 一、HDFS副本机制 HDFS对于读写的容错机制是基于HDFS的副本机制 对于文件上传 HDFS...
  • dubbo中提供了5种容错机制,用于微服务调用出错了进行重试或者忽略 1、Failover Cluster 这是Dubbo中默认的容错机制,这种方式比较常用。这种方式可以进行失败自动切换,当出现失败,重试其它服务器。通常用于读...
  • 摘要:在系统服务中,会存在因为过多的用户请求从而引发出系统崩溃的现象,为了防范这种现象的产生在系统服务中引入了容错机制。在微服务架构系统服务中,为了防止产生系统崩溃现象,在spring boot中加入了Hystrix的...
  • Storm 的容错机制包括架构容错和数据容错。 1)架构容错: Nimbus 和 Supervisor 进程被设计成快速失败(fail fast)的(当遇到异常的情况,进程就会挂掉)并且是无状态的(状态都保存在 Zookeeper 或者在磁盘上)。最...
  • 为解决水声传感器网络的数据传输负载不均衡、容错能力低等问题,刻画水声传感器网络传播动力学特性,分析复杂海洋环境中传感器节点失效原因,建立了簇结构网络演化模型,提出了一种随机游走容错机制,以提高水声...
  • RDD 任务运行过程中,如果出错,spark会有相应的机制去进行错误修复,从而保证任务持续执行,即RDD容错机制。 二、具体容错分类 1.driver宕机 (1)如果job运行在client:程序直接挂了 (2)如果job运行在...
  • 代码行为异常容错机制与自我调节

    千次阅读 2020-03-29 21:32:22
    1.5、代码的容错机制与自我调节 2、设计观与方法论 2.1 设计观与代码容错机制、自我调节 2.2 问题是否能够被解决 2.2.1 意识行为是否具有虚拟性 2.2.2 思维是否具有方向性 2.3 问题问题解决 2.4 软件与问题...
  • 【spark】RDD容错机制Checkpoint

    千次阅读 2020-04-14 20:20:05
    Checkpoint的产生就是为了更加可靠的数据持久化,在Checkpoint的时候一般把数据放在在HDFS上,这就天然的借助了HDFS天生的高容错、高可靠来实现数据最大程度上的安全,实现了RDD的容错和高可用 使用步骤 1.Spark.....
  • MapReduce的容错机制

    千次阅读 2017-03-03 20:07:22
    MapReduce计算框架提供了很好的容错机制,本篇文章就是来介绍该框架是如何来容错的,我们可以从错误出现的情况来探讨该框架是如何容错的,常见的错误有作业错误、网络错误甚至数据错误。 任务出错 任务...
  • Spark容错机制,Lineage,CheckpointLineage机制Checkpoint机制 一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新。 面向大树据处理检查点机制的代价更高,需要通过数据中心的网络连接在不同...
  • Hadoop容错机制

    千次阅读 2018-08-24 10:03:39
    简单介绍一下Hadoop中数据存储的可靠性和完整性,其中包括HDFS的容错机制、NameNode(元数据结点)的单点失效解决机制、Block数据块的多副本存储机制、 NameNode与DataNode之间的心跳检测机制、数据存储等。 (一)...
  • Storm(四):容错机制

    千次阅读 2017-06-11 10:25:18
    Apache Storm分布式集群主要节点由控制节点(Nimbus节点)和工作节点(Supervisor节点),在集群下,怎么保证拓扑的可靠性,storm提供哪些容错机制
  •  目录 一、图解横向扩容过程、如何超出扩容极限、以及如何提升容错性 1、elasticsearch的横向扩容机制 2、如何超出系统的系统的扩容瓶颈以及提升容错性 二、图解Elasticsearch容错机制:master选举,replica容错,...
  • Flink之四 容错机制

    千次阅读 2017-02-04 16:15:24
    Flink流处理的容错机制    批处理系统比较容易实现容错机制,由于文件可以重复访问,当某个任务失败后,重启该任务即可。但是在流处理系统中,由于数据源是无限的数据流,一个流处理任务甚至可能会执行几个月,将...
  • 基于评分机制的实用拜占庭容错共识算法,李景然,亓峰,针对区块链的实用拜占庭容错(PBFT)共识算法中存在的网络节点扩展性差和主节点选取不合理等问题,通过引入评分机制,提出了基于评分
  • 【总结】Spark容错机制

    万次阅读 多人点赞 2017-06-23 10:57:12
    对于一个大的集群系统来说,机器故障、网络异常等都是很常见的,Spark这样的大型分布式计算集群提供了很多的容错机制来提高整个系统的可用性。 一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的...
  • spark -- RDD容错机制Checkpoint

    千次阅读 2020-04-08 13:31:14
    RDD容错机制Checkpoint ●持久化的局限 持久化/缓存可以把数据放在内存中,虽然是快速的,但是也是最不可靠的;也可以把数据放在磁盘上,也不是完全可靠的!例如磁盘会损坏等。 ●问题解决 Checkpoint的产生就是...
  • Elasticsearch-2-ES高可用以及容错机制

    千次阅读 2020-09-14 00:03:09
    ES的容错机制以及如何实现高可用 假设现在有一个ES最小可用集群,每个节点的磁盘都是6TB,最大QPS为1000,如下图所示: P0,P1,P2是一份完整的数据,R0,R1,R2是一份完整的数据; P0,P1,P2 提供读写、R0,R1,R2提供...
  • spark容错机制

    千次阅读 2018-04-07 19:19:30
    集群容错机制Master异常退出后重启:不影响退出之前已经提交的application的运行,但是在退出期间exector的资源释放,异常退出重新调度等功能会受到影响;新的appliaction无法提交;重新启动后原来的已经创建的应用...
  • 一文读懂区块链共识及其容错机制

    千次阅读 2019-01-14 18:30:49
    这让系统在节点在线和离线、网络传输等问题上极高的容错能力, 同时使得区块链可以在网络和电力基础设施不理想的环境中作为一个很好的平台。网络上的节点可以一会儿离线一会儿在线,当一个节点在离线一会儿后恢复...
  • 目录RDD的持久化/缓存持久化/缓存API详解代码演示RDD的容错机制Checkpoint代码演示持久化和Checkpoint的区别 RDD的持久化/缓存   在实际开发中某些RDD的计算或转换可能会比较耗费时间,如果这些RDD后续还会频繁的...
  • RDD容错机制Checkpoint

    千次阅读 2020-04-17 10:28:18
    RDD容错机制Checkpoint ●持久化的局限 持久化/缓存可以把数据放在内存中,虽然是快速的,但是也是最不可靠的;也可以把数据放在磁盘上,也不是完全可靠的!例如磁盘会损坏等。 ●问题解决 Checkpoint的产生就是为了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,765
精华内容 32,706
关键字:

容错机制存在问题