【Java】fail-safe 以及 fail-fast 原则

这是两种编程的思想,是在平时写代码以及设计时需要遵循的原则。

fail-fast:

简言之,快速失败。我们在设计一个模块(可以是一个函数,一个类甚至是一个服务)时,如果有某种条件会导致模块无法正常运行下去,就应该让模块立刻终止(可以是return,也可以抛一个runtimeexception)。这样做有两种好处:

1)及早终止,防止错误一直被带到下游,导致下游服务崩溃或者产生脏数据;

2)便于排查,fail-fast一般都会有类似断言的机制来判定某种条件,在断言处终止可以很方便的定位问题,而如果错误被带到下游,就很难定位问题的根源了;

 

fail-safe:

与fail-fast相反,如果模块遇到某种错误,不应该让程序失败,而是采取某种降级策略,尽量往下走。这个原则主要适用于主模块内的分支流程。

举个例子,我有一个接口,主要是返回feed流的,但是有一个分支逻辑是调用广告服务插入广告类型的feed的,如果广告服务不可用了,我的整体逻辑是不能挂的,因为不插入广告也没关系,但是正常的feed流还是需要返回。所以对广告服务的调用是要能降级的。简单来说,可以try-catch住,如果调用有异常了就不插入广告。不能因为一个分支逻辑而把主要逻辑整挂了。

 

这两种原则在设计模块以及编码时需要注意。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值