精华内容
下载资源
问答
  • Flink状态容错机制

    2019-12-02 19:44:54
    ​ 谈一些自己对Flink状态容错机制的理解,没有很详细的解释什么是状态或者是状态的作用,主要的观点支持来源于Flink中文官网:https://ververica.cn 2、状态 2.1、什么是状态 ​ 首先,我们可以根据一个有状态的...

    Flink状态容错机制

    1、前言

    ​ 谈一些自己对Flink状态容错机制的理解,没有很详细的解释什么是状态或者是状态的作用,主要的观点支持来源于Flink中文官网:https://ververica.cn

    2、状态

    2.1、什么是状态

    ​ 首先,我们可以根据一个有状态的计算例子引申出状态这个概念,比如说我们Spark Streaming中的updateStateByKey算子,案例是统计至今所有单词的数量,我们可以把这个算子中累计的以前窗口计算的结果或者是数据理解成状态。

    2.2、状态保存机制

    2.2.1、JVM Heap

    ​ 适合数量较小的状态,JVM Heap在每一次需要读取状态时,用Java object read/writes进行读或写,MemoryStateBackend,构造方法是传入最大的StateSize,选择是否做异步快照,存储在TaskManager节点的内存中。默认5M,并且最大值要<=10M

    2.2.2、RocksDB

    ​ 存储在文件系统FsStateBackend,构建方法是传入一个文件路径和是否异步快照,State依然在内存中,但是并不会存在设置上限,不超过TaskManager的内存

    ​ RocksDB 是一个 key/value 的内存存储系统,和其他的 key/value 一样,先将状态放到内存中,如果内存快满时,则写入到磁盘中 , 不过 RocksDB 支持增量的 Checkpoint,也是目前唯一增量 Checkpoint 的 Backend, 其容量限制只要单个 TaskManager 上 State 总量不超过它的内存+磁盘,单 Key最大 2G,总大小不超过配置的文件系统容量即可。

    3、状态容错

    3.1、状态的产生

    ​ 说的简单一点,就是将状态保存到本地,首先将从source到sink的所有状态保存到本地的一整个过程成为一次checkpoint。

    ​ 首先,DataStream中会一直产生一个叫做Checkpoint Barrier的标识,该表示是由Job Manager触发checkpoint,checkpoint从数据源产生。

    在这里插入图片描述
    ​ Checkpoint Barrier会负责在他之前的数据的记录,以kafka为例,状态就是目前kafka分区的位置,当Checkpoint Barrier进入到一个状态的source/operator/sink的时候,会将状态的数据填充到图中Checkpoint的表中

    3.2、状态的对齐

    ​ 接收多个数据流的状态运算需要将Barriers对齐,因为Barriers的流动速度可能不同,会先后进入到状态的操作算子中。
    在这里插入图片描述
    ​ 一旦一个 Barriers流入状态计算的算子,该算子就不再进行数据处理,该 Barriers所属的流接收的记录放到缓冲区中,知道所有的数据流的Barriers进入到该算子中,触发保存操作,并发出Barriers,之后恢复处理输入流。

    ​ 这种机制可以保证Exactly Once语义,否则如果对齐,状态保存的可能不相同,如果有一个状态算子的状态已经落地,另一个还没有落地,如果此时节点宕机,会从两个状态算子恢复状态,前一个状态算子不知道后一个节点的状态已经更新,会重复发送一份数据,使得后一个状态算子的状态保存两次,所以没有对齐的情况下只能保证At Least One语义。

    4、Exactly Once语义

    ​ 没有引擎能够保证正好处理一次, 在面对任意故障时,不可能保证每个算子中的用户定义逻辑在每个事件中只执行一次,因为用户代码被部分执行的可能性是永远存在的。

    ​ 每个事件都有一个GUID,我们可以通过这个GUID,保证存储到数据库的操作需要以幂等的方式,Exactly Once真正的意思是数据的处理效果只在持久化后端状态中更新一次。

    ​ 在机器宕机之后,我们可以在状态中恢复数据,但是数据还是重复消费,但是我们可以使用全局ID的幂等保存。

    /**
     * Sets the checkpointing mode to "exactly once". This mode means that the system will
     * checkpoint the operator and user function state in such a way that, upon recovery,
     * every record will be reflected exactly once in the operator state.
     *
     * <p>For example, if a user function counts the number of elements in a stream,
     * this number will consistently be equal to the number of actual elements in the stream,
     * regardless of failures and recovery.</p>
     *
     * <p>Note that this does not mean that each record flows through the streaming data flow
     * only once. It means that upon recovery, the state of operators/functions is restored such
     * that the resumed data streams pick up exactly at after the last modification to the state.</p>
     *
     * <p>Note that this mode does not guarantee exactly-once behavior in the interaction with
     * external systems (only state in Flink's operators and user functions). The reason for that
     * is that a certain level of "collaboration" is required between two systems to achieve
     * exactly-once guarantees. However, for certain systems, connectors can be written that facilitate
     * this collaboration.</p>
     *
     * <p>This mode sustains high throughput. Depending on the data flow graph and operations,
     * this mode may increase the record latency, because operators need to align their input
     * streams, in order to create a consistent snapshot point. The latency increase for simple
     * dataflows (no repartitioning) is negligible. For simple dataflows with repartitioning, the average
     * latency remains small, but the slowest records typically have an increased latency.</p>
     */
    EXACTLY_ONCE,
    
    /**
     * Sets the checkpointing mode to "at least once". This mode means that the system will
     * checkpoint the operator and user function state in a simpler way. Upon failure and recovery,
     * some records may be reflected multiple times in the operator state.
     *
     * <p>For example, if a user function counts the number of elements in a stream,
     * this number will equal to, or larger, than the actual number of elements in the stream,
     * in the presence of failure and recovery.</p>
     *
     * <p>This mode has minimal impact on latency and may be preferable in very-low latency
     * scenarios, where a sustained very-low latency (such as few milliseconds) is needed,
     * and where occasional duplicate messages (on recovery) do not matter.</p>
     */
    AT_LEAST_ONCE
    

    5、选择哪一种语义

    分布式快照 / 状态检查点的优缺点:

    优点:

    – 较小的性能和资源开

    缺点:

    – 对性能的影响较大

    – 拓扑越大,对性能的潜在影响越大

    至少一次事件传递以及重复数据删除机制的优缺点:

    优点:

    – 故障对性能的影响是局部的

    – 故障的影响不一定会随着拓扑的大小而增加

    缺点:

    – 可能需要大量的存储和基础设施来支持

    – 每个算子的每个事件的性能开销

    6、资料来源

    Barriers的对齐

    https://blog.csdn.net/zero__007/article/details/88201498

    Exactly Once语义的解释

    https://ververica.cn/developers/exactly-once-2/

    Barriers的产生

    https://ververica.cn/developers/flink-basic-tutorial-1-basic-concept/
    State的作用和存储

    https://ververica.cn/developers/state-management/

    展开全文
  • Dubbo-容错机制

    2019-09-03 23:13:50
    所谓容错机制,举个简单例子,我们在使用电脑某个程序时,常常会遇到“程序无反应”或“程序未响应”情况发生,此时这个程序便不能在进行下去,但经常会在过了几秒钟后恢复到正常使用状态。这种“无反应”或...

    所谓容错机制,举个简单例子,我们在使用电脑的某个程序时,常常会遇到“程序无反应”或“程序未响应”的情况发生,此时这个程序便不能在进行下去,但经常会在过了几秒钟后恢复到正常使用的状态。这种“无反应”或“未响应”几秒钟的错误状态,我们便称之为“容错”。

    在分布式系统中常常各个系统之间是一个链路的调用过程,如果链路中的某个节点出现故障,很可能会发生雪崩效应。

    在这里插入图片描述

    比如如果Node3节点发生故障会导致整个分布式系统不可用,这个是不能容忍的。首先设计的时候应用系统之间肯定是要进行隔离,同时也需要有相应的容错机制。

    Dubbo一共提供了六种容错机制,可以在Client端调用的时候进行设置:

    Failover Cluster(缺省)

    失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries=“2” 来设置重试次数(不含第一次,缺省为2次)。

    重试次数配置如下:

    <dubbo:service retries="2" />
    

    <dubbo:reference retries="2" />
    

    <dubbo:reference>
        <dubbo:method name="findFoo" retries="2" />
    </dubbo:reference>
    

    Failfast Cluster

    快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

    Failsafe Cluster

    失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

    Failback Cluster

    失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

    Forking Cluster

    并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。

    Broadcast Cluster

    广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

    一般查询操作会使用Failover,事务请求会使用Failfast。

    配置方式很简单:

    在这里插入图片描述

    展开全文
  • 容错机制记录

    2021-03-14 00:02:45
    当我们使用某些功能时候,有时候不一定会成功,那么我们将采取什么样策略处理这种异常情况呢,下面我们通过例子说明 如上图所示,app2通过网络调用app1接口,app1是是由三台机器共同组成集群 failfast快速...

    当我们使用某些功能的时候,有时候不一定会成功,那么我们将采取什么样的策略处理这种异常情况呢,下面我们通过例子说明

    在这里插入图片描述
    如上图所示,app2通过网络调用app1接口,app1是是由三台机器共同组成的集群

    failfast快速故障

    当系统发生错误,立即反馈错误

    eg1:当app2携带错误Token访问app1接口时,app1立即反馈错误信息

    failsafe故障安全

    当系统发生错误,将故障在不会造成影响或尽量减少影响

    eg1:当app2调用接口查询app1某些接口时,如查询IPhone 10终端手机的颜色,app1内部发生了异常,此时不反馈错误信息,而是返回“未知”信息。对于app2来说,并不会感知接口调用发生异常,会按照正常情况继续处理

    failover故障切换

    当系统发生错误,我们再对其他系统进行尝试

    eg1:当app2调用接口查询app1某些接口时,首先调用接口的app1(192.168.1.100),若失败,我们再尝试app1(192.168.1.101)、app1(192.168.1.102);系统处理一个高可用状态,停止其中任意一台应用,系统也可以正常运行

    failback故障自动恢复

    当系统发生错误,应用程序对故障进行自我修复处理;如何理解这个自我修复过程

    • 网络抖动问题,有时候网络可能会出现故障,导致程序调用出现一些异常,程序收到异常以后,可以等一下再重试调用接口,等多久以及尝试多少次,怎么控制就是一个自我修复的手段
    • 流量降级问题,当网络出现访问量急剧增大时候,我们的系统资源不够用,我们可以直接反馈用户等下试试

    eg1:当app2调用接口查询app1某些接口时发生错误,剩下间隔30s再重试,重试不超过3次

    以上即是容错机制错误的几种处理方式

    展开全文
  • Dubbo使用之容错机制

    千次阅读 2018-11-19 21:08:47
    所谓容错机制,举个简单例子,我们在使用电脑某个程序时,常常会遇到“程序无反应”或“程序未响应”情况发生,此时这个程序便不能在进行下去,但经常会在过了几秒钟后恢复到正常使用状态。这种“无反应”或...

    容错的概念可参看:https://blog.csdn.net/Dongguabai/article/details/84258924

    所谓容错机制,举个简单例子,我们在使用电脑的某个程序时,常常会遇到“程序无反应”或“程序未响应”的情况发生,此时这个程序便不能在进行下去,但经常会在过了几秒钟后恢复到正常使用的状态。这种“无反应”或“未响应”几秒钟的错误状态,我们便称之为“容错”。

    在分布式系统中常常各个系统之间是一个链路的调用过程,如果链路中的某个节点出现故障,很可能会发生雪崩效应。

    比如如果Node3节点发生故障会导致整个分布式系统不可用,这个是不能容忍的。首先设计的时候应用系统之间肯定是要进行隔离,同时也需要有相应的容错机制。

    Dubbo一共提供了六种容错机制,可以在Client端调用的时候进行设置:

    Failover Cluster(缺省)

    失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次,缺省为2次)。

    重试次数配置如下:

    <dubbo:service retries="2" />
    

    <dubbo:reference retries="2" />
    

    <dubbo:reference>
        <dubbo:method name="findFoo" retries="2" />
    </dubbo:reference>
    

    Failfast Cluster

    快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

    Failsafe Cluster

    失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

    Failback Cluster

    失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

    Forking Cluster

    并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

    Broadcast Cluster

    广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

    一般查询操作会使用Failover,事务请求会使用Failfast。

    配置方式很简单:

    参考资料:

    https://baike.baidu.com/item/%E5%AE%B9%E9%94%99%E6%9C%BA%E5%88%B6/7141420

    https://blog.csdn.net/Dongguabai/article/details/84258924

    http://dubbo.apache.org/zh-cn/docs/user/demos/fault-tolerent-strategy.html

    展开全文
  • 上文我们在学习容错机制理论中,我们发现其中有一种处理手段为failback故障自动恢复,Spring-Retry即为failback实现中间件,下面我们就来开始学习Spring-Retry 基本框架例子 框架介绍 RetryTemplate,重试模板,...
  • Apache Flink 零基础入门(七):状态管理及容错机制 Posted by孙梦瑶2019年8月22日 作者:孙梦瑶 整理:韩非 校对:邱从贤(山智) ...首先举一个无状态计算的例子:消费延迟计算。假设现在有一个...
  • 容错机制指的是某中系统控制在一定范围的一种允许或包容犯错情况的发生,举个简单的例子,我们在电脑上运行一个程序,有时候会出现无响应的情况,然后系统回弹出一个提示框让我们选择,是立即结束还是继续等待,然后...
  • Storm 06_Storm 容错机制

    2019-10-05 22:29:26
    从Spout中发出Tuple,以及基于他所产生Tuple(例如上个例子当中Spout发出句子,以及句子当中单词tuple等) 由这些消息就构成了一棵tuple树 当这棵tuple树发送完成,并且树当中每一条消息都被正确...
  • 容错机制与故障恢复; 一.状态管理的基本概念 1.什么是状态 首先举一个无状态计算的例子:消费延迟计算。假设现在有一个消息队列,消息队列中有一个生产者持续往消费队列写入消息,多个消费者分别从消息队列中读取...
  •  首先举一个无状态计算的例子:消费延迟计算。 假设现在有一个消息队列,消息队列中有一个生产者持续往消费队列写入消息,多个消费者分别从消息队列中读取消息。从图上可以看出,生产者已经写入 16 条消息,Offset...
  • 1.1.1 无状态的例子:消费延迟计算 消息队列: 一个生产者持续写入,多个消费组分别读取,如何实时统计每个消费者落后多少条数据? //输入 { "timestamp": 1555516800, "offset": { "producer": 16, ...
  • 状态编程和容错机制 流式计算分为无状态和有状态两种情况。无状态计算观察每个独立事件,并根据最后一个事件输出结果。例如,流处理应用程序从传感器接收温度读数,并在温度超过90度时发出警告。有状态计算则会...
  • 首先举一个无状态计算的例子:消费延迟计算。 假设现在有一个消息队列,消息队列中有一个生产者持续往消费队列写入消息,多个消费者分别从消息队列中读取消息。从图上可以看出,生产者已经写入 16 条消息,Offset ...
  • 1.failover:失效转移 失效转移(failover)是一种备份操作模式,当主要组件由于...失效转移能应用于系统许多方面:举个例子,在个人电脑内部,失效转移也许是保护故障处理机一种机制;在网络内部,失效转移能够
  • 举个生活中的例子,比如保险器,当电流过大时保险器里面的保险丝就会断掉以此保护家里的电器不会被损坏。同理,在应用系统中也有熔断器,系统在运行时遇到极端情况,熔断器便会截断请求来保护系统,不至于让系统崩溃...
  • 容错恢复机制 应用程序开发中常见的功能 程序运行的时候,正常情况下应该按某种方式来做,如果按照某种方式来做发生错误的话,系统并不会崩溃,而是继续运行,能提供出错后的备用方案。 日志记录的例子 把...
  • 以之前的负载均衡的例子为例(具体搭建步骤请参考:https://blog.csdn.net/notMoonHeart/article/details/84954217),在服务注册中心注册了两个服务,假如此时把server1关闭(粗暴的把server1干掉),再次访问,则...
  • 题目要求: 应用程序开发中常见的功能: ... 日志记录的例子:把日志记录到数据库和日志记录到文件当做两种记录日志的策略。 UML图: 代码: //日志上下文(环境类) //包含一个抽象策略类 //...
  • 01——————--Hystrix的应用背景我们的微服务被拆分成很多服务单元,各单元通过订阅的...举个简单的例子,在电商网站中,我们很容易把系统拆分成用户、库存、积分、支付、评论等一系列服务单元。假设用户创建...
  • 对于Androidhttp请求的容错管理

    千次阅读 2011-06-22 21:49:00
    在android项目中,如果有用到http请求,就必须也...自己写了一个例子,有不完善之处,欢迎大家指正。  需要注意地方:有三个方面  如何控制超时机制  如何处理异常  如何处理请求错误 private class XmlA
  • Hystrix容错处理使用(springcloud)

    万次阅读 2019-08-21 14:35:58
    它是通过超时处理和断路器模式进行容错处理,断路器模式类似于我们正常使用电流断路器,这里就不多说了,直接说下此机制是怎么使用吧。 本例子代码(没有说明暂时未上传): 添加依赖 <dependency> ...
  • dubbo理论之集群容错

    2018-08-20 22:18:33
    容错机制是某种系统控制在一定范围内一种允许或包容犯错情况发生。举个简单例子,我们在电脑上运行一个程序,有时候会出现无响应情况,然后系统会弹出一个提示框让我们选择,是立即结束还是继续等待,...
  • Flink中状态与容错

    2019-09-27 03:35:19
    1.概述 Flink支持有状态计算,根据支持得不同状态类型,分别有Keyed State和Operator State。针对状态数据得持久化,Flink...上面Flink的文章中,有引用word count的例子,但是都没有包含状态管理。也就是说,如...
  • 容错机制是系统在一定范围内允许或包容犯错情况发生。举个简单例子,我们在电脑上运行一个程序,有时候会出现无响应情况,然后系统会弹出一个提示框让我们选择,是立即结束还是继续等待,然后根据我们...
  • <ul><li>服务之间通讯机制RPC开销大</li><li>需要考虑分布式情况下服务失效恢复等等问题</li><li>数据库分布带来分布式事务困扰,还有分布式数据结果Join问题</li><li>如何管理这么多服务之间依赖...
  • 在android项目中,如果有用到http请求,就必须也应该加上...自己写了一个例子,有不完善之处,欢迎大家指正。  需要注意地方:有三个方面  如何控制超时机制  如何处理异常  如何处理请求错误 ...
  • 代码例子下载:...为了解决这样问题,产生了断路器等一系列服务保护机制。在分布式架构中,断路器模式作用也是类似,当某个服务单元发生故障之后通过断...
  • 一般而言,在介绍区块链时经常会提到两个例子:一是由古老记账模式延伸到分布式账本,二是...区块链上共识机制主要解决由谁来构造区块,以及如何维护区块链统一问题,该问题理论基础是拜占庭容错(Byza...
  • 微服务架构系统包含很多微服务,微服务之间通过轻量级通信机制进行通信,构建成了一个完成应用系统。但是,每个微服务不能保证100%可用,网络呢?有时也会出问题 举个例子: 现在有一个高并发应用系统它...

空空如也

空空如也

1 2 3 4 5
收藏数 96
精华内容 38
关键字:

容错机制的例子