技术的变革,一定是思想先行,云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。
云原生(CloudNative
)= Cloud
+Native
:
Cloud
:表示应用程序位于云中,而不是传统的数据中心;Native
:表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性和分布式优势。
云原生四要素
微服务
微服务的定义是独立部署的、原子的、自治的业务组件,业务组件彼此之间通过消息中间件进行交互,业务组件可以按需独立伸缩、容错、故障恢复。
微服务架构的好处就是服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据DDD来搞。
DevOps
这也是个组合词:Dev
+Ops
,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。
持续交付
持续交付是频繁发布、快速部署、快速验证,反传统瀑布式开发模型,这要求开发版本和稳定版本并存。常见的如 灰度发布 和 蓝绿发布。
容器化
Docker 是应用最为广泛的容器引擎,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡;Docker和K8S都采用Go编写,都是好东西。
云原生应用
符合云原生的应用程序应该是:
- 采用开源堆栈(
K8S+Docker
)进行容器化 - 基于微服务架构提高灵活性和可维护性
- 借助敏捷方法、DevOps支持持续迭代和运维自动化,
- 利用云平台设施实现弹性伸缩、动态调度、优化资源利用率
云原生构建应用简便快捷,部署应用轻松自如、运行应用按需伸缩。优点不一而足,缺点微乎其微;秒杀传统Web框架,吊打祖传IT模式,实在是保命、评优、晋级不可多得的终极绝密武器。
如何云原生?
首先,云原生借了云计算的东风,没有云计算,自然没有云原生,云计算是云原生的基础。
云计算的3层划分 IaaS
、PaaS
、SaaS
为云原生提供了技术基础和方向指引,真正的云化不仅仅是基础设施和平台的变化,应用也需要做出改变,摈弃传统的土方法,在架构设计、开发方式、部署维护等各个阶段和方面都基于云的特点,重新设计,从而建设全新的云化的应用,即云原生应用。
本地应用 | 云原生应用 | |
---|---|---|
编程语言 | C/C++/Java/PHP | Go/Python/Node.js |
部署 | 人肉/手工 | 自动化 |
变更 | 停机更新 | 支持频繁变更,持续交付,蓝绿部署。 |
扩容 | 无法动态扩展,需要冗余资源以抵抗流量高峰。 | 利用云的弹性自动伸缩,通过共享降本增效。 |
硬件 | 内存/网络/存储 | 几乎没有限制 |
移植性 | 依赖具体的系统环境 | 依赖抽象的基础架构,良好的移植性。 |
粒度 | 单体(巨石)应用 | 细粒度服务,模块化更合理。 |
云原生理论基础
- 不可变基础设施:这一点目前是通过容器镜像来实现的,其含义就是应用的基础设施应该是不可变的,是一个自包含、自描述可以完全在不同环境中迁移的东西;
- 云应用编排理论:当前的实现方式就是 Google 所提出来的“容器设计模式”。
云原生关键技术点
- 如何构建自包含、可定制的应用镜像;
- 能不能实现应用快速部署与隔离能力;
- 应用基础设施创建和销毁的自动化管理;
- 可复制的管控系统和支撑组件。