
# RES06-02 面向所有故障进行检测
针对所有故障场景，都需要能自动检测，以便及时发现和恢复故障。
- **风险等级**
  高
  
- **关键策略**
  - 所有故障都必须有检测。
  
  - 支持按不同维度进行故障检测，如Region、AZ、服务、方法、实例或容器ID等，检测维度与故障恢复方式对齐。
  
  - 检测到故障后需及时告警或自动恢复。
  
  
  
  针对具体故障进行检测时，根据检测的类型通常可以分为资源检测、功能检测和业务检测。
  - 资源检测：云环境中一般指虚拟化后的物理硬件资源及其对应的软件资源，具体包含CPU、内存、网络和磁盘资源等。
  
  - 功能检测：对组成产品系统的各个内部模块对象进行检测的过程，确定模块功能是否满足设计的需求。当产品系统的功能发生故障时，对外的呈现即为功能输出和预期不一致。在产品上线之前，通过功能相应接口，开发者和测试人员需要多次检测以保证模块功能的正确性。功能检测可以使用传统日志跟踪技术、调用链技术来进行检测，如华为云APM。
  
  - 业务检测：模拟用户的业务操作过程，获得完成业务的操作过程性能数据和操作结果数据；业务检测使用拨测技术来完成检测，由于拨测需要占用网络资源，对于长周期拨测，一般选择在空闲时间段进行，属于抽样检测，而如果是短周期拨测（如5分钟周期），则可例行进行；与功能检测的联系是，业务检测也可以采用调用链来完成。
  
  
  故障检测方法根据类型有很多种，下面是一些在高可用性系统中常用的故障检测方法。
  - 数值范围检查：在大多数应用中，一个操作的结果必须处于某个范围之内。对这些边界条件可以进行一些测试来验证数据是否满足预期要求。
  
  - 数据完整性检查：每当数据被从一个单元传递给另一个单元时，该数据可能会被破坏。对于在硬件单元间传递的数据尤其如此。然而，由于软件层可以隐藏本地内存传送和跨远程链路的传送间的差异，因此需要在多个点进行数据完整性检查。可以采用很多方法来验证数据的完整性，其中大多数方法都依赖于冗余或者包含在数据中的摘要信息。有些方法采用足够的冗余，不仅能检测错误，而且能纠正错误。但大多数方法中都只包括足够的额外信息来检测数据是否有效。典型的方法如奇偶校验和CRC（循环冗余校验）。
  
  - 比较测试：当系统具有冗余时，可以使两个系统并行进行计算，然后对结果进行比较，如果结果不匹配则认为发生了故障。这种概念也称为表决。比较可以在系统的任何层次上进行，包括在一条内存总线上的cycle by cycle的比较，到最终发送到网络上结果的比较。
  
  - 时间检测：时间检测是故障检测的一种简单形式。如果一个事件预期应在某个时间段内发生，而却没有在该时间段发生，就检测到了一个故障。时间检测的一种特殊方法通常称为心跳方法。它采用以某个规定的周期频率执行的某些类型的消息握手。该技术可以用于验证单元或子系统是否仍然能够维持某些等级的功能。
   
 
