什么是云原生,这样理解就对了

随着云计算的大行其道,大家都在喊着要上云,云原生(Cloud Native)的概念应运而生,甚至国内外的大厂们还联合成立了云原生基金会CNCF(https://www.cncf.io/)。我们刚刚搞懂什么是移动互联网,云计算,微服务,那么什么是云原生呢? 把服务应用上云租个云服务器就是云原生了吗?当然不可能这样简单,那么笔者今天和大家聊聊什么是云原生吧。

一 云原生的诞生

要了解一件事件,我们要回到事情起始。

云原生(Cloud Native)的概念,由来自Pivotal的MattStine于2013年首次提出,被一直延续使用至今。这个概念是Matt Stine根据其多年的架构和咨询经验总结出来的一个思想集合,并得到了社区的不断完善,内容非常多,包括DevOps、持续交付(Continuous Delivery)、微服务(MicroServices)、敏捷基础设施(Agile Infrastructure)和12要素(The Twelve-Factor App)等几大主题,不但包括根据业务能力对公司进行文化、组织架构的重组与建设,也包括方法论与原则,还有具体的操作工具。采用基于云原生的技术和管理方法,可以更好地把业务生于“云”或迁移到云平台,从而享受“云”的高效和持续的服务能力。


image.png

二、 CNCF重新定义云原生

CNCF,即云原生计算基金会,2015年由谷歌牵头成立,基金会成员目前已有一百多企业与机构,包括亚马逊、微软、思科等巨头。

目前CNCF给出了1.0的云原生定义,链接如下:https://github.com/cncf/toc/blob/master/DEFINITION.md#%E4%B8%AD%E6%96%87%E7%89%88%E6%9C%AC

Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.

These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.

The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.

中文版本:

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

三、到底怎么理解云原生

上面的定义其实都是比较抽象的,不接地气,那么到底该怎么理解云原生呢?或者说要怎么使用,怎么开发才算是云原生呢?

顾名思义,云原生是面向“云”而设计的应用,因此技术部分依赖于传统云计算的3层概念,基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS),例如,敏捷的不可变基础设施交付类似于IaaS,用来提供计算网络存储等基础资源,这些资源是可编程且不可变的,直接通过API可以对外提供服务;有些应用通过PaaS服务本来就能组合成不同的业务能力,不一定需要从头开始建设;还有一些软件只需要“云”的资源就能直接运行起来为云用户提供服务,即SaaS能力,用户直接面对的就是原生的应用。

从这个思想出来,我们不能理解:

云原生并非把原先在物理服务器上跑的东西放到虚拟机里跑,真正的云化不仅是基础设施和平台的事情,应用也要做出改变,改变传统的做法,实现云化的应用

——应用的架构、应用的开发方式、应用部署和维护技术都要做出改变,真正的发挥云的弹性、动态调度、自动伸缩

那么怎么实现云原生呢?云原生架构和云原生应用所涉及的技术很多,如容器技术、微服务、可持续交付、DevOps,这四点构成云原生的四要素。


image.png

3.1 微服务

一个微服务基本是一个能独立发布的应用服务,因此可以作为独立组件升级、灰度或复用等,对整个大应用的影响也较小,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发,甚至整个团队的组织架构也会更精简,因此沟通成本低、效率高。

微服务的技术实现有著名spring cloud框架和正在大力发展的service mesh,比如istio,linkerd

3.2 devOps

DevOps如果从字面上来理解只是Dev(开发人员)+Ops(运维人员),实际上,它是一组过程、方法与系统的统称。DevOps强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。

devOps方案有ansible,saltstack,Prometheus、Alertmanager - grafana等

3.3 持续交付

敏捷开发要求持续交付,因为敏捷开发要求随时有一个版本可以上到大群环境,所以要持续交付。持续交付目的的快速应对客户的需求变化,要求发布非常频繁,所以会存在多个版本同时提供服务的情况,因此需要支持灰度发布/金丝雀发布等

持续交付方案包括gitlab,jenkins,tekton等

3.4 容器化

说起容器化,不得提docker。
Docker是软件行业最受欢迎的软件容器项目,Docker起到应用隔离作用,为微服务及其所需的所有配置、依赖关系和环境变量移动到全新、无差别的运行环境,移植性强。但是docker对于分布式应用的部署和编排没有考虑,在网络和存储方式都没有提出比较好的方式,包括docker-compose。
这个时候Kubernetes横空出世,可以说Kubernetes正在推动了云原生的流行和发展。Kubernetes是一个允许自动化部署、管理和伸缩容器的工具。它提供了一些强大的功能,例如容器之间的负载均衡,重启失败的容器以及编排容器使用的存储,极大方便了广大的开发者。

四、总结

云原生的DevOps、平台、持续交付、微服务都是云原生不可或缺的一部分。
云原生不是一个产品,而是一套技术体系和一套方法论,随着云原生的大力发展,它必将成为未来的主流,进而影响到每一个技术人员,每一个企业,每一个行业,成为我们都必须掌握的基本技能。

那么从现在开始,就让我们一起好好学习它,理解它吧。

你可能感兴趣的:(什么是云原生,这样理解就对了)