云原生开发
**“云原生” (Cloud Native)** 是现代软件开发和运行的一种核心架构理念。
#status / growing
#type / concept
#tech / dev
[!info] related notes
云原生
“云原生” (Cloud Native) 是现代软件开发和运行的一种核心架构理念。
它经常被误解为仅仅是“把应用程序放到云服务器上运行”。但实际上,云原生的精髓在于:应用从设计之初,就是为了充分利用云计算的优势(如弹性、分布式、自动化)而构建的。
简而言之,它不是关于你在哪里运行应用,而是关于你如何构建和管理应用。
云原生的四大核心支柱
云原生计算基金会(CNCF)对云原生有明确的定义,通常可以通过以下四个核心技术支柱来理解:
- 微服务 (Microservices): 将过去庞大、复杂的单体应用(Monolith)拆解成一个个独立、小巧、单一职责的服务。每个微服务可以由不同的团队独立开发、测试、部署和扩展,互不干扰。
- 容器化 (Containerization): 将微服务及其运行所需的依赖环境打包在一起(最常见的技术是 Docker)。容器就像集装箱一样,确保了应用在开发、测试和生产环境中的表现完全一致,且启动速度极快。
- 动态编排 (Dynamic Orchestration): 当你有成百上千个容器在运行时,依靠人工管理是不现实的。这就需要像 Kubernetes (K8s) 这样的编排工具,来自动负责容器的部署、扩缩容、负载均衡和故障恢复。
- DevOps 与持续交付 (CI/CD): 打破开发(Dev)和运维(Ops)的壁垒,通过高度自动化的流程,实现代码的频繁、安全、可靠的更新。
云原生 vs. 传统架构
为了更直观地理解,我们可以将它与传统的软件架构做一个对比:
| 维度 | 传统架构 (Traditional) | 云原生架构 (Cloud Native) |
|---|---|---|
| 系统架构 | 单体架构 (Monolithic) | 微服务架构 (Microservices) |
| 基础设施 | 物理机或传统虚拟机 | 容器 (Containers) / 无服务器 (Serverless) |
| 扩展方式 | 整体扩展(耗时、浪费资源) | 按需独立扩展特定服务(高效、弹性) |
| 更新频率 | 几个月或几年更新一次 | 每天甚至每天多次(持续交付) |
| 容错能力 | 局部故障可能导致系统崩溃 | 设计之初即考虑失败(高可用、自动恢复) |
为什么要采用云原生?
- 极致的弹性: 比如双十一大促,云原生应用可以在几秒钟内自动增加服务器资源应对流量洪峰,流量退去后又自动释放资源,节约成本。
- 快速试错与创新: 开发者可以更快地发布新功能,发现 bug 也能迅速回滚或修复,极大地提升了业务敏捷性。
- 高可靠性: 当某个节点或微服务发生故障时,系统可以自动隔离并重新拉起新的实例,用户甚至感知不到系统出过问题。