本文简单说明几个设计并发系统时需要考虑的问题,内容摘抄自《GO语言并发之道》
异常传递
异常是什么,什么时候发生,提供了哪些好处
首先,异常需要传达几个关键信息:
- 发生了什么:
这部分异常信息包括了岁异常时间的描述。例如:磁盘已满,连接被重置,证书过期等 - 发生在什么时间,什么位置:
异常应该包含完整的轨迹信息,从调用的启动方式开始,已异常的实例结尾。栈轨迹信息不应该被包含在异常信息中,但当需要处理栈中的异常时应该很容易被找到 - 对用户友好的信息:应当对展现给用户的信息进行自定义,应该只包含前两点的概述以及相关信息。对用户友好的信息是从用户的角度出发,给出一些信息,说明这些信息是否是暂时的,并且最好是一行以内的文本
- 告诉用户如何获取更多信息:某些情况下,用户希望知道当异常发生时具体发生了那些故障,展示给用户的异常信息应该提供一个id,利用这个id可以查到对应的详细日志,日志应该包含有完整的信息(异常的发生时间和异常时的堆栈调用)
当展示给用户的信息不包含这些信息,不是出错了就是有BUG。所以异常可以分为两类:
- BUG
- 已知信息
超时和取消
为什么要支持超时?
系统饱和
如果系统已经饱和(已经达到系统处理请求的