云原生12要素应用模型
大家可能听过Netflix的故事,在AWS Region故障的时候,它的服务仍然没受到什么影响,能继续对外提供流媒体服务。他们遵循的就是云原生应用与云平台的契约:即使云平台再可靠,也不会100%可用,而上层应用需要通过架构设计来保证业务连续。
具体而言,就是云原生应用要具备12要素(https://12factor.net/ )才能满足以上契约。
- 使用版本控制管理代码
- 应用基于代码库和依赖声明式的打包
- 不同环境的应用包应保持不变,无需重新打包
- 应用使用到的后端服务(如数据库、NoSQL、缓存、消息中间件等)可以自助使用(创建、绑定使用、解绑、删除等),服务不绑定于某个IP,通过逻辑的名字如DNS, 注册中心的名称来调用
- 应用尽量保持无状态,状态(如用户Session、缓存)不依赖于本机内存(易失性的),应保存在公共的缓存服务器或NoSQL数据库中,没有本地文件系统(易失性的)的I/O,如特定路径的文件读写等
- 应用优先使用水平伸缩,通过增加/减少实例数量实现扩缩容
- 应用能快速启动,支持优雅终止,保持在1分钟以内;不同应用可以独立启动和停止,无特定顺序
- 不同环境(如开发、集成测试、用户验收测试、预生产、生产环境等)尽量保持等价一致
- 日志输出到STDOUT/STDERR,由平台工具进行日志聚合
- 管理操作(如创建数据库schema,初始化数据等)也作为一次性的任务来执行