云原生到底是什么?

技术的变革,一定是思想先行,云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。

云原生(CloudNative)= Cloud+Native:

  • Cloud:表示应用程序位于云中,而不是传统的数据中心;
  • Native:表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性和分布式优势。

云原生四要素

微服务

微服务的定义是独立部署的、原子的、自治的业务组件,业务组件彼此之间通过消息中间件进行交互,业务组件可以按需独立伸缩、容错、故障恢复。

微服务架构的好处就是服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据DDD来搞。

DevOps

这也是个组合词:Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

持续交付

持续交付是频繁发布、快速部署、快速验证,反传统瀑布式开发模型,这要求开发版本和稳定版本并存。常见的如 灰度发布蓝绿发布

容器化

Docker 是应用最为广泛的容器引擎,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡;Docker和K8S都采用Go编写,都是好东西。

云原生应用

符合云原生的应用程序应该是:

  • 采用开源堆栈(K8S+Docker)进行容器化
  • 基于微服务架构提高灵活性和可维护性
  • 借助敏捷方法、DevOps支持持续迭代和运维自动化,
  • 利用云平台设施实现弹性伸缩、动态调度、优化资源利用率

云原生构建应用简便快捷,部署应用轻松自如、运行应用按需伸缩。优点不一而足,缺点微乎其微;秒杀传统Web框架,吊打祖传IT模式,实在是保命、评优、晋级不可多得的终极绝密武器。

如何云原生?

首先,云原生借了云计算的东风,没有云计算,自然没有云原生,云计算是云原生的基础。

云计算的3层划分 IaaSPaaSSaaS 为云原生提供了技术基础和方向指引,真正的云化不仅仅是基础设施和平台的变化,应用也需要做出改变,摈弃传统的土方法,在架构设计、开发方式、部署维护等各个阶段和方面都基于云的特点,重新设计,从而建设全新的云化的应用,即云原生应用。

本地应用 云原生应用
编程语言 C/C++/Java/PHP Go/Python/Node.js
部署 人肉/手工 自动化
变更 停机更新 支持频繁变更,持续交付,蓝绿部署。
扩容 无法动态扩展,需要冗余资源以抵抗流量高峰。 利用云的弹性自动伸缩,通过共享降本增效。
硬件 内存/网络/存储 几乎没有限制
移植性 依赖具体的系统环境 依赖抽象的基础架构,良好的移植性。
粒度 单体(巨石)应用 细粒度服务,模块化更合理。

云原生理论基础

  • 不可变基础设施:这一点目前是通过容器镜像来实现的,其含义就是应用的基础设施应该是不可变的,是一个自包含、自描述可以完全在不同环境中迁移的东西;
  • 云应用编排理论:当前的实现方式就是 Google 所提出来的“容器设计模式”。

云原生关键技术点

  • 如何构建自包含、可定制的应用镜像;
  • 能不能实现应用快速部署与隔离能力;
  • 应用基础设施创建和销毁的自动化管理;
  • 可复制的管控系统和支撑组件。
彦祖老师 wechat