2015年2月的纽约周边,在皑皑白雪覆盖下的Woodlock避暑山庄中,我参加了Google内部的首次“Cloud Summit”,各条业务线的专家齐聚一堂,激昂又谨慎地头脑风暴着Google做云的战略和战术。
此次峰会的同行人包括后来的Kubernetes创始人Joe Beta和Craig McLuckie,两人联手另一位同事Brendan Burns创立了Heptio,这家公司据传在两年内以数亿美金的价格被VMWare收购。会议当时,Craig McLuckie还是新成立的谷歌云部门产品经理,而Joe Beda则刚写好内部Kubernetes设计文档,在峰会期间积极布道和争取资源。
虽然不乏怀疑之声和对其商业化前景的担忧,多位Google副总裁和技术总监笃定Kuberentes可以影响行业开发者的心智,从而成为Google后发做云获取差异化竞争的利器,成为弯道超车的机会。
就这样,今天已经家喻户晓的Kubernetes在这场会议上以“Project7”的乳名呱呱坠地,从而拉开了云原生行业大幕。事实证明,Kubernetes的应用标准化能力极大降低了用户应用在不同云间迁移的成本。
在此七年后,云原生已不仅是容器、微服务、DevOps等技术名词的集合,而是以形容词的方式冠名了整个IT Stack,如云原生网络、云原生存储、云原生基础设施、云原生网关、云原生数据库、云原生数仓、云原生安全、云原生消息队列、云原生研发效能平台等等。“云原生+X”已成为了技术界潮流。
中国信通院在去年中发布了《云计算白皮书》,其中显示,以微服务、中间件、数据库为代表的公有云PaaS市场在2020年突破100亿规模,实现同比145.3%的增速。此外,云原生在垂直行业的落地加速,在金融、制造、服务业、政务等行业的数字化转型上带动效应明显。
而如果放眼全球,CNCF也发布了相关调查数据。2021年,全世界92%的被调研企业在生产中使用了容器;云原生开发者数量则从2019年第二季度的180万增长到650万。其中,60%的后端开发者都会应用容器技术,可谓“无容器、不后端”。
数据向好,但在这些不断增长的数字背后,实际的助推力来自于哪里?我个人认为,可以用三个“A”来概括,即可以让任意应用类型(Any workload)在任意环境(Anywhere)不间断地运行和迭代(Anytime)。
2021年,云原生发展的首要特征即云原生化应用可以在任何载体、任何环境,以及任何架构下运行,可谓“吞噬”一切。
首先,是任何载体。
在2015年之前,“容器”一词几乎可以同“Docker”划等号。Docker公司、Docker镜像、Docker容器、Docker生态等等,“Docker”一词被赋予了过多含义。但随着OCI(Oracle Cloud Infrastructure)和CRI(Container Runtime Interface)标准的出现和推广,如今开发者可以有更多样的载体来运行和使用容器(如Kata、gVisor等),或通过Kubernetes使用不同的CRI实现(如containerd、CRI-O等)。事实上,Kata在官方的用户调研中统计到,已有19%的被访企业在使用Katal,其中包括字节跳动、华为、百度等公司。
其次,是任何系统。
今天,云原生应用甚至不局限于容器化的应用。KubeVirt项目使得虚拟机上的应用同样可以被Kubernetes进行自动化的编排和管理。2021年,KubeVirt功能不断推陈出新,可将虚拟化应用与Istio服务网格实现融合,支持IntelvGPU。同样,容器也可运行在Linux、Windows等不同操作系统上,以及x86和ARM多种架构上。随着信创浪潮的推广,云原生更是可以运行在麒麟、鲲鹏、飞腾、海光等多种国产操作系统及国产芯片之上。
最后,是任何环境。
2021年出现在各大云计算报告中的高频词绝对少不了“多云”“分布式云”“云网融合”,以及“混合云”。根据Flexera发布的《2021 State of the Cloud Report》,其中,78%的企业同时使用公有云和私有云环境。中国信通院发布的《云计算白皮书(2021)》也指出,中国53.6%的企业在使用混合云,同时随着5G力度的加大,2020年已经应用和计划应用边缘云的企业比例占到4.9%和53.8%。相对应的,KubeEdge、OpenYurt等边缘容器项目和基于CDN(Content Delivery Network)的智能边缘节点也在持续发展的同时被云原生平台所融合。
2021年6月,由工信部中国信通院和开源产业联盟主办的2021“云边协同大会”上,公布了国内首个“分布式云与云边协同标准体系”,不仅吸引了很多国内云厂商的加入,也同时发布了多云容器产品,如AWS的EKS Anywhere和阿里云的ACK Anywhere。
诚然,“多云”趋势让用户有了更多选择的同时,也让云厂商之间的竞争日趋白热化。2021年7月,美国国防部的JEDI大单由微软独享变成了计划由微软与亚马逊共存。可见,“多云”某种程度也变成了“多云供应商”的一个代名词。“多云”当然也给更多的行业后起之秀更多切入市场的机会,例如字节跳动旗下的企业服务板块火山引擎也于年底正式发布完整的云产品矩阵,并通过veCompass云原生产品主打多云开放理念。
2021年,“云原生+”的产业生态中涌现出数量繁多的项目和产品,从安全、可观测、敏捷三个维度上进一步保证了云原生化的业务能够实时更新、长久运行。
不间断的安全保障
云化和云原生化的加速既带来了新的攻击面(Attack Surface),又开启了新的防御维度。除了安全容器、镜像扫描、微隔离等单点技术持续演化,2021年云原生安全的一个新热点就是“不间断(Anytime)”的安全保障,而实现这一目标的主要技术趋势就是通过DevSecOps(Development、Security、Operations的缩写)带来的自动化,即将安全措施自动地植入在软件开发的各个生命周期中。
此外,2021年,几家云厂商也通过收购加速在云原生安全领域的布局,如1月Redhat宣布收购云原生安全公司StackRox,以及7月火山引擎收购云原生安全公司氢盾科技。值得警醒的是,在“云原生+”的时代,云原生安全和防护意识仅仅开始萌芽,根据Aqua Security的年度报告[1],高达97%的受访企业并未对云原生安全引起足够的重视,而意识到面临zero-day exploit风险的企业也仅占18%。
事实上,2021年12月发生的Log4Shell漏洞在整个云原生用户群体中也引发了一场“地震”,再加上软件供应链攻击(Software Supply Chain Attacks),如SolarWinds和Codecov,更昭示着我们需要用更加云原生化的自动化安全机制,将安全“左移”,即不间断地渗透到软件开发、测试、发布的流水线中。
不间断的可观测
云原生为我们带来敏捷便利的同时,也带来了更多的技术栈和分布式系统的复杂性。例如微服务技术和服务网格,一方面带来灵活可扩展的架构,另一方面却让故障定位和端对端监控变得更加黑盒,处理不好反而会束缚生产力。
为了保障云原生化业务系统的不间断运行,2021年云原生领域冉冉升起的一个救星——全栈可观测(Full-Stack Observability)。不同于传统的监控,全栈可观测的“观测”融合了指标(Metrics)、日志(Logs)、链路追踪(Tracing)等多维度数据,而“全栈”则体现在从应用、到中间件、到容器平台,再到基础设施和网络实现统一的观测。可观测领域中的开源工具在2021年不断完善和涌现,如Prometheu、 Jaeger、Fluentd、Thanos、 Cortex、OpenTelemetry、Pixie等。
此外,Linux eBPF技术正在补充经典的cAdvisor、Atop、 Ganglia等工具,便于用户获得更多维度(包括磁盘和网络相关)的监控指标。意识到eBPF的潜力,2021年8月,eBPF基金会在Google、Microsoft、Isovalent、Facebook和Netflix 的支持下正式成立,进一步推动该技术和可观测性的发展,以及商业化落地。而作为在可观测领域的翘楚之一,Datadog也在同年10月开源了其网络堆栈中的核心组件Cilium,成为CNCF的孵化项目。此举会进一步推动网络层的可观测性在业内标准的统一。
不间断的敏捷开发
“云原生+”时代的Anytime,不仅指已经上线的业务能不间断运行,同时还包括通过敏捷开发让软件的迭代和发布可以“Anytime”。
2021年,我们所熟悉的持续集成、持续发布(CI/CD)理念被GitOps实践推向了新的高度。简单来说,GitOps是CI/CD的一种实现,它奉行以开发者体验为核心,利用Git仓库来存放对于业务系统理想状态的声明式描述(Declarative Description)。GitOps进而通过自动化引擎来让当前的业务系统状态不断逼近直至最终达到所声明的理想状态。
当我们想要部署或更新某个应用时,只需在Git中更新对应的声明文件即可,自动化引擎则会做相应的更改让实际的业务系统状态匹配所声明的状态。如此一来,开发者所熟悉的“老朋友”Git仓库变成了同时处理源代码和系统配置的单一信息源。作为CNCF“App Delivery SIG”的分舵,OpenGitOps社区也应运而生,包含亚马逊、微软、Redhat等首批会员,并在2021年召开了专题会议。
此外,2021年10月,DevOps领头羊和全球第二大开源代码托管平台GitLab以近150亿美金的市值在纳斯达克上市,同年在中国推出了合资公司极狐科技,将进一步加速GitOps的商业化落地。
在Kubernetes成就今天的“Any workload”之前,也经历过“不被期待”的时光。但在Google的技术专家们看来,它可以很好地根除传统的“IaaS vs PaaS”产品在可管理性和灵活性上面临的两难境地:即IaaS虽给用户最大灵活性,但将众多管理负担甩在了用户肩上,而PaaS产品如当时的“Google App Engine”,虽有极强的自我管理能力,但给用户的灵活配置空间却非常有限,Kubernetes则可以实现可管理性和灵活性兼而有之。
如今,Kubernetes正在成为能承载任意应用形态和负载类型的云操作系统。而自最初仅支持无状态的应用至今,Kubernetes对有状态(Stateful)应用的支持也有了长足发展。
从市场需求侧来看,“云原生+”时代的用户更关注云原生对于“热门技术”的承载能力。根据中国软件网、海比研究院和中国软件行业协会发表的《2021年中国PaaS市场研究报告》,PaaS平台是否集成了人工智能、物联网、区块链等热门技术,以提升其所构建应用的先进性,是厂商和用户最关心的核心能力。
盘点完过去,我们关于“云原生+”的未来走势再做一个简单而大胆的猜想。
从云操作系统到云操作界面
将Kubernetes或云原生比做“云操作系统”或“DCOS”的比喻已经在行业里耳熟能详,而笔者认为更贴切的比喻是云原生会成为用户上云、用云的“操作界面”。从操作系统到操作界面,是聚焦资源还是聚焦用户的理念差别。“云操作系统”更聚焦在对底层异构硬件和环境的管理,以及对基础设施资源的管理。而“云操作界面”则体现了用户上云的入口是云原生,用户操作云的接口是云原生,用户对云的感知界面是云原生,甚至未来用户的云资源申请单位也是云原生容器(而非云服务器)。
从管理容器到管理业务
今天大多数的云原生用户还时刻会感受到“容器”的存在和它的操作复杂性,而当笔者在Google工作时,除了我所在的基础设施团队,大部分业务开发团队是对容器完全无感的。正所谓“无声胜有声”“心中有剑、手中无剑”,云原生的最高境界或许就是让业务对云原生无感,实现从容器管理到业务管理的跨越,即让用户只聚焦在业务逻辑上,无需关心代码封装的格式、运行的载体、编排的平台、分布式架构的八股文格式等。近年来的Serverless、Backend as a Service(BaaS)、开放应用模型(OAM,Open Application Model)等则是很好的实现路径。
从自动化到自治化
Kubernetes利用声明式配置(Declarative Configuration)和控制闭环(Control Loop),很好地实现了将当前系统状态(Actual State)到用户所声明的理想系统状态(Desired State)的自动化部署和调整。然而,这一自动化并非银弹,繁琐的配置和强依赖于人为经验的参数取值,经常造成“如果配置方向是错的,更多的自动化和敏捷反而是灾难”的不良结果。而“自治”相比之下则可以让系统自我管理、自我配置,相比于“自动”有如下核心区别:1)自动化是基于规则配置的,依赖人工干预,而自治化则可以基于模型自我学习和管理;2)自动化依赖人的领域经验给出合适的参数配置(如资源Quota、报警阀值、弹性伸缩触发点等),而自治化可以基于数据进行智能和动态优化。
从百搭到定制
随着开源技术的成熟和商业产品的涌现,通用的云原生技术已经从奢侈品变为平价货。然而,随着云原生技术步入与业务结合的深水区,我们越发感受到通用技术与个性化业务在特点上的差距。类似aPaaS(application Platform as a Service )的理念,通过灵活可配置的轻量定制能力,解决规模化和个性化之间的矛盾。
迈入2022年,云原生早已不仅仅是容器、Kubernetes、微服务、CI/CD,而是基于这些核心技术在“东西南北”各个方向的全栈延伸。以字节跳动为例,向“南”(向下),云原生最佳实践与基础设施深度融合,通过智能网卡卸载、计算存储分离、批流一体、离在线混部等技术,大幅提升系统性能和灵活性。同时,通过高性能RPC、海量微服务治理、灵活的Serverless等技术,构造支持海量微服务的服务平台层。向“北”(向上),利用云原生支持整个研发体系,让软件开发、交付、运行和运维的全生命周期变得更加高效。而“东西”向(横向),云原生也拉通了安全体系和SRE体系。
在云计算的历史潮流下,企业应关注的是如何实现“应用现代化”,因为在今天,软件、应用和企业IT方式都发生了多维度的变化。这些变化主要包括:应用架构在演化,从传统的单体应用演化为微服务架构;软件开发方式的变化,从瀑布开发到敏捷开发,再到开发运维一体化;行业应用场景趋于丰富,从经典的互联网场景渗透到各垂直领域,如车联网、电商、生物信息等;应用越来越智能,背后的算法在不断升华。
企业如果不能将应用现代化,那么即使拥有云计算这一信息高速公路,也仿佛是在高速公路上跑牛车,传统软件无法享受到云计算带来的技术红利。而“云原生+”时代的到来,提供了崭新的路径,帮助企业以更低的门槛实现“应用现代化”。
最后,还想给队伍正在庞大中的云原生开发者们一些基于个人经历的寄语。Kubernetes之所以可以顺利孵化,离不开Google内部20%贡献者的“众人拾柴火焰高”(Google 20% time机制允许Google员工可以用20%的工作时间参与自己感兴趣的任何项目,包括Kubernetes)。所以,即使你现在正在做的项目推进困难,甚至进而引发信心不足。不妨更换思维的角度,每天用20%的时间思考,如果有机会重新开发一个新项目,你想怎么开始、如何架构、如何推进?在不断思考的过程中,或许不仅原本项目的掣肘在哪里会豁然开朗,同时发掘出像“Kubernetes”这样有价值的项目也是有可能的。
相关参考链接:
作者介绍
张鑫
火山引擎副总经理,原才云科技CEO。获得卡内基梅隆大学(CMU)计算机博士学位,期间在分布式系统和网络安全领域国际顶会上发表学术论文数十篇,被引上千次。曾任职美国谷歌资深软件工程师,最早参与谷歌公有云的产品设计与研发,6次获得谷歌副总裁和总监颁发的即时奖励。曾获“清华大学优秀毕业生”“海归科技创业者100人”等称号。
《新程序员003》正式上市,50余位技术专家共同创作,云原生和数字化的开发者们的一本技术精选图书。内容既有发展趋势及方法论结构,华为、阿里、字节跳动、网易、快手、微软、亚马逊、英特尔、西门子、施耐德等30多家知名公司云原生和数字化一手实战经验!