基本概念

  • 公有云、私有云、混合云
  • 构建可弹性扩展的应用
  • 代表技术:容器、服务网格、微服务、不可变基础设施、声明式 API
  • 容错性好、易于管理、便于观察的松耦合系统
  • 可靠的自动化手段
  • 工程师能够轻松地对系统做出频繁和可预测的重大变更
  • 厂商中立的开源生态系统

12 factor

  • I.基准代码
    • 一份基准代码,多份部署
  • II.依赖显式声明依赖关系
  • III.配置在环境中存储配置
    • 环境类(如 prod,dev,staging)的配置,使用环境变量管理
    • 配置分组 (按环境分组也可以)
  • IV.后端服务把后端服务当作附加资源
    • 后端服务统一抽象成外部资源
    • 外部资源切换时,只需修改一行代码/配置
  • V.构建,发布,运行严格分离构建和运行
    • 构建阶段:是指将代码仓库转化为可执行包的过程。构建时会使用指 定版本的代码,获取和打包 依赖项,编译成二进制文件和资源文件。
    • 发布阶段:会将构建的结果和当前部署所需 配置 相结合,并能够立刻 在运行环境中投入使用。
    • 运行阶段:(或者说“运行时”)是指针对选定的发布版本,在执行环境 中启动一系列应用程序 进程。
  • VI.进程以一个或多个无状态进程运行应用
    • 一个或多个进程运行
    • 无状态无共享,持久化数据在数据库中
    • 反对 sticky session
  • VII.端口绑定
    • 通过端口绑定提供服务
  • VIII.并发通过进程模型进行扩展
    • 通过进程模型进行扩展
    • 需要提高服务能力,只要增加无状态的进程数就可以
    • 借助 systemd 之类的工具管理 stdin, stdout 和崩溃输出
  • IX.易处理快速启动和优雅终止可最大化健壮性
    • 进程可以快速起动停止
    • 处理 sigterm 优雅中止
    • 客户端丢失连接后主动重连
    • 底层设施崩溃时进程仍然要保持健壮(不能一崩不起)
  • X.开发环境与线上环境等价尽可能的保持开发,预发布,线上环境相同
    • 尽可能保持开发、预发布、线上环境一致(不能线下依赖 mysql,线上 依赖 oracle,不能线下 Go 1.17,线上 1.14)
    • 持续部署
    • 更广义的环境一致是很难做的
  • XI.日志把日志当作事件流
    • 把日志当成事件流
    • 日志收集、分析系统
    • 计算图形化,系统化
    • 根据事件流报警
  • XII.管理进程后台管理任务当作一次性进程运行
    • 一次性管理进程:如数据库的 migration,应该与线上服务使用相同的 环境
    • 所有类型的进程依赖管理环境应该一致(比如 py 用 pyenv,其它语言 没法用)

设计理念

  • 面向分布式设计(Distribution):容器、微服务、API 驱动的开发;
  • 面向配置设计(Configuration):一个镜像,多个环境配置;
  • 面向韧性设计(Resistancy):故障容忍和自愈;
  • 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应;
  • 面向交付设计(Delivery):自动拉起,缩短交付时间;
  • 面向性能设计(Performance):响应式,并发和资源高效利用;
  • 面向自动化设计(Automation):自动化的 DevOps;
  • 面向诊断性设计(Diagnosability):集群级别的日志、metric 和追踪;
  • 面向安全性设计(Security):安全端点、API Gateway、端到端加密;

弹性设计

  • ASGAverageCPUUtilization—平均 CPU 使用率
  • ASGAverageNetworkIn—网卡平均接收字节数
  • ASGAverageNetworkOut—网卡平均发送字节数
  • ALBRequestCountPerTarget—每个实例完成的平均请求数

AutoScaling:

  • 超过阈值自动扩容
  • 低于阈值自动缩容
  • 最小可用实例
  • 最大扩容实例数

安全性设计

  • Service Mesh 数据面,如 envoy,mosn:TLS 双向加密。
  • Service Mesh 控制面,如 istio:证书管理,证书下发,服务认证。
  • 身份管理服务,比如 Google Cloud 上的 Anthos ID Service:二进制文件验证,部署时安全检查
  • 配置规则验证:按照安全,业务性质,合法性对配置变更进行校验
  • 云节点加固:系统软件签名认证(secure boot),完整性验证(integrity verification)
  • 安全容器,Sandbox 技术:工作负载隔离(典型项目,如 katacontainer, gvisor)