什么是云原生?
云原生(Cloud Native)是最近技术圈一个比较火的名词,相信大家或多或少都听说过。不过对于大多数普通研发朋友来说,"云原生"这个词多少可能还是有些陌生,以至于刚开始听到这个词时可能还会一脸懵逼的问"这到底是一个什么技术,我用过吗?"这样的问题。
其实这并不奇怪,因为对于绝大多数普通开发者来说,我们大部分时间都是在别人构建的基础设施里专注于业务代码的开发,而很少关心业务应用运行所依赖的基础设施环境,但这恰恰也是构建云原生应用的核心意义所在。在今天的文章中,就和大家聊一聊关于云原生的话题!
云原生的概念
什么是云原生?对于这个问题我们需要理解,云原生并不是指某一项具体的技术,而是一组技术体系、概念及系统设计原则的集合。例如我们常讨论的微服务架构、Kubernetes容器编排、Devops等内容都是云原生体系的组成部分。
从这个角度看,对于目前已经实现了云服务部署、Spring Cloud微服务架构体系、Kubernetes容器化部署、且构建起了一套自动化发布系统的公司来说,事实上就已经是在践行云原生架构理念了。所以,你看是不是很多公司其实都已经在实施云原生架构了呢?
根据CNCF(云原生计算基金会)的官方描述,云原生技术是指有利于在公有云、私有云或混合云等新型动态环境下,实现应用可弹性伸缩部署的技术体系。云原生的代表技术主要包括容器、服务网格、微服务、不可变基础设施及声明式API。利用这些技术可以构建出容错性更好、更易于管理和观察的松耦合系统,再加上一些可靠的自动化技术及完备的监控预警体系,云原生技术将使开发人员能更快速、轻松地迭代和交付软件系统。
所以从上述描述看,云原生技术实际上并不是突然才流行起来的概念,而是随着云计算、微服务架构、服务网格等分布式应用架构技术普及流行,以及在以Docker、Kubernetes为代表的容器化技术的推动下,逐步被业界所认可的一种系统架构理念及设计原则的抽象总结。
云原生技术图谱
这里我总结了一份关于云原生架构的技术图谱供大家参考,如下图所示:
如上图所示,你会发现所谓的云原生简直就是一个技术大杂烩,它几乎囊括目前大部分流行的后端技术,甚至还延伸到了AI、机器学习、边缘计算等领域。但从实际应用场景来说云原生架构主要特征还是体现在云端环境、微服务架构、服务网格、Devops自动化交付、容器化部署这几个方面。
云端环境就是要使用云服务器,对于大部分公司来说就是使用阿里云、腾讯云之类的公有云服务来部署应用,而不是自己在额外维护一套复杂服务器机房。这样做的好处就在于利用云服务的弹性及分布式优势,可以大大降低运维成本,并且提升服务的稳定性。
而面向微服务的架构,能将原先耦合度高的单体系统,在遵循软件“高内聚、低耦合”设计原则的前提下,以独立业务能力为边界拆分为一个个原子系统。这样做的好处是,每个子系统都可以独立交付部署,从而能实现更敏捷的软件迭代效果。目前以Spring Cloud为代表的微服务技术,几乎已成为事实上的软件构建标准;而以Istio、Linkerd为代表的下一代服务网格技术也在快速发展,这一切都为云原生架构理念的普及作了有效地铺垫。
关于Devops,它强调的是以开发运维的视角,去构建一套高效完备的CI/CD流程,并通过自动化构建工具及发布系统,来实现软件生命周期的管理。从而使得普通开发人员,能够更快、更频繁地交付更加稳定的软件代码。例如我在本专栏发表的<<Kubernetes微服务自动化发布系统>>实际上就是一种Devops思想的具体实践案例,感兴趣的朋友可以参考下。
此外基于Kubernetes的容器化编排技术,已经事实上成为微服务运行的标准基础架构环境,也正是Kubernetes的流行,才真正推动了云原生架构理念的普及,Kubernetes可以说就是云原生架构的核心承载平台。关于Kubernetes的基本原理及具体实践本专栏也有一些文章可供参考,感兴趣的朋友可以阅读下。
总结
以上内容给大家大致介绍了下云原生的概念,并总结了目前云原生所涉及的主流技术栈图谱。从宏观上看云原生架构是一个非常庞大的体系,它几乎能包含目前软件后端技术领域的方方面面,但从细节上看它却又是我们现阶段工作中都多少能接触到的技术,例如Spring Cloud微服务、服务熔断限流、Kubernetes容器编排等等。
所以从某种程度上讲,云原生是一个抽象又具体的存在。它不是一个具体的产品,而是一套技术体系和一套方法论,随着围绕着云原生架构的各类开源技术的进一步发展,云原生技术体系必将成为主流,进而影响到每一个技术人员、每一个企业和行业。
以上就是想和大家分享的全部内容,希望对大家有所帮助!
—————END—————
参考资料:
https://jimmysong.io/awesome-cloud-native
https://landscape.cncf.io/
https://jimmysong.io/awesome-cloud-native/#tracing