微服务架构设计,对云原生的超越12因素了解吗,使用于所有语言!!!

 

“超越 12 因素应用程序”12-Factor 为构建如下的 SaaS 应用提供了方法论:

 

  • 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。

 

  • 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性

 

  • 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。

 

  • 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。

 

  • 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展

 

这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。

 

 

12-Factor 如下:

 

  • 基准代码:一份基准代码,多份部署

 

  • 依赖:显式声明依赖关系

 

  • 配置:在环境中存储配置

 

  • 后端服务:把后端服务当作附加资源

 

  • 构建,发布,运行:严格分离构建和运行

 

  • 进程:以一个或多个无状态进程运行应用

 

  • 端口绑定:通过端口绑定提供服务

 

  • 并发:通过进程模型进行扩展

 

  • 易处理:快速启动和优雅终止可最大化健壮性

 

  • 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同

 

  • 日志: 把日志当作事件流

 

  • 管理进程:后台管理任务当作一次性进程运行
关于架构设计的原则

 

  • N+1设计。系统中的每个组件都应做到没有单点故障;
  • 回滚设计。确保系统可以向前兼容,在系统升级时应能有办法回滚版本;
  • 禁用设计。应该提供控制具体功能是否可用的配置,在系统出现故障时能够快速下线功能;
  • 监控设计。在设计阶段就要考虑监控的手段;
  • 多活数据中心设计。若系统需要极高的高可用,应考虑在多地实施数据中心进行多活,至少在一个机房断电的情况下系统依然可用;
  • 采用成熟的技术。刚开发的或开源的技术往往存在很多隐藏的bug,出了问题没有商业支持可能会是一个灾难;
  • 资源隔离设计。应避免单一业务占用全部资源;
  • 架构应能水平扩展。系统只有做到能水平扩展,才能有效避免瓶颈问题;
  • 非核心则购买。非核心功能若需要占用大量的研发资源才能解决,则考虑购买成熟的产品;
  • 使用商用硬件。商用硬件能有效降低硬件故障的机率;
  • 快速迭代。系统应该快速开发小功能模块,尽快上线进行验证,早日发现问题大大降低系统交付的风险;
  • 无状态设计。服务接口应该做成无状态的,当前接口的访问不依赖于接口上次访问的状态。