云原生

虚拟化 -> 标准化 -> 自动化 -> 云计算 -> 云原生

现代应用的十二范式

  1. 基准代码:一份基准代码,多份部署。基准代码和应用之间总是保持对应的关系。所有部署的基准代码相同,但每份部署可以使用其不同的版本
  2. 依赖:显式声明依赖关系。应用程序一定通过依赖清单确切地声明所有依赖项
  3. 配置:在环境中存储配置。将应用的配置存储于环境变量中。环境变量可以非常方便地在不同的部署间做修改,却不动一行代码
  4. 后端服务:把后端服务当作附加资源。应用不会区别对待本地或第三方服务。对应用程序而言,两种都是附加资源
  5. 构建,发布,运行:严格区分构建,发布,运行这三个步骤
  6. 进程:以一个或多个无状态进程运行应用。应用的进程必须无状态且无共享
  7. 端口绑定:通过端口绑定提供服务。应用完全自我加载而不依赖任何网络服务器就可以创建一个面向网络的服务
  8. 并发:通过进程模型进行扩展。开发人员可以运用这个型去设计应用架构,将不同工作分配给不同的进程类型。
  9. 易处理:快速启动和优雅终止可最大化健壮性。应用的进程是可支配的,意思是说它们可以瞬间开启或停止
  10. 开发环境与线上环境等价:尽可能保持开发、预发布、线上环境相同。应用想要做到特续部署就必须缩小本地与线上差异
  11. 日志:把日志当作事件流。应用本身考虑存储自己的输出流。不应该试图去写或者管理日志文件
  12. 管理进程:后台管理任务当作一次性进程运行。一次性管理进程应该和正常的常驻进程使用同样的环境

这些范式反映了现代应用程序开发的一些重要趋势,如微服务架构、持续集成和持续交付、容器化、云原生开发等

云原生应用

原则

CICD

弹性

解耦

中台

代表技术

基础架构

IaC

基础设施即代码(Infrastructure as code)是一种自动化基础设施管理的方法,其可以通过声明式或者过程式的方式来对基础设施资源进行管理,其有不可变、可追踪、可重复、自动化等特点。

mindmap  Iac    面向主机      Puppet/Saltstack      Ansible    面向云      Terraform/Pulumi      AWS Cloudformation      Google Cloud Deployment Manager    面向应用      k8s
# terraform example# Create an EC2 instanceresource "aws_instance" "example" {  ami           = "ami-785db401"  instance_type = "t2.micro"  tags {    Name = "terraform-example"  }}