云原生,你真的懂了么?
Posted CloudNativeClub
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生,你真的懂了么?相关的知识,希望对你有一定的参考价值。
写在开篇:
说明(二):后续的文章都会先列出文章的思路框架和探讨的主要问题,这样方便大家先看下文章内容是否对自己有用,没用的就不必继续看后续的详细内容了,浪费宝贵时间。信息爆炸的时代,过滤掉无用的信息,吸收对自己有用的信息非常重要,信息无限,时间有限。
本篇文章主要探讨内容如下:
1. 云原生提出的背景是什么?
Pivotal是什么公司?为什么要提出云原生?
CNCF为什么要提出云原生?为什么他们俩提出的内容不一样?
2. 到底什么是云原生?
云原生包括哪些技术?有什么优势?为什么火起来了?
什么是云原生应用?构建云原生应用的12要素是什么?
云原生应用和传统应用有哪些不同?有哪些好处?
3. 云原生的落地现状和未来
云原生技术落地情况怎样?云原生未来将走向何方?
---------------分割线---------------
云原生(CloudNative)提出的背景
2013年Pivotal公司的 Matt Stine提出云原生概念,并在2015年《迁移到云原生架构》一书中定义了符合云原生架构的特征:12因素、微服务、自服务、基于API协作、扛脆弱性。
2015年由Linux基金会发起了一个 The Cloud Native Computing Foundation(CNCF)基金组织,CNCF基金会的成立标志着云原生正式进入高速发展轨道,Google、Cisco、Docker各大厂纷纷加入,并逐步构建出围绕 Cloud Native 的具体工具,而云原生这个的概念也逐渐变得更具体化。CNCF最初对云原生定义是也是狭窄的,当时把云原生定位为容器化封装+自动化管理+面向微服务。
2017年, 云原生应用的提出者之一的Pivotal在其官网上将云原生的定义概况为DevOps、持续交付、微服务、容器这四大特征,这也成了很多人对 Cloud Native的基础印象。
2018年,随着Service Mesh的加入,CNCF对云原生的定义发生了改变,而这也逐渐作为被大家认可的官方定义:
(1)基于容器、服务网格、微服务、不可变基础设施和声明式API构建的可弹性扩展的应用;
(2)基于自动化技术构建具备高容错性、易管理和便于观察的松耦合系统;
(3)构建一个统一的开源云技术生态,能和云厂商提供的服务解耦。
以上是云原生概念的由来和演进过程。这些演进的过程背后的意图,我觉得更值得我们深究一下。我们来挖挖Pivotal和CNCF这两个组织,能更好的了解为什么会提出原生,未来云原生会走向何处。
Pivotal主要提供PaaS云原生应用开发平台及服务,帮助企业客户采用敏捷软件开发方法论,从而提高软件开发人员工作效率、减少运维成本,实现数字化转型、IT创新,并最终实现业务创新。Pivotal掌握着很多开源软件的核心技术。比如,开源PaaS平台Cloud Foundry和Springboot/cloud框架、数据仓库Greenplum等,Pivotal都是主要的技术贡献者。Pivotal是提供基于云技术的应用开发平台和服务的解决方案型科技公司,所以将DevOps、持续交付、微服务、容器定义为云原生的重点技术,目的是为企业提供完整的数字化转型技术和服务。全球虚拟化解决方案提供商VMware在2019年27亿美元收购了Pivotal,希望从纯粹的虚拟机公司转变为可以在任何地方管理基础设施的云计算本地供应商。
CNCF的目的不一样,他成立的目的是希望打破云巨头的垄断,实际上是希望通过容器和k8s,将提供底层资源的云服务商变得无差异化。以k8s为入口抓住用户,忽略底层的云厂商和操作系统。这主要因为CNCF基金会在当时的核心拳头软件就是k8s,因此在概念定义上主要是围绕着容器编排建立起来的生态。这也是为什么我们感觉CNCF 定义云原生的时候就是在说容器生态。
Docker公司在2015年推出了自己的集群管理服务编排工具swarm,和谷歌主导、红帽支持的kubernetes社区直接冲突。经过2年的竞争,Docker swarm彻底落败,Kubernetes社区成为开源项目中热度最高的项目。自此,全球400余家顶级科技公司都加入到CNCF,k8s一统江湖。
目前CNCF铂金会员企业19家:
黄金会员企业20家:
白银会员企业424家(数量太多就不放图了)。
可以看出CNCF对云原生的定义,除了云原生技术和应用之外,还包括建立一个统一中立的开源云生态,这也算CNCF最初成立的宗旨之一吧。不过我觉得不这么简单,至于原因,请往后看。
---------------分割线---------------
到底什么是云原生?
通过云原生的演进历史,我们已经基本了解了什么是云原生。云原生包括两个方面,一个是云原生技术,另一个是云原生应用。利用云原生技术构建云原生应用,这是提出云原生的直接目的。
云原生技术包括什么?
CNCF的云原生定义以k8s为主,包含了容器、服务网格、微服务、不可变基础设施和声明式 API 等代表性技术,而Pivotal将DevOps、持续交付、微服务、容器定义为云原生的重点技术。
我个人将云原生技术归为DevOps、微服务、容器三剑客,对应了软件的计划、需求、设计、开发、部署以及运维运营全生命周期流程,可以更清晰的理解云原生技术。目前各大云厂商的云端工具平台也基本是按照这三个主要的技术服务来推出的,如华为的DevOps云平台DevCloud、容器云管理平台CCE、微服务管理平台CSE,以及阿里的云效、ACK、ASM等。还有一些细类的服务没有详细列出来,包括容器镜像服务、Serverless等,都可以理解为云原生的技术平台体系。
云原生技术有什么好处?
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用,借助平台的全面自动化能力,跨多云构建微服务,持续交付部署业务生产系统。
DevOps 理念提倡开发、测试、运维之间的高度协同,从而在完成高频率部署的同时,提高生产环境的可靠性、稳定性、弹性以及安全性,这在很大程度上消除了频繁发布的风险。微服务架构使复杂应用的持续交付成为可能,服务拆分是多个业务团队并行开发的基础,微服务把同一业务的人员汇聚在一起,进一步加速了开发效率。容器技术很好的解决了应用移植过程的环境一致性问题,使微服务实现快速弹性的部署。
为什么火起来了呢?我认为主要原因有两个:一是如上所述,云原生技术对企业确实有各方面的好处,提升交付的质量和效率,可以对市场反馈有更快的响应,所以企业有内在的源动力。另外一个重要原因是云厂商和技术联盟的推动。云原生释放了更大的云计算服务能力,存在巨大的市场空间,成了大厂们的必争之地。。
理解了云原生技术,再来看看云原生应用。
云原生应用是什么样的?
云原生应用是可弹性扩展的,具备高容错性、易管理和便于观察的松耦合系统。细化到具体细节,云原生应用可以通过“12元素“很好的描述。针对云原生应用开发的最佳实践原则“12-Factor“,由Heroku创始人AdamWiggins首次提出并开源。它定义了一个优雅的互联网应用在设计过程中,需要遵循的一些基本原则。
“12元素“的细节内容非常多,不是一两句话可以说清楚,这里边就不展开讨论了。虽然相对复杂,但是对于落地云原生应用是非常有指导意义的,后续找篇文章单独详细介绍。
基于DevOps、微服务、容器等云原生技术构建,基于“12元素“设计的云原生应用和传统应用有哪些区别呢?我们为什么要落地云原生应用?
云原生应用 |
传统企业应用 |
可预测性 |
不可预测性 传统的应用程序无法实现在云原生平台上运行的好处,因为每个应用程序的架构和开发方式都是独特的。通常需要更长的时间来构建和批量发布,只能逐步扩展,并假定依赖的服务具有高可用性。 |
操作系统抽象 云原生架构允许开发人员将平台作为底层基础设施依赖的抽象,只需要使用平台提供的功能和服务,而忽略底层的实现细节。团队关注的不再是操作系统的配置、补丁和维护,而是他们自己的软件。 |
操作系统依赖 传统的应用程序体系结构允许开发人员在应用程序和底层操作系统、硬件、存储和后备服务之间建立紧密的依赖关系。这些依赖关系使得跨新基础设施迁移和扩展应用程序变得复杂且有风险。 |
精益的资源 云原生应用程序平台提供自动化的基础设施的配置,在部署时根据应用程序的需求动态地分配资源。构建在云原生运行环境,可以优化应用程序生命周期管理,以最小化的停机时间从故障中恢复。 |
浪费的资源 传统的IT为应用程序设计一个专用的、自定义的基础设施解决方案,延迟应用程序的部署。这种解决方案通常是基于最坏情况的容量估计而过于庞大,几乎没有能力扩展以满足需求。 |
组织融合 云原生简化了DevOps的实现,包括人员、流程和工具的组合,以达到组合更好的协同工作。通过加强开发和运维之间的密切协作,从而快速并平稳地将已完成的应用程序代码发布到生产环境中。 |
部门孤立 传统的IT发布流程是开发人员将应用程序代码提交给运维人员,然后运维人员在生产环境中运行和发布这些代码。组织的优先级优先于客户价值,导致内部冲突,延期交付,以及糟糕的员工士气。 |
持续交付 IT团队一旦准备好,就会发布单独的软件更新。快速发布软件的组织得到了更快的反馈循环,并且能够更有效地响应客户的需求。持续交付与其他相关方法,包括测试驱动开发和持续集成,一起工作得最好。 |
瀑布开发 IT团队定期发布软件,通常间隔几周或几个月。尽管发布的许多组件已经提前准备好了,并且没有依赖关系,也必须等待版本中的其他组件。客户想要的功能被延迟,企业失去赢得客户和增加收入的机会。 |
系统松耦合 微服务体系结构将应用程序分解为小的、松散耦合的、独立的服务。这些服务映射到更小的、独立的开发团队,在不影响其他服务的情况下进行频繁的、独立的更新和发布。 |
系统紧耦合 单体架构将许多不同的服务捆绑在一个部署包中,导致服务之间产生不必要的依赖,并导致开发和部署过程中丧失敏捷性,无法独立的部署、发布更新、重启。 |
自动化扩展 大规模的基础设施自动化消除了由于人为错误造成的停机时间,在任何规模的部署中始终如一地应用相同的规则集。云原生是建立在传统面向系统虚拟化的编排管理之上的自动化,一个完全的云原生架构是自动化的。 |
手动化扩展 手工基础设施包括手工编写和管理服务器、网络和存储配置。在大规模复杂的操作中,操作人员在诊断问题时很慢,而且很容易无法正确地大规模实现。手工制作的自动化脚本有可能将人为错误硬编码到基础设施中。 |
恢复迅速 容器的运行环境和编排管理是在虚拟机之上提供动态的的虚拟化层,动态地管理跨虚拟机集群的容器,在发生应用程序或基础设施故障时可以提供弹性伸缩和恢复/重启。 |
恢复缓慢 基于虚拟机的基础设施相对于基于微服务的应用程序来说,是缓慢而低效的。因为单个虚拟机启动/关闭的速度很慢,并且在部署应用程序代码之前就会带来巨大的开销。 |
---------------分割线---------------
云原生在的落地现状和未来?
现状:
目前国内的大型科技企业和云厂商对应用云原生技术的态度更积极和开放,他们具备强大的资金、技术和人才,对新技术应用和推广意愿更强,从DevOps到容器、微服务等云原生技术,都在全面实践落地和布道;而中小型企业由于业务面窄、业务较少,现在还没有非常大的转型压力。他们更多的是在尝试基于容器的云原生技术构建应用系统,发挥云计算的弹性伸缩和按需使用的优势来降低成本,提升效率。
下边针对云原生的重要技术介绍下对应的落地情况:
1、DevOps落地困难重重
具体分析参见我之前的三部曲文章
2、容器和编排工具(k8s)使用广泛
调查问卷显示,近87%的企业人员开始使用或者尝试容器相关技术。容器化带给客户的好处是最直接的,像IaaS云资源一样,也是最刚需的。
《2019云原生中国落地情况白皮书》
3、服务网格(Service Mesh)势头火
服务网格提供的包括服务发现、负载均衡、身份鉴定、授权、支持熔断器模式等在内的一系列功能,能帮助企业更低成本的解决因采用微服务架构产生的服务治理问题。非侵入式的方式,企业接受度更高。
《2019云原生中国落地情况白皮书》
4、微服务落地成本在降低
在容器大面积普及后,微服务落地成本降低了很多,大量企业在尝试将单体应用重构为微服务架构,另外由于Service Mesh技术的兴起,对微服务的治理和监控成本更低,进一步降低了微服务落地的难度。
未来:
先来看张图,以携程网和航空公司的关系为例,来聊聊未来云原生技术平台和云厂商的关系。
我们现在不管旅行还是出差,大多数人订票首先想到的是携程网或者其他订票平台,而不是一家一家的去航空公司找对应时间的航班,再对比不同航空公司的价格、服务等等。假设我要从大连飞北京,那么能在我目标可以达成的基础上,我会考虑哪家的服务更好。我并不会特别在意是哪家航空公司为我提供服务,我的关注点是能在最短的时间找到价格合适、服务好的航班。门户类服务平台擅长的就是集众多服务厂商到统一的服务平台,来更好的满足用户的需求。通过屏蔽掉用户不关系的实现细节,减少用户时间的浪费,为用户提供满意的价格、服务以及用户体验。
现在,云原生技术虽然仍在落地实践阶段,但是未来,云原生平台也将作为云用户的服务平台入口,而屏蔽掉是哪家云厂商提供的IaaS资源,甚至可以单一平台跨多云部署(k8s已经在边缘计算领域有了很好的尝试)。为什么全球400多家科技巨头加入CNCF,为什么VMware要收购Pivotal?这么看是不是清晰了。掌握云原生技术的话语权,就掌握了云原生平台的主动权和控制权。云原生平台覆盖了软件产品开发的全生命周期,未来将作为云服务的入口,所以将是云厂商的激烈战场。
谁占领了云原生市场,谁就赢得了云时代的未来。
来源:荣信er(ID:CloudNativeClub)
以上是关于云原生,你真的懂了么?的主要内容,如果未能解决你的问题,请参考以下文章