如何构建易于运维的后端应用

六点要点

  • 保持简单并消除不一致

    • 无状态的、事务的(stateless、scalable)
    • 单一代码库 (Codebase -> Deploys)
  • 简单地观察和干预内部行为

    • 日志级别 (trace、debug、info、warn、error、fatal)
    • 结构化日志 (bunyan、winston)
    • 时序数据和图表(Grafana)
    • 时序数据(InfluxDB)
    • 通过环境变量管理配置
      • exports.LISTEN = process.env.LISTEN || 3000
  • 出了问题要有办法发现
    • self-check
      • yield []
      • Promise.all []
    • 错误收集(Sentry、raven)
  • 操作自动化
    • Why
      • 保证一致
      • 节省时间
      • 可重复
      • 可复用
    • How
      • 依赖(package.json)
      • 数据库变更(db-migrate)
      • 系统环境(Dockerfile)
      • 构建、测试和发布(CI)
      • 其他自动化脚本
  • 尝试从错误中自动恢复
    • 数据一致性修复任务(MySQL MongoDB Redis Cache)
  • 划清组件之间的界限
    • 守护进程(重启)
    • 负载均衡(Https、IP限流)
    • 日志(写入文件、轮转he )