简单谈谈应用异常设计

一天收到windows 10系统更新的推送,千辛万苦完成更新之后,在会议室发现无法投屏。刚开始以为显卡驱动问题,笔记本厂家驱动、硬件厂家驱动,下载后都安装失败。也没有什么明确的提示信息,无可奈何。

没有办法,那就重装系统吧。

重装系统后,对工作软件进行恢复安装。准备PL/SQL工具的时候,因为本机不计划安装Oracle客户端,需要通过Oracle Instant Client来完成支持,在配置完环境变量、PL/SQL应用设置、数据库实例配置文件后,打开工具测试时,发现PL/SQL工具没有展现出数据实例配置文件中提供的实例列表,无法正常工作了。应用没有任何提示,也不知道是什么原因,只能一遍一遍检查配置,或者去搜索引擎中找类似现象的故障解决方案。由于没有特别明确的异常提示,找到的资料主要都是配置指导文档,也没有办法明确原因、解决问题。

经过一番折腾之后,偶然翻到一篇文档,里面提到可以试试Oracle Instant Client带有SQL Plus的版本试试看,按照相同的步骤处理之后,终于发现是新系统里面缺少vc库导致程序没有办法正常运行,下面就是给出了明确提示的错误提示。

sqlplus-exception-tip.jpeg

前面说这么多,只是想表达一个应用软件除了在考虑正常业务功能之外,对于异常处理的一个设计,可以从另外一个方面体现出这个软件的成熟度。

应用架构时,在异常方面,也有一些常见的处理方式和设计方法,可以参考从下面三个方面进行一个初步的处理:

一、规范异常编码

给应用类的异常进行统一的编码规范是一个好的习惯,这样可以结合异常编码信息表可以快速定位异常的原因,也可以简化异常日志。

在梳理异常编码时,需要全局对应用可能出现的异常进行分类汇总,会让你更好地理清异常的类型,便于异常的处理。

异常的编码的设计在业内有很多可以借鉴的实例,如:HTTP协议等。不过考虑到自建的应用非业内统一规范,更友好的方式是异常编码结合简短的异常说明文本,或者是异常编码直接使用简短的异常缩写词汇。

二、合理处理异常

不是所有的异常都适合直接反馈到用户前端,需要根据异常的类型来对异常进行相对应的处理。有几个原则可以考虑:

  1. 用户能处理的异常,如:业务方面,终端环境等,可以反馈给用户,让用户看见。
  2. 用户不能处理的异常,引导、弥补。如:错开时间使用,错误日志反馈等。
  3. 致命异常(如:参数、环境、网络等)异常日志尽量明确、详细。便于运维人员快速查找服务异常原因。

三、异常日志控制

异常日志输出也需要做合理的规划。避免在高访问量下关键路径异常输出,导致异常日志文件体积暴增,从而引起磁盘空间不足,进一步影响整体服务。

根据异常类型对异常进行适当的计数统计,作为运维监控的一个点。

上面提到是最为基础和常见的几点,应用异常设计还有很多其他方面的因素需要考虑,比如异步编程时,异常反馈如何设计比较好?异常抛出时是用编码还是异常等等。总之,一个优良的应用,不仅是功能上做好设计,异常上也需要做好设计。