翻阅几十个阿里代码仓库!发现都有一个特点!责任链!

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 翻阅几十个阿里代码仓库!发现都有一个特点!责任链!

面试官: 很好,我们已经理解了责任链模式的基本概念和如何在实际中使用它。现在,让我们讨论一下责任链模式的一些高级话题。你能告诉我责任链模式如何处理一个请求不被任何处理器处理的情况吗?

求职者: 当然。在责任链模式中,如果请求沿着链传递到了最后一个处理器,而这个处理器也无法处理该请求,通常有两种策略来处理这种情况:

  1. 提供一个默认的处理器:这是一种安全网策略,无论如何都会有一个处理器来处理请求。这个默认处理器可能会实现默认行为,比如返回一个标准的拒绝响应,或者记录日志表示请求无法被处理。
  2. 不做任何处理:在某些情况下,如果请求不需要默认的处理,它可以简单地到达链的末端然后被丢弃。这种方式可能适用于那些不需要明确反馈的系统,或者请求的发送者已经预期到有些请求可能不会被处理。

在"请假审批"的场景中,我们可以增加一个默认的处理器来确保所有的请求都会被处理:

public class DefaultApprover implements Approver {
    @Override
    public void setNextApprover(Approver nextApprover) {
        // 默认处理器不需要设置下一个处理器
    }

    @Override
    public void handleRequest(LeaveRequest request) {
        // 实现默认处理逻辑,比如记录日志
        System.out.println("请假请求无法处理,已记录到系统。");
    }
}

// 在责任链的最后添加默认处理器
Approver defaultApprover = new DefaultApprover();
hr.setNextApprover(defaultApprover);

// 发送请求
supervisor.handleRequest(request);

在这个例子中,如果HR也无法处理这个请假请求,它将被DefaultApprover记录下来。

面试官: 很好,你的解释非常清晰。责任链模式还有其他需要注意的地方吗?

求职者: 是的,还有一点需要注意的是,责任链模式可能会带来性能问题,尤其是如果链很长或者处理请求需要很多时间的话。此外,调试也可能会变得复杂,因为请求可能会穿过多个处理器。因此,使用责任链模式时要确保监控和日志记录做得足够好,以便于问题追踪。


面试官: 现在,我们继续深入讨论责任链模式。你能说明一下在使用责任链模式时可能会遇到的性能问题吗?

求职者: 当然。在使用责任链模式时,可能会出现几个性能问题:

  1. 请求处理延迟:当一个请求沿着责任链传递时,如果链很长,每个处理器都需要时间来判断是否应该处理该请求。这可能导致请求处理的总时间增加,特别是在请求经常需要传递到链的末端的情况下。
  2. 资源消耗:每个处理器可能需要预先加载一些资源或数据来决定是否可以处理请求。如果请求在链上不断传递,这可能导致不必要的资源消耗,尤其是如果这些资源加载是重量级的操作时。
  3. 循环调用风险:如果责任链没有正确配置,可能会创建一个循环,请求在链中无限循环。这不仅不会处理请求,还会造成无限循环,进而可能导致系统崩溃。
  4. 调试和维护复杂:由于请求可能穿过多个处理器,调试和追踪问题可能会变得更加困难。如果链中的某个环节出了问题,可能需要跟踪整条链才能找到问题所在。

为了缓解这些性能问题,可以采取以下措施:

  • 优化责任链:减少链中的处理器数量,或者重新组织链的顺序,使得那些更可能处理请求的处理器在链的前面。
  • 缓存和资源管理:如果处理器需要加载资源,可以考虑使用缓存策略,避免重复加载相同的资源。
  • 监控和日志记录:实现有效的监控和日志记录机制,以便于追踪请求在责任链中的传递路径和处理时间。
  • 避免循环引用:在设置责任链时,确保没有循环引用的情况发生。

面试官: 很好,你详细解释了责任链模式可能导致的性能问题以及如何解决这些问题。这些都是在设计和实现责任链模式时需要考虑的重要因素。这就是我们今天要讨论的全部内容,谢谢你的参与。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
10月前
|
人工智能 安全 Devops
让研发规范管得住,在流水线之上做研发流程
研发规范的目标,是为了解决或降低出现软件危机的风险。但传统流水线受限于工具的定位,无法解决研发规范的落地问题,需要在更高的层面来解决。阿里云云效团队经过内部启发后推出的新产品:云效应用交付平台 AppStack 给出了解决方案,快来使用体验吧!
79222 7
|
10月前
|
敏捷开发 安全 测试技术
带你读《代码管理实践10讲》——五、重评审还是轻评审,企业该如何选择代码评审模式?
带你读《代码管理实践10讲》——五、重评审还是轻评审,企业该如何选择代码评审模式?
140 0
|
供应链 算法 区块链
联盟链技术开发 | 联盟链开发团队
随着区块链技术的发展,联盟链已经逐渐成为了企业级应用区块链的首选方案。我们将从技术开发的角度探讨如何使用联盟链技术来构建可靠、高效的企业级区块链应用。作为一家专业的联盟链开发团队,我们团队在联盟链开发,公链开发这块已经深耕多年,目前已经拥有联盟链技术开发相对成熟经验,本文将重点为大家介绍关于联盟链的技术开发。
|
存储 算法 安全
联盟链的优势 | 联盟链开发建设思路
联盟链采用身份认证和权限控制,可以精确控制节点的访问权限。同时,所有的节点均参与数据验证和共识机制,确保数据的安全性和不可篡改性。此外,在联盟链中,每个节点都有自己的存储设备,可以避免数据遗失和中心化失效的风险。
|
设计模式 安全 uml
责任链细解:从风控链视角,探索责任链的设计与实践!
责任链是一种行为型模式。顾名思义,由多个有不同处理能力节点组成的一条执行链。当一个事件进来时,会判断当前节点是否有处理的能力,反之转入下一个节点进行处理。可以从支付的风控链这个场景,深入的理解责任链模式。
|
SQL 设计模式 架构师
责任链、领域模型和事务的恩怨情仇
责任链、领域模型和事务的恩怨情仇
338 1
责任链、领域模型和事务的恩怨情仇
《以架构视角解读和落实银行数字化转型的两份重磅指导文件》下载
2021年12月和2022年1月,两份关于银行数字化转型的重量级指导文件—中国人民银行的《金融科技发展规划(2022—2025 年)》和银保监会的《关于银行业保险业数字化转型的指导意见》先后印发,这对在积极筹备数字 化转型工作的各类银行而言,正是 2022 年开年布局的最好指导。两份文件都对银行的数字化转型提出了具体要求,二者各各有侧重、相辅相成、有机融合。
107 0
《以架构视角解读和落实银行数字化转型的两份重磅指导文件》下载
|
资源调度 前端开发 UED
09前端 L eader 如何做好团队规划?阿里内部培训总结公开|学习笔记
快速学习09前端 L eader 如何做好团队规划?阿里内部培训总结公开
393 0
|
存储 运维 Kubernetes
一份DevOps工程师职责清单,待你查阅
一份DevOps工程师职责清单,待你查阅
307 1