精华内容
下载资源
问答
  • 什么是分区容错性
    万次阅读 多人点赞
    2020-07-21 10:19:45

    这个回答我觉得一个知乎上的老哥说的特别好,我把他的话引用过来。

    原回答地址:https://www.zhihu.com/question/54105974

     

    一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。

    当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。

    提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。

    然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。

    总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。

    更多相关内容
  • 最近和一个朋友聊天,她突然对我说:“小灿,你说人与人之间的差距为什么这么大?我觉得这是命,一开始就注定的。”我问她,为什么突然这么想?她说,最近她和一个同事要合作完成一个项目,结果中间出了纰漏。为此,...

    最近和一个朋友聊天,她突然对我说:“小灿,你说人与人之间的差距为什么这么大?我觉得这是命,一开始就注定的。”

    我问她,为什么突然这么想?

    她说,最近她和一个同事要合作完成一个项目,结果中间出了纰漏。为此,她吓得不行,不知道如何向领导交代。

    可她的同事却毫不在意。这倒不是因为她同事没犯错,而是人家有个有钱的老爸,工作就是消遣时间,不在意犯错。

    听到这里,我才知道,她表面上在说人与人的差距在于命不同,实际上是指出了一个现实问题——我们大部分人的容错率都太低。

    因为她的容错率太低,导致她一直畏首畏尾,难以承担犯错的后果。所以也就止步不前,不去尝试也就不会犯错,可也无法成长。

    02.什么是容错率?

    容错率是指在某个体系中能减小一些因素、选择对某个系统产生不稳定的概率。容错率越高,对效果的影响越小;容错率越低,对效果的影响越大。

    通俗来说,容错率就是指允许错误出现的范围和概率。放到个人身上,可以视作一种包容度,一个人对“错误”、“不完美”、“未达成目标”、“缺点”等负面事物的包容度。

    容错率低的人,会对错误、缺点等非常在意。因为他们一旦犯了错误,就需要付出很大的代价。所以,也害怕犯错。当然,也进步有限。

    而且,因为自身对错误比较排斥,当看到别人犯错时,尤其是当这个错误还和自己有关系时,就会特别苛刻。

    而容错率高的人,则对错误、缺点等有很强的

    展开全文
  • 容错性设计

    千次阅读 2018-06-21 17:15:25
    这就是产品设计中的“容错性”原则。 为了方便大家理解,我将容错性原则分为三个阶段:引导、提示和解决。首先通过简洁易懂的引导来帮助用户去规避那些错误;当用户不得已犯错之后,给予提示告知用户犯错的原因以及...

    用户在使用产品过程中,难免会犯错。一个好的产品可以降低用户犯错的概率,并且提升错误被解决的效率。通俗点说就是帮助用户去避开操作过程中的坑,即使用户掉进坑里,也能让他们很快的爬出来。这就是产品设计中的“容错性”原则。

     

     

    为了方便大家理解,我将容错性原则分为三个阶段:引导、提示和解决。首先通过简洁易懂的引导来帮助用户去规避那些错误;当用户不得已犯错之后,给予提示告知用户犯错的原因以及解决方案。

    引导

    一提到引导,大家可能会想到引导页、弹框、蒙层等。这些都是常见的引导方式,确切的说是主要针对新用户,让他们很快的了解该产品的核心功能以及主要的操作方式,帮助他们更快的上手。

     


     

    但是引导功能的实现方式不仅限于此,输入框中的输入提示也是常见的引导样式。输入框是用户完成信息录入的主要途径之一,有录入才有报错,有报错才需要引导。

    以日期录入为例,如果我们不给用户提供组件,那么必须在输入框里提供日期格式。因为2018年6月10日可以有多种格式,如果不以输入提示的样式予以明确,用户就不知道该怎么输入。

     


    以上说的都属于狭义上的引导,用户还停留在被动的接受引导的阶段。其实引导归根结底是为了避免用户在操作过程中犯错,而用户的操作过程又可以看成是不断做决策的过程,要想做出正确的决策必须要消减信息的不对称性。所以引导功能我们可以理解为就是消减信息的不对称性,让用户做出正确的决策。

    例如用户想要买点水果,与其他商品的不同的是水果的保质期很短,所以用户会很看重水果的配送时间。如果用户觉得这家店铺的菠萝价格公道,添加到了购物车,等到临近付款的时候才发现原来是后天才送达,有些用户可能会取消订单,之前的填写的重量种类等操作都白费了。为了避免出现这种情况,配送时间这个信息必须在用户做“添加到购物车”这个决策之前就展示给用户。总而言之,会影响用户决策的因素必须提前展示给用户。

     

    此外,我们还要特别注意文案的使用,因为用户对于信息的获取主要依靠的就是文案。呆板机械的文案有的时候会让用户陷入尴尬的局面。在实名认证的阶段,需要用户去补全身份证信息,而这里的起始时间和结束时间用户很难明白是什么意思,实际上指的是身份证的签发时期和有效期。

     

     

    报错

    报错就意味着引导失效了,用户掉进坑里了。对于报错,我主要从两个方面来进行分析:报错方式以及报错时机。报错方式主要就是弹框,可能我们会觉得只要了解了弹框的使用方法就知道怎么去设计报错流程了。这个说法不严谨,因为忽视了报错时机这个因素。

     


    以上图为例,用户在注册账户的时候要录入手机号,我故意少输了一位,直接点击“同意协议并注册”,进入下一个页面,我滑动滑块验证的时候才出现一个toast告诉我格式错误,这种反馈效率无疑是非常滞后的。

    如果手机号不是以1开头或者位数不对,这种低级错误输入框应该立即校验出来,并且提示用户。至于如何提示用户,方式是多种多样的。

     

     

    下面这种报错样式我个人不是很认可,因为置身于报错场景中的用户本身就很烦躁了,使用大面积的红色会刺激用户的情绪。就像我们电脑出现故障,会出现蓝屏而不是红屏,因为蓝色可以帮助平复用户焦虑的心理。

     

     

    在表单中用户不可能只要输入手机号这一项,如果在同一个界面中,用户需要输入多个项目,且多个项目同时发生错误的时候,我们应该如何给用户报错呢?下面我们来看一个案例:

    用户如果地址和邮箱都没有填写,直接点击“确认协议并购买”,那么会弹出toast,通知用户去填写地址,然后再通知用户去填写邮箱。

     

     

    这种场景使用toast有三个问题:

    1 toast一次性只能处理一个错误信息,如果多个输入项同时报错,无法兼顾;

    2 用户需要读取toast中的信息,然后去寻找输错的项目,如果项目过多,用户查找时间会比较长。

    3在安卓某些机型中,用户在系统设置中可能无意会把toast给禁用掉。其实用户本意上只是想禁用通知/Notification,没想到把toast也给关了。

     

     

    所以在表单中,我个人是非常推崇逐行报错的这种形式,同时可以处理多条错误信息。一个输入框对应着一条报错信息,更具有指向性,省去了用户的查找时间。

    解决

    在给用户提供解决方案的时候,尽量提供跳转链接,方便用户操作。

    例如,当用户输入的手机号已经被注册的时候,那么可能的情况是用户之前注册过但是忘记了,我们应该给用户提供跳转链接让用户可以直接跳到登录页面。此外,还有些报错属于系统内部的报错,用户无法自己解决。那么我们应该给用户提供在线客服的链接。

    写这篇文章的缘由是因为自己最近在负责梳理产品中的报错文案,梳理到最后发现真正亟待优化的是业务流程而不是文案。只有对产品的业务进行合理的规划才能从根本上减少报错场景的出现。这也告诉我们,产品设计不能仅限于视觉层面。

     

     

    例如,你接到一个任务,甲方让你设计一个“关注”按钮,要高大上(土鳖专用语),要让人第一眼看上去就想去点击关注。其实我们都知道,这种按钮在视觉上很难做出新意。不如换个思维,维持用户关注度,除了更多的“新增关注”还意味着更少的“取关”。我们可以提升用户“取关”的难度,你点击图标关注一个用户,这里的图标其实属于多态按钮,通过自身的改变告知用户关注成功,最后消失。你需要点击进入个人主页才能取关,这种增加操作步骤的方法来降低用户取关率比较常见的。所以产品的优化不能仅限于视觉,容错性也一样。

    总结

    以上就是我对产品设计中“容错性”原则的分析和总结,欢迎大家留言或者加群讨论。

    转发:王M争

    责任编辑:陪学

     



    展开全文
  • AKKA是一款高性能、高容错性的分布式&并行应用框架,遵循Apache2开源许可,基于经典的Actor 并发模型,底层通过Scala语言实现,提供Java和Scala API。 并行与并发:提供对并行与并发的高度抽象。 异步非阻塞:Akka...

    框架介绍

    AKKA是一款高性能、高容错性的分布式&并行应用框架,遵循Apache2开源许可,基于经典的Actor 并发模型,底层通过Scala语言实现,提供Java和Scala API。

    • 并行与并发:提供对并行与并发的高度抽象。
    • 异步非阻塞:Akka-Actor 消息通信都是基于异步非阻塞。
    • 高容错性:为跨多JVM 的分布式模型提供强劲的容错处理,号称永不着机。
    • 持久化:Actor 携带的状态或消息可以被持久化,以便于在JVM 崩溃后能恢复状态。
    • 轻量级:每个Actor 大约只占300bytes ,1G内存可容纳接近300 万个Actor 。
      在这里插入图片描述

    邮箱:每个Actor都有自己的邮箱,其他Actor发送过来的消息都会进入该邮箱。Akka自带多种邮箱类型,也提供自定义邮箱的接口。(默认邮箱类型为UnboundedMailbox,底层为ConcurrentLinkedQueue,无阻塞,无界队列)

    路由:消息除了通过普通的Actor 发送之外,也可以通过路由发送。路由策略有轮询、广播等。路由也可以是一个Actor。

    状态持久化:基于内存堆的日志、基于本地文件系统的快照存储以及基于LevelDB的日志。

    网络:用于实现远程Actor和分布式集群,包含I/O、网络通信(TCP/UDP)、序列化配置、分布式通信协议(Gossip)、节点管理、集群分片等内容。

    HTTP模块:Akka提供了简单易用的HTTP模块,支持完整的HTTP 服务端与客户端开发,快速构建性能极强的Rest Web服务。

    Actor 模型

    Actor是1973年就提出的一个分布式并发编程模型,设计是基于消息驱动和非阻塞的。认为万物皆Actor。

    Actor是Akka最核心的概念,也是最基本的执行单元。Actor认为并行计算的最小单元就是一个Actor实例,而每个实例拥有自己的状态和行为,在一个大型系统中,可能存在成千上万Actor 实例,它们之间通过消息的方式进行通信,每个Actor 都能发送消息给其他Actor,也能从其他Actor 接收消息。

    Actor 特点

    引用:不能通过传统"new"的方式直接创建一个Actor对象,通过actorOf 或者actorSelection 等方式返回一个ActorRef 对象,该对象有可能存在于本地,也可能存在于远程节点。

    状态: Actor 在不同时刻可能有着不同的状态,这些状态用变量来表示,可进行持久化操作。

    行为: Actor 有接收和发送消息的能力,每当它接收一条消息后,就可以执行某个业务操作,同时也可以把消息转发到其他节点进行处理。

    监管策略: Actor 系统是一个层级结构,当任务被某个Actor分摊到子Actor 时,父Actor 就拥有监管子Actor的义务。在监管时,我们需要根据不同的情况选择不同的处理方案(比如停止、重启、恢复或者失败上溯)和策略 。

    线程安全: Actor 运行于线程池之上,AKKA为每个Actor抽象出一个轻量级的执行“线程”,所以单个Actor 总是线程安全的,并且本身在处理接收到的消息时是串行的。

    轻量级: 在Akka 中, 每个Actor 只占用300 字节左右,支持分布式模式。

    Actor 定义

    在Akka中,Actor 大致分为两类:

    • UntypedActor:基于经典的Actor 模型实现,消息驱动,推荐使用它来定义Actor 。
    • TypedActor :把正常OOP 的代码包装成异步执行的Actor ,比较符合程序员的API 调用逻辑,但是使用过程稍复杂,本次暂不讨论。

    通过继承UntypedActor定义一个Actor,onReceive 方法是用于接收并处理消息的地方,对消息类型进行匹配,当匹配不到相应的消息类型时,使用unhandled进行处理。
    在这里插入图片描述

    Actor 创建

    首先下载所需要的依赖

    <dependency>    
        <groupId>com.typesafe.akka</groupId>    
        <artifactId>akka-actor_2.11</artifactId>  
        <version>2.4.1</version>
    </dependency>
    <dependency>
        <groupId>com.typesafe.akka</groupId>   
        <artifactId>akka-remote_2.11</artifactId>   
        <version>2.4.1</version>
    </dependency>
    

    通过ActorSystem 的actorOf 方法创建Actor:

    ActorSystem system = ActorSystem.create(“hiseePS”); ActorRef actorRef = system.actorOf(Props.create(ActorDemo.class),"actorDemo");

    • actorOf 返回的不是Actor 本身,而是ActorRef,即Actor 的引用,我们就是通过该引用来进行消息通信的。
    • 假如Actor 的构造函数有参数,可以通过create 方法传人。
    • 通过ActorSystem 创建的是一个顶级的Actor(即/user下的分支Actor),如果要创建层级关系的Actor 网络,任务交给子Actor 去处理,父级负责去监督子级。可以使用Actor中的getContext 来创建子Actor。

    ActorRef childActor = getContext().actorOf(Props.create(ChildActor.class ),"childActor");

    在这里插入图片描述

    每个Actor 在被创建后都拥有自己的路径,该路径遵循ActorSystem 的层级结构:akka://mysys/user/parentActor/childActor akka.tcp://mysys@l27.0.0.1:2554/user/parentActor/childActor

    mysys 是ActorSystem 的名字,/user 是用户创建Actor 的默认根节点, parentActor和childActor 分别是父子Actor。

    Actor 消息

    通过ActorRef 对象和Actor 进行消息通信,有两种方式给一个Actor 发送消息,tell 和ask 。它们都以异步的方式发送消息,不同的是,前者发完后立即返回,而后者期待得到一个返回结果,假如在设置的时间(Timeout)内没有得到返回结果,发送方会收到一个超时异常。任何给Actor 发送的消息都会通过receive 方法收到。

    tell 方法:actorRef.tell(“Hello Akka”, ActorRef.noSender());

    第一个参数是“消息”,它可以是任何可序列化的数据或对象,第二个参数表示发送者,即另外一个Actor 的引用,noSender()表示无发送者(系统默认deadLetters的Actor)。如果在Actor内部要获取消息发送者,可以调用getSender()方法。在调用tell 方法后, Actor 就会异步的去处理该消息,不会阻塞后续代码的运行。

    ask 方法:当我们需要从Actor 得到一个返回结果时,可以使用ask,这是一种典型的"请求一响应"模式。ask 方法会将返回结果包装在scala.concurrent.Future 中(可以理解为Future模式线程),可以(阻塞)获取这个值,也可以通过异步回调函数获取这个值,考虑到性能问题,我们往往会采用后者。

    Ask 方法测试

    在这里插入图片描述

    Actor 消息转发

    消息转发:

    除了直接给某个Actor 发送消息外,我们还可以通过forward 方式对消息进行转发,比较典型的使用场景是实现消息路由及负载等功能,消息发送者不会改变。

    在这里插入图片描述

    其他用法

    1.对于己存在的Actor,我们可以根据路径来进行查找

    ActorSelection=[ActorSystem/ActorContext].actorSelecton([path]);

    2.Actor 行为切换: 示例代码(BecomeActor)

    3.Actor 生命周期

    Actor 在运行时中会经历不同的阶段,比如创建、运行、重启和销毁等,这一系列的过程或状态,我们称之为生命周期。

    4.监督与容错处理

    5.Circuit Breaker (熔断)

    就不一一介绍了有兴趣的同学可以自己了解一下。

    好了AKKA的简单介绍就到这里了,第一次写,写的不好还望指点。

    (想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)

    展开全文
  • 所谓容错是指在故障存在的情况下计算机系统不失效,仍然能够正常工作的特性。容错即是Fault Tolerance,确切地说是容故障(Fault),而并非容错误(Error)。例如在双机容错系统中,一台机器出现问题时,另一台机器...
  • 下面八宝网小编带来:低容错颜值表示什么意思容错颜值什么梗。低容错颜值表示什么意思容错颜值与自己的发型有关,表示不许自己的发型出错的颜值。因为本来自己的颜值就不高啊,如果发型失败了那可能彻底没救了。...
  • 模拟战精品攻略和超强大神,来这给你安排的明明白白玩王者荣耀,必须早知道这些版本的改动,才能让你游戏6得飞起王者荣耀有很多英雄打到分段高的局都是会被队友嫌弃的,因为在玩家眼里这些英雄的容错率相对于版本强势...
  • 容错性怎么理解

    2022-04-29 01:18:17
    什么出现这个词,这个需要回到相关背景中,比如在计算机系统中,总是不可能保证100%正常,因此总会有一定量的故障出现,并且是避免不了的,所以人们只能被迫容忍这些故障,或者说容忍这些错误,所以说这个系统是有...
  • 容错性测试是检查软件在异常条件下自身是否具有防护性的措施或某种灾难性恢复的手段。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。容错性测试包括两个方面: 输入异常数据或进行异常操作,以检验...
  • 什么是健壮测试?

    2021-03-23 14:50:15
    容错性测试通常构造一些不合理的输入来引诱软件出错,例如:  健壮性是指在异常情况下,软件还能正常运行的能力。健壮性有两层含义:一是容错能力,二是恢复能力。  容错性测试通常构造一些不合理的输入来引诱软件...
  • 经常会有一些同事抛出一些概念,高可用,一致等等字眼,他们用这些最基本的概念去反驳系统最初的设计,但是很多人理解的可用,一致等等问题,都是自己拍脑袋想的,或者根本和最原始表达的意思就不...
  • 详解 CAP 定理 Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性) CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、...
  • 提高分区容忍的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍就提高了。 然而,要把数据复制到多个节点,就会带来一致的问题,就是多个节点上面的数据可能是...
  • 什么是程序容错性

    千次阅读 2009-12-21 12:02:00
    所谓容错是指在故障存在的情况下计算机系统不失效,仍然能够正常工作的特性。容错即是Fault Tolerance,确切地说是容故障(Fault),而并非容错误(Error)。例如在双机容错系统中,一台机器出现问题时,另一台机器...
  • 容错性测试

    千次阅读 2014-09-23 13:01:43
    容错性测试  (2009-01-30 14:30:41) 转载▼ 标签:  电脑   容错性   故障   数据库   数据恢复   it    容错性测试是检查软件在异常条件下自身...
  • CAP的分区容错性

    千次阅读 2017-04-05 13:58:25
    一直没有理解CAP 中P的分区容错性什么意思? 系统部分节点出现故障后,连接正常节点还可以使用系统提供的服务
  • 集群容错概念

    千次阅读 2018-04-10 08:06:58
    分布式系统越来越多,很多概念都是通用的,涉及到分布式的时候,集群的容错就特别重要的,刚刚好偶然看到dubbo的集群容错模式,觉得非常不错,其高度抽象和总结,对于分布式的系统都是适用的,特此拿来分享以及学习...
  • 系统容错

    2020-08-22 17:34:15
    系统容错是系统可靠设计的重要组成部分。 而容错的主要手段是冗余。所谓冗余,就是多个朋友多条路,多个选择,有备无患,双保险之类的意思。 冗余技术主要分为四类: 结构冗余 信息冗余 时间冗余 冗余附加技术 ...
  • 单机系统由于所有的处理都在单机完成的,所以不存在数据一致问题,但是如果系统崩溃了,就导致服务不可用。 分布式系统可以实现服务的高可用,现有的大型网站几乎都是分布式的,特别是微服务的出现,使得分布式...
  • 1 Dubbo简介Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。作为一个轻量级RPC框架,Dubbo的设计架构简洁清晰,主要...
  • 分布式系统设计之容错机制

    千次阅读 2019-11-19 12:03:00
    在处理客 户端请求时,服务之间需要通过网络来进行相互调用,所以如果某个服务由于宕机或者其他 原因导致不可用,则服务调用方需要采取一定的容错机制来避免该不可用服务影响了当前服 务的请求处理。 即一个服务...
  • 一文读懂容错机制

    千次阅读 2019-06-02 13:00:56
    随着分布式、微服务项目的快速发展,各个服务之间的通讯,难免出现依赖关系,若某一个单元出现故障,就很容易因依赖关系而发生故障的蔓延,为了解决这样的问题,容错作为其中一项很重要的技术也广为人知。...
  • 微服务的服务容错

    2020-11-29 16:04:50
    容错方案 要防止雪崩的扩散,我们就要做好服务的容错:保护自己不被猪队友拖垮的一些措施。 常见的容错方案:隔离、超时、限流、熔断、降级 1 隔离 将系统按照一定的原则划分为若干个服务模块,各个模块之间...
  • Flink 容错性机制- barrier(屏障)

    千次阅读 2020-07-17 08:40:12
    我们知道Flink提供了容错机制,能够在应用失败的时候重新恢复任务。这个机制主要就是通过持续产生快照的方式实现的。Flink快照主要包括两部分数据一部分是数据流的数据,另一部分是operator的状态数据。对应的快照...
  • 微服务架构服务容错设计分析

    多人点赞 热门讨论 2021-07-13 00:03:07
    在微服务体系架构中,由于...微服务容错机制正是这样一种稳定解决方案,可以理解微微服务架构的保险丝,通过它可以对业务平台形成一种有效的保护机制。在发生平台异常时候,容错机制是平台稳定运行的最后一道屏障。
  • CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。 分布式系统(distributed system)正变得越来越重要,大型...
  • 就算是一个装备成型超级大的肉盾也挡不住它的伤害,因此,干将莫邪是一个非常强的英雄,但是这个法师的容错率实在是太低了,因为他的剑只要偏了一点点,那么你的技能就会打不中对方,甚至要被对方所反杀,你没...
  • Spark的容错机制

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

    2018-02-10 17:07:00
    #为什么容错呢,先说说错误,这里说的错误并不是因为马虎或者什么原因在脚本中留下的bug,这个不能容掉,所谓容掉就是略过这个错误,要在测试时候发现并修正,需要容错的错误是在脚本执行之前无法判断是不是会出错...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,668
精华内容 11,467
关键字:

容错性什么意思