云原生架构介绍
云原生(Cloud Native)是一种构建和运行应用程序的方法,充分利用云计算的优势:弹性伸缩、按需付费、高可用和快速交付。
什么是云原生
云原生应用从设计之初就为云环境而生,具备以下特征:
- 微服务化:将单体应用拆分为一组松耦合的小服务,每个服务独立开发、部署和扩展。
- 容器化:应用及其依赖打包进容器镜像,做到"一次构建,到处运行"。
- 动态编排:使用 Kubernetes 等编排系统管理容器的调度、扩缩容和自愈。
- 声明式交付:基础设施和应用配置代码化(IaC),通过 GitOps 流程实现自动化发布。
核心技术栈
| 领域 | 常见技术 |
|---|---|
| 容器运行时 | containerd、CRI-O |
| 容器编排 | Kubernetes(K8s) |
| 镜像构建 | Docker、BuildKit、Kaniko |
| 服务网格 | Istio、Linkerd |
| CI/CD | GitLab CI、GitHub Actions、Argo CD、Tekton |
| 可观测性 | Prometheus、Grafana、OpenTelemetry、ELK |
| 包管理 | Helm、Kustomize |
架构示意图
用户
│
▼
网关 / Ingress(路由、限流、TLS 终止)
│
▼
服务网格(服务发现、灰度发布、mTLS)
│
├── 微服务 A ──┐
├── 微服务 B ──┼── 数据层(MySQL / Redis / 对象存储)
└── 微服务 C ──┘
│
▼
消息队列(Kafka / RocketMQ)
设计原则
- 不可变基础设施:服务器一旦创建就不再修改,升级通过替换新实例完成,避免配置漂移。
- 宠物 vs 牛群:实例是可丢弃的(牛群),故障时直接重建而不是修复,应用本身必须无状态或外部化状态。
- 面向失败设计:超时、重试、熔断、降级是标配;任何依赖都可能不可用。
- 可观测性:通过日志(Logging)、指标(Metrics)、链路追踪(Tracing)三大支柱定位问题,而非登录机器排查。
- DevOps 与自动化:开发与运维协同,构建、测试、部署全流程自动化。
一个典型的部署流程
- 开发者提交代码到 Git 仓库。
- CI 流水线自动构建容器镜像并推送到镜像仓库。
- Argo CD 检测到镜像或配置变更,通过 Helm/Kustomize 渲染 K8s 清单。
- 滚动更新或金丝雀发布到集群,Prometheus 监控指标。
- 指标异常时自动回滚,正常则完成发布。
何时采用云原生
适合:需要快速迭代、流量波动大(如电商大促)、多团队协作的中大型项目。
谨慎:流量稳定的小型应用,引入全套组件会带来不必要的运维复杂度——可以先从容器化 + 简单部署开始。
