跳转至

常见容错机制:failover、failfast、failback、failsafe


1.failover:失效转移

​ Fail-Over的含义为“失效转移”,是一种备份操作模式,当主要组件异常时,其功能转移到备份组件。其要点在于有主有备,且主故障时备可启用,并设置为主。如Mysql的双Master模式,当正在使用的Master出现故障时,可以拿备Master做主使用

2.failfast:快速失败

​ 从字面含义看就是“快速失败”,尽可能的发现系统中的错误,使系统能够按照事先设定好的错误的流程执行,对应的方式是“fault-tolerant(错误容忍)”。以JAVA集合(Collection)的快速失败为例,当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。

​ 例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常(发现错误执行设定好的错误的流程),产生fail-fast事件。

3.failback:失效自动恢复

Fail-over之后的自动恢复,在簇网络系统(有两台或多台服务器互联的网络)中,由于要某台服务器进行维修,需要网络资源和服务暂时重定向到备用系统。在此之后将网络资源和服务器恢复为由原始主机提供的过程,称为自动恢复

4.failsafe:失效安全

Fail-Safe的含义为“失效安全”,即使在故障的情况下也不会造成伤害或者尽量减少伤害。维基百科上一个形象的例子是红绿灯的“冲突监测模块”当监测到错误或者冲突的信号时会将十字路口的红绿灯变为闪烁错误模式,而不是全部显示为绿灯。


  1. Failover (故障转移):
  2. 应用案例: 在在线视频流服务中,如果主视频流服务器发生故障,系统会自动将用户请求转移到备用服务器上。这种故障转移策略确保了即使在主服务器出现问题时,用户仍能无中断地继续观看视频,体验几乎没有明显的中断。

  3. Failfast (快速失败):

  4. 应用案例: 在电子商务网站中,如果支付网关服务检测到交易处理中的一个严重错误(如信用卡验证失败),它将立即终止交易过程并返回错误信息给客户端。这种快速失败策略防止了错误进一步扩散,比如错误地发货或不当扣款,同时允许用户迅速采取修正措施。

  5. Failback (故障回复):

  6. 应用案例: 在云计算服务中,如果原先由于故障进行了故障转移操作,当主数据中心恢复后,系统会进行故障回复,将数据和客户请求从备用数据中心安全地迁移回主数据中心。在迁移过程中,服务保持可用,而客户几乎不感知到后台的这一切操作。

  7. Failsafe (安全失败):

  8. 应用案例: 在远程监控系统中,如果检测到核心监控功能失效(如网络连接断开),系统会自动切换到本地存储操作,继续记录重要事件直到网络恢复。这种安全失败策略确保了关键信息不会因系统故障而丢失,并在连接恢复后可以恢复正常操作。

这些策略在不同情境下的运用,不仅提高了系统的健壮性和可靠性,而且也优化了用户体验,确保了服务的持续性和数据的安全性。

[otel.javaagent 2025-12-23 18:26:23:476 +0800] [OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.internal.grpc.GrpcExporter - Failed to export logs. Server responded with UNIMPLEMENTED. This usually means that your collector is not configured with an otlp receiver in the "pipelines" section of the configuration. If export is not desired and you are using OpenTelemetry autoconfiguration or the javaagent, disable export by setting OTEL_LOGS_EXPORTER=none. Full error message: unknown service opentelemetry.proto.collector.logs.v1.LogsService

[otel.javaagent 2025-12-23 18:54:44:743 +0800] [OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.internal.grpc.GrpcExporter - Failed to export spans. Server responded with UNIMPLEMENTED. This usually means that your collector is not configured with an otlp receiver in the "pipelines" section of the configuration. If export is not desired and you are using OpenTelemetry autoconfiguration or the javaagent, disable export by setting OTEL_TRACES_EXPORTER=none. Full error message: unknown service opentelemetry.proto.collector.trace.v1.TraceService