破茧|一文说透什么是真正的云原生

前言

2013年,Pivotal 公司的Matt Stine首次创造性的提出云原生(CloudNative)的概念,同年,Docker 容器技术宣布开源,迅速掀起虚拟化浪潮并席卷业界。随后,Google 宣布拥抱 Docker ,并发布了提供自动化统一部署能力的开源编排工具 Kubernetes。 2015年,Google 牵头成立云原生基金会(CNCF),此后,AWS、Azure、Alibaba Cloud 等大型云计算厂商相继加入,使云原生彻底进入人们的视线并得以快速发展。

到了2202年,如果你还不知道什么是云原生,那就真的OUT了,卷起来吧!


一、云原生是什么?

Pivotal 公司(Spring、Spring Boot 、Spring Cloud 、RabbitMQ等很多优秀开源软件都是它家的)的定义是:微服务+容器+DevOps+持续交付。

CNCF 基金会对云原生的定义为:

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

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

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

概括来说:云原生就是采用虚拟化技术(如Docker)和自动编排工具(如K8s)进行容器化,使用微服务架构(如SpringCloud),借助敏捷开发、DevOps支持持续交付和运维自动化(如JIRA、TAPD、Jenkins),基于可弹性伸缩、动态调度的云平台设施(如各种容器云),实现从设计、开发、测试、部署全周期都在云上的整体技术方案体系。


二、云原生基本要素

1.容器化(Containers

上世纪70年代开始,在云计算飞速发展的背景下,围绕着如何提高资源利用率,产生了最早的资源隔离技术,如chroot。到21世纪初期,Namespace、Cgroup等资源隔离技术加入Linux内核,但直接调用系统内核对于开发者来说并不方便,因此引入了极大简化应用程序与系统内核交互的复杂性的LXC容器技术,并形成了容器底层技术的内核标准

Docker 起始于dotCloud公司一个内部项目,它使用 Google 公司推出的 Go 语言实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS类的 Union FS等技术,对进程进行封装隔离的操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC和 containerd。

Docker将复杂的内核功能封装成了对开发者非常友好的组件,使开发者能够轻松地打包、上传、下载、运行和调试容器应用,再加上其在内存和空间使用上非常轻量的表现,非常适合横向扩展的应用场景(比如云原生应用),一经宣布开源,便迅速成为应用最为广泛的容器引擎,在各互联网大厂的基础设施中大量使用,成为了容器技术的事实标准

Kubernetes是 Google 在2014年推出了基于Borg的免费开源项目,用于容器管理,容器间的负载均衡,凭借 Google 的支持以及在超大规模环境下的出色表现,免费又开源的Kubernetes一炮走红,成为了大规模容器应用调度和管理技术的事实标准

Kubernetes 中可以部署一个云服务控制器管理器来让 Kubernetes 尽情地使用云上的计算、存储、网络等资源,甚至可以通过组合多个线上、线下的云资源,实现真正的多云互通。这项特性使得 Kubernetes 成为了当之无愧的云原生基石

Google 曾计划将该项目捐给Docker,但Docker的领导层并未接受Kubernetes,也没有将它与Docker集成起来(几年后才推出Kubernetes集成机制),而是将其视为自家创收产品--Docker Swarm的竞争对手。近来Docker公司几易其主、面临较大挑战,2020 年12月 ,Kubernetes官方宣布:“Kubernetes 将弃用 Docker 作为容器运行时”。

2.微服务(Microservices)

几乎每个云原生的定义中都包含微服务,微服务是相对单体应用而言的,微服务就是基于“低耦合、高内聚”原则,根据实际业务功能将单体应用拆分成多个服务,每个服务提供特定的业务功能(单一职责原则),每个服务都可以单独部署,相互独立。服务的拆分也可以依据DDD理念来进行划分。

微服务和微服务架构的是两个不同的概念,微服务强调的是服务的大小和对外提供单一的业务功能,而微服务架构是指把在云中部署的应用和服务组合管理起来,对外提供一套完整的服务。

3.DevOps

DevOps,是个组合词,包括Development(开发)和Operations(运维),实际上还应该包括QA(质量保障)。

传统的组织架构一般都是是按照开发、测试、运维进行分工合作的,服务化之后,加上虚拟化和容器技术提供的便捷,使开发方式(如瀑布式到敏捷)、组织形式(如每个服务可能都有独立的开发、测试、运维团队,开发与运维界限更加模糊)甚至整个生命周期都发生了巨大变化,也使DevOps成为更为迫切的要求。

总之,DevOps就是采用敏捷方法,通过改革组织架构,软件流程,利用软件全生命周期管理工具为云原生提供持续集成和交付能力。

4.云(Cloud)

云为上层应用的运行提供了计算、网络、存储等基础架构资源,是云原生的基础设施。

判断一个应用或架构是否属于云原生,并不是使用了Docker容器,使用了Kubernetes管理,使用了微服务架构就是云原生,如果还是部署在传统机房的物理机上,我觉得就不是真正的云原生。只有用云的方式(比如公有云、私有云或混合云等)部署,真正在云上搭建管理的应用才算真正意义上的云原生,抛去云的云原生,就是无根之木,无源之水。


总结

「为云所用」的技术都是云原生技术,「由云而生」的软、硬件一体化架构,才算真正的云原生。

猜你喜欢

转载自blog.csdn.net/A598853607/article/details/125061345