容器、微服务、云原生…都是目前技术圈内讨论热度非常高的话题,这些技术之间到底存在什么关系?又该如何理解呢?
近两年,云原生成为云计算领域的关注焦点,这种热度多少与应用不断上云及 Kubernetes(容器编排引擎)的发展有关。云原生的应用部署在云上可以充分发挥云计算的价值,使得开发者可以更专注于业务逻辑的开发;其次,Kubernetes 的发展提供了云原生基础设施所需的许多应用平台功能,Kubernetes 和其生态支撑了云原生应用的运行环境和应用生命周期的管理。
然而,微服务、容器和云原生之间的联系,目前的发展阶段以及会如何影响应用开发方式等问题一直围绕着传统企业且缺乏很好的系统理解,InfoQ 记者有幸在 InfoQ 主办的 QCon 2019 全球软件开发大会 上,采访到了华为云布道师周晖,由他亲自讲解 PaaS 领域的关键技术和发展趋势。
以下是视频采访的全部内容,为方便读者查看,视频下方也附上了文字内容。
InfoQ:非常感谢您参加 QCon 2019 的视频采访,首先请您做一下简单的自我介绍。
周晖:我叫周晖,是华为云企业应用服务领域的布道师。1999 年进入 IBM,就职于电子商务部;从 2003 年开始到现在一直从事架构师相关工作。我在职业生涯中我会选择于有较长生命力能持续发展的技术领域;2004 年选择 SOA 领域,这个领域持续了 10 多年,2009 年开始从事云计算相关工作,尤其是 PaaS 领域,主导或参加了多个公有、私有 PaaS 云建设。PaaS 发展虽然有快 10 年了,我认为未来十年,PaaS 还将持续发展和并继续是一个充满活力的技术领域。PaaS 的每个阶段都不一样,最一开始是混沌状态,业界各个厂商说的 PaaS 都不一样,甚至 PaaS 包括哪些功能都不一样,各家厂商的 PaaS 产品也是差异比较大。从 15/16 年开始,大家说的 PaaS 基本统一到容器和编排领域了,PaaS 得到了新生,进入了全新的发展阶段。
InfoQ:作为华为云企业应用服务领域布道师,请简单介绍下华为云在 PaaS 层面主要提供哪些能力?优势和差异性主要体现在哪些方面?
周晖:华为云企业应用服务以云原生和企业数字化转型为整体愿景。数字化转型适合传统企业的应用上云,云原生是数字化转型的一种方式。PaaS 能力上,华为云提供云原生平台,包括容器、微服务、中间件、智能边缘平台、区块链服务等。
对传统企业而言,有些应用目前还部署在私有云或是 IDC 中,暂时没有上公有云,如果这些应用数据需要与云上应用进行集成,华为云提供了相应的解决方案 ----ROMA(罗马) 服务,通过罗马实现云上与云下应用和数据集成,还有物理设备的集成。
总体来说,华为云企业应用服务方面具备几大比较明显的基因。首先,华为一直在从事 To B 领域相关工作,对企业客户的 IT 架构和技术需求非常了解,这种基因也被华为云很好得继承和发扬;其次,华为自身也经历了整个数字化转型流程,积累了丰富的传统应用上云、云原生改造等经验,现在将这个过程积累的经验和能力通过华为云企业应用服务传递给企业客户;第三,华为云更加适应国内客户需求,可以客户为中心敏捷响应并实现用户需求。
华为的 PaaS 产品大多基于开源,是一个开放的平台,和开源生态高度兼容。在开源方面,华为也积极参与社区建设,贡献代码,华为在 K8s 的开源代码贡献全球排名第三。通过社区积极贡献源代码,华为云也在 K8s 社区形成了相当的影响力。
InfoQ:在云平台 PaaS 能力的构建中,您认为哪些因素需要着重考虑,华为云又是如何做的呢?
周晖:在整个建设过程中,我认为如下四大因素比较关键:
1、技术方向的选择。PaaS 是一个相对较新的领域,处于不断的技术迭代过程中。目前业界基本确定 PaaS 是一个以容器和编排为核心的技术领域,但容器以及容器编排技术最初的发展其实经历了很多阶段。对于容器编排 (Kubernetes Orchestration),是个容易被误解的词语,也可以说是翻译的不精确导致的, 其在计算机中的原意指的是“复杂计算机系统、中间件 (middleware) 和业务的自动化的安排、协调和管理“。容器编排给人直观的感觉就是容器调度,其实,K8s 是自动部署、扩展和管理容器化应用程序,是应用容器的运行管理平台,也许翻译成 " 编配 " 会更准确。对于容器编排(我们还是使用符合平时的习惯说法),从 Cloud Founsry、Mesos、Docker Swarm 到 Kubernetes,这之中有很多选择,但业界最终确定以 Kubernetes 为事实标准的 PaaS 平台。如果一开始就选择了正确的发展方向,可以避免后续更正耗费的时间,对整个 PaaS 产品的连续性包括技术积累都有帮助。但如果一开始由于特定的情况选择了 Mesos 或是 Docker Swarm,还希望随着 PaaS 产业的方向发展,那么及时切换到 K8s 是更好的选择,虽然在技术上的 " 止损 " 的决策不容易做。我在实际的项目中看到不少企业客户从 Mesos 转向 K8s,在互联网企业从早期的 Mesos 转向 K8s 的更是很多。
2、洞察行业发展方向。PaaS 是一个持续发展的领域,各个方面都在不断突破,K8s 到目前为止只有 6 个项目毕业也一定程度上反映了发展趋势,比如目前谈论较多的服务网格技术,从 2017 年开始慢慢变热,今年开始进入生产系统。Kubernetes 也是逐渐成为业界主流。目前,容器、多云、无服务器计算等话题热度较高,这会是未来很重要的潜力发展方向。
3、深入了解市场需求,形成系统的解决方案。一步到位往往是不现实的。目前,大部分传统企业处于数字化转型的不断探索和深入时期,传统企业应用上云是一个过程,有一系列的问题需要解决,比如传统企业的很多应用并不是云原生应用,全部改造为云原生并不现实,如何按不同模式上云、分阶段、分梯度数字化并发挥最大价值是需要慎重考虑的,要兼顾不适合云原生化的应用集成、云上云下应用集成数据集成。在这种需求下,企业需要一些对应的解决方案,华为云通过不断积累已经形成相应的方法论并对外输出。举例来说,微服务是云原生领域非常核心的部分,将传统应有转向微服务需要很多行业和技术经验积累,华为云将此形成一套方法论对外提供以推动企业数字化转型。
4、融入开源生态,PaaS 领域是和开源密切相关的,完全自己开发一套是无法和整个业界的生态去竞争的,最典型的全球最大公有云厂商,其一开始只提供自己的容器服务,在 2017 年下半年也开始提供 K8s 的容器服务。在华为云的 PaaS 发展过程中,华为积极融入开源生态 ,提供的服务和开源高度兼容,尤其是 Kubernetes 的生态,很多服务都来源于社区,华为云也把自己趟过的坑、功能的创新回馈到社区,比如贡献给 K8s 社区的智能边缘计算项目 KubeEdge,保持整个产品与社区的高度兼容,充分利用开源生态的力量。
InfoQ:在构建整个 PaaS 能力的过程中,华为云主要遇到了哪些难点?又是如何解决的呢?
周晖:回顾整个建设过程,我觉得主要有两点比较关键,一是战略方向的把控和调整,华为云起初在 K8s 还没有推出的时候,也尝试了 Cloud Foundry 的 PaaS 开源平台,并对其有所贡献,在 K8s 推出以后,华为云及时调整从战略上选择了 K8s,并积极贡献,成为 K8s 的初创白金会员。
二是 PaaS 平台本身需要支持敏捷架构和方法,华为云企业应用服务由众多服务组成,互相独立发展并形成松耦合,华为云按照敏捷的方法不断尝试,比如在 K8s 容器服务方面在过去三年推出了十多项大颗粒度功能创新。我们也根据市场需求不断调整,对市场需求较大的服务加大投入力度,形成差异性的竞争优势。
InfoQ:作为本届大会《AI 与云原生实践(解决方案专场)》专场的出品人,您本人也主要关注云原生领域,您可以简单介绍一下,华为云通过什么样的方式将云原生能力对外输出?
周晖:云原生是一个不断发展的概念。2015 年,云原生由 Pivotal 提出,它第一次系统的总结了云原生的如下几个要素:
同年,CNCF 也定义了云原生:
2018 年,CNCF 对此进行了重新定位:
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.
云原生技术帮助组织在公有云、私有云和混合云等现代动态环境中,构建和运行可弹性伸缩的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。—落实到具体的技术
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.
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式普惠,让这些创新为大众所用—强调生态对云原生的重要性,通过生态来普及云原生并推动云原生的发展。
云原生刚刚提出的时候,整个业界对云原生的理解都不太一样,云原生的基本含义是指应用适合于在云上运行,而传统应用不是为云而设计的,很多传统应用如果直接搬上云,不能充分发挥云的价值,比如云的一项很关键的能力是弹性,很多传统应用不支持弹性,虽然云可以让它弹性,但是如果应用是有状态的,通过云弹性让应用弹性,马上就会出现状态部分如何复制如何同步等问题。如果应用做了无状态改造,就可以消除云弹性的应用状态问题,而事实上,无状态也是云原生应用一个关键模式。这意味着应用上云要改造才能充分发挥云的功能和价值,如何改造或是新的应用如何设计能够适合在云上运行,就是云原生的范畴。云原生不只是应用架构模式,更多的是支撑云原生应用的运行环境。目前,业界比较公认的标准就是 CNCF 的最后一次重定义,直接说明云原生的代表技术,比如容器、服务网格、微服务和不可变的基础设施等。此外,该定义也包含了云原生生态、架构、松耦合等概念。
从云原生的定义的演变来看,定义的越来越具体,包括落实到具体的技术,使用的场景是敏捷业务,通过生态来普及。
云原生的发展主要有三大方面:一是微服务架构,包括微服务框架和微服务运行平台,以前的微服务框架,比如 Spring Cloud,需要应用基于框架进行二次开发,如果开发新的微服务应用,可以基于微服务框架直接编写。如果是传统应用改造微服务,需要在代码包中嵌入微服务框架包,带来了一定的改造工作量。2017 年之后,服务网格技术出现并迅速成为热点,因为它解决了应用微服务话需要代码改造的问题,可以让应用直接具备微服务能力,包括微服务治理管控、服务发现等,都可以在容器平台实现,这就避免了开发人员需要用微服务框架对代码进行二次改造,该技术具备很强的生命力,社区热度在持续上升。
经历了一年多的发展,服务网格技术在控制面板和数据面板均取得一定进展,比如 Linkerd、Envoy 和 Istio 等。2018 年底,基本确定 Istio 为主流技术。去年,华为云也已经推出基于 Istio 的服务网格。
二是架构设计和方法论,特别是如何划分微服务,如何设计微服务系统架构。过去几年,对传统应用(或者需求)分解成微服务的问题已经出现相对成熟的解决方案,并逐渐形成系统的方法论,华为云也已经形成相应的方法论并在很多大型客户场景中得以实践。
三是平台,云原生定义落实到具体的技术,包括容器、服务网格等。需要一个平台来运行管理云原生应用,也包括云原生应用生命周期的管理,从开发、构建、镜像打包、部署、运维等。容器编排又有更新的发展,比如多云以及智能边缘计算等。全球公有云的发展速度非常快,所占领的市场越来越高,国外已经形成几大巨头,比如亚马逊、谷歌、微软等,国外客户往往会选择多云部署,为了适应该技术潮流,不少公司都推出相应的多云解决方案,由于 IaaS 层的 API 没有完全统一,因此该层实现多云需要的工作量较大。但是,Kubernetes 已经形成标准 API,通过 K8s 来实现多云就更容易,事实上,市面上也开始有不少基于 K8s 的多云产品,谷歌也于上个月发布了多云产品 Anthos,华为云去年也发布了基于容器的多云产品 MCP,即多云平台,今年已经进入商用。
综上,微服务、容器和多云是云原生里面需要重点关注的领域。此外,基于容器的边缘计算也是云原生里面发展较快的领域,华为云也在重点关注。
以上的技术,华为云通过 PaaS 服务群的方式提供给客户。具体在云原生方面,华为云通过 PaaS 云服务和相关的咨询将云原生能力对外输出
InfoQ:据您了解,云原生目前在国内处于什么样的发展阶段?这一技术的发展主要可以带来哪些变化呢?
周晖:从整个云原生的发展历史来看,云原生与应用密切相关,往往会涉及两方面,一是应用架构和最佳实践,就是让应用适应云上运行,这个已经有比较长的历史。多年以前,Heroku 就已经总结出了 12 要素,主要指云原生编程的基本原则以及平台如何支持这些原则。以日志为例,12 要素要求日志以流式的方式输出,不要写在文件或特定目录下,如果应用日志是标准系统输出,部署在云上,云上系统采集日志会相当简单。如果应用符合这 12 要素会比较适合在云上运行。二是平台本身需要支持云原生。自云原生概念提出以来,一直按照这两大方向持续发展,到今天其核心概念已经经历多轮定义变更,明显过了概念炒作的阶段,比如微服务,已经成熟应用了好几年了。
当然,云原生是一个相对较大的话题,还在往纵深发展,其最新技术发展的推动力很大是来自于 CNCF 基金会,CNCF 这个云原生计算基金会,也算是名副其实。过去一年已经有 6 大项目从该基金会毕业,从运营平台到日志监控再到服务网格,受益于这种开源技术和其生态的的发展,国内外基本在云原生领域保持同步增长。
如果分行业来看,大部分互联网公司一开始就使用公有云或者私有云,早已经是云原生应用,六七年前很多互联网企业就是云原生应用,大部分都做到微服务化,只不过当初还没有明确提出云原生的概念,也没有系统总结云原生的要素和定义等。因此从互联网公司的技术发展视角来看,云原生早已进入实践阶段,应当是已经成熟的技术,只是在不断提炼和迭代,某些方面还在颠覆性的创新发展,比如服务网格;对传统企业而言,目前可能正处于导入云原生概念的阶段,ToB 相对 ToC 的引进云原生速度相对较慢,但也处于逐步发展的过程,因为 To B 的企业业务的敏捷性需求不如 To C 的业务那么强烈,而云原生在解决有敏捷性业务需求的应用上有更大优势。
不同的行业,云原生处于不同的阶段。
云原生的技术还在持续发展,而且有的时候还会有大的创新性突破,如前面提到的服务网格技术。随着云原生应用的越来越广广泛,云原生的核心技术,如容器编排、微服务会越来越企业级,也即功能会越来越丰富,满足各种细分需求,同时可用性、安全性等方面也会更进一步发展。
目前的趋势是越来越多的应用在转向云原生,无论是新的应用直接采用云原生计算,还是老的应用改造为云原生。云原生会带来应用架构的变化,应用开发模式的变化,应用运维模式的变化。应用架构的变化是微服务、容器化运行、基于 PaaS 平台运行。而应用开发模式,一方面是微服务的小团队模式,降低交流复杂度,另外是 DevOps 和持续集成持续交付。而在应用运维方面,会大规模的采用 PaaS 平台来运行、运维云原生应用。云原生应用的很多功能是需要平台来支撑的,比如弹性调度、故障恢复、可观察性等,通过平台可以大大提升应用运维的自动化程度。云原生也会深刻的改变运维模式,是的 DevOps 容易实现。
InfoQ:未来,您认为云原生的发展趋势会是什么?华为云企业应用服务在 PaaS 层面接下来的重点方向是什么?
周晖:云原生的发展很大程度上得益于 CNCF 的推动, Kubernetes 从 2014 年发布到 2018 年在 CNCF 毕业,已经形成一个十分强大且完整的生态,而且这个生态的项目会毕业的越来越多,让整体生态越来越成熟,从而推动云原生技术的更趋成熟,这会是云原生领域的主流趋势。如果说几年前云原生还是尝鲜,以后云原生是在企业应用中不断出彩,这也是一种趋势。
此外,CNCF 社区也在不遗余力地进行社区推广,今年 5 月份由 CNCF 在巴塞罗那主办的 KubeCon 大会,预计会有超过 1 万人参加,这也说明 KubeCon 在业界的热度和被接受程度,华为云也将在 5 月份的巴塞罗那 KubeCon 和 6 月份的 KubeCon 上海站进行相关议题分享。
华为云的 PaaS 在顺应业界发展潮流,去年就已推出以容器为核心的完整解决方案,包括中间件、区块链、微服务、多云和服务网格等,今年有增加了容器多云、基于容器的边缘计算等。从企业上云的实际需求出发,华为云推出了一套完整的数字化转型解决方案,包括云原生平台,和传统应用通过华为云 ROMA 集成平台和云原生应用打通,企业集成服务 ROMA 又包括传统企业应用集成、云上云下集成、数据集成、设备集成、B2B 集成等,这也是目前业界唯一能够支持应用集成、数据集成、设备集成、云上云下集成的平台。