[go学习笔记]五十一、面向恢复的设计

304 阅读1分钟

示例代码请访问:github.com/wenjianzhan…

“A priori prediction of failure modes is not possible.”

在程序设计的时间,不能够预知所有的错误;

健康检查

  • 注意僵尸进程
    • 池化资源耗尽
    • 死锁

需要做有效的健康检查,来预防僵尸进程,在之前也提到过 Let it Crash!

defer func() {
  if err := recover(); err != nil {
    log.Error("recovered panic",err)
  }
}

构建可恢复的系统

  • 拒绝单体系统
  • 面向错误和恢复的设计
  • 在依赖服务不可用时,可以继续存活
  • 快速启动
  • 无状态

与客户端协商

服务器:“我太忙了,请慢点发送数据” Client:“好,我一分钟后再发送”

示例代码请访问:github.com/wenjianzhan…