编委会 编写单位: 北京通明湖信息城发展有限公司中国信息通信研究院 神州数码集团股份有限公司 通明智云(北京)科技有限公司 编写组成员: 北京通明湖信息城发展有限公司:曹军威、明阳阳、袁仲达中国信息通信研究院:陈屹力、杜岚、蒋啸天通明湖云和信创研究院:李刚、张红忠、梅江 通明智云(北京)科技有限公司:吴若松、单雷、潘黎强、廖猛蛟、陈毅东 版权声明 本报告版权属于北京通明湖信息城发展有限公司、中国信息通信研究院、神州数码集团股份有限公司、通明智云(北京)科技有限公司,并受法律保护。转载、摘编或利用其他方式使用本报告文字或者观点的,应注明来源。违反上述声明者,编者将追究相关法律责任。 目录 一、云原生技术发展概要1 (一)云原生技术发展综述2 (二)应用引擎技术介绍3 (三)云原生应用引擎概述6 二、云原生应用引擎-数云时代的关键技术组件11 (一)云原生技术图谱下的应用引擎12 (二)主流的云原生应用引擎介绍14 (三)云原生应用引擎的衍生产品形态22 (四)云原生产业图谱下的应用引擎28 (五)云原生应用引擎面临的挑战39 三、云原生应用引擎行业应用场景和价值30 (一)金融行业31 (二)电信行业37 四、云原生应用引擎展望45 (一)无服务器架构——云原生应用引擎技术新路线46 (二)应用引擎—中国云原生技术创新突破口47 (三)中国云原生应用引擎生态建设展望48 附录:国内云原生应用引擎产品介绍49 (一)通明智云-NJet应用引擎50 (二)百度-BFE.53 (三)阿里-Higress.55 (四)阿里MOSN.57 (一)云原生技术发展综述 经过十几年的发展,云计算作为数字化转型的重要基础设施,已经由“面向云迁移应用”的阶段演进到“面向云构建应用”的阶段,即由“以资源为中心”演进到“以应用为中心”的云原生基础设施阶段。云原生基础设施利用智能的调度和运维系统来高效管理更为丰富的应用,为用户带来了多方面的革新。在云原生的基础设施中,支撑应用的所有能力都已经API化、标准化,如存储、网络、路由、部署,这种架构使得应用能够解除对特定的云服务商的依赖,快速分发到不同的公有云,或公有和私有云混合的复杂云环境。尤其是硬件资源的API化,使得硬件可以接受上层的调度编排,为应用及时提供相关的资源需求。这种软硬协同的基础设施架构在为应用提供更好性能的同时,也对隔离性、安全性等多方面能力进行了加强。 云原生架构具有如下典型技术特征: 采用轻量级的容器。云原生应用程序是打包为轻量级容器的独立自治服务的集合。与虚拟机相比,容器简化了容器管理集群的搭建工作,同时整合了调度、配置、存储、网络等。用户可以将微服务及其所需的所有配置、依赖关系和环境变量打包成容器镜像,轻松移植到全新的服务器节点上,而无需重新配置环境。 设计松耦合的微服务。微服务将大型复杂软件应用拆分成多个简单应用,每个简单应用描述着一个小业务并可以被独立部署。各微服务之间是松耦合的,可以独立地对每个服务进行升级、部署、扩展和重新启动等。相比传统的单体架构,微服务具有降低系统复杂度、独立部署、独立扩展、跨语言编程等特点。 通过API进行交互协作。云原生服务使用轻量级API进行交互,比如基于RESTFul、gRPC或NATS等协议。 使用最佳语言和框架开发。云原生应用的每项服务可以使用最适合该功能的语言和框架开发。微服务的细粒度拆分模式使得各个服务可以分别根据需要选择最适合的语言和框架。 通过DevOps流程进行管理。DevOps是一组过程、方法和系统的统称,旨在统一软件开发和软件操作,与业务目标紧密结合,构建出一种通过持续交付实践去优化资源和扩展应用程序的新方式,缩短了开发周期、增加了部署频率,并实现了更可靠的发布。 以容器、微服务、DevOps等为核心的云原生技术和理念推动着云原生产业生态蓬勃发展。随着企业深入上云用云,业务应用走向全面云化,企业对云原生的需求升级,需要一个底层的云原生应用引擎来支撑业务应用的快速云化改造。比如,应用引擎的边车(Sidecar)形态可以在传统应用不做任何改造的情况下,实现上云迁移;再如,应用引擎作为应用服务器,为业务提供了标准的微服务框架。此外,传统的技术领域,如数据库、数据仓库等转变为云服务的方式也需要云原生应用引擎来进行支撑。 总之,云原生应用引擎和其他云原生技术的相互融合,可以为企业提供坚实的云化技术底座,从而实现企业应用的云原生技术升级。 (二)应用引擎技术介绍 1.应用引擎的定义 应用引擎是面向互联网和云原生应用提供的运行时组态服务程序。具备环境感知、安全控制、加速优化等能力,一般呈现为Web服务、流媒体服务、代理(Proxy)、应用中间件、API网关、消息队列等产品形态。 互联网时代国际主流的应用引擎包括:NGINX,Apache,IIS等。 在云原生时代有许多新的轻量级应用引擎涌现,比较流行的云原生应用引擎包括:NGINX(C语言),Envoy(C++语言),Linkerd(Rust语言)等。 在云原生架构中,应用引擎除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入、链路追踪、蓝绿发布等新功能特性,因此应用引擎在云原生架构中发挥着更为关键的作用。 图1云原生应用引擎架构 2.应用引擎的产品形态 图2应用引擎产品形态 如上图所示,应用引擎产品形态包括Web服务器、流媒体服务器、应用服务器和代理服务器等。其中,代理服务器又可分为正向代理、反向代理、边车和消息代理等产品。 (1)Web服务器 Web服务器是WorldWideWeb服务器的简称,又称为网页服务器,主要功能是提供互联网信息服务,能够为各种客户端提供如WWW、Email、FTP等互联网服务。常见的Web服务器有Apache、NGINX、IIS等。 Web服务器具有接口通用性好和可扩展性强的特点。以NGINX为例,它是一款轻量级Web服务器,采用异步高并发多进程模型,性能优异、占用内存和资源少,既可以用于静态文件解析,也可以通过扩展服务提供动态内容。 在云计算领域,Web服务器是应用引擎中最为广泛的产品形态。 (2)流媒体服务器 流媒体服务器是专注于提供音视频资源在线播放的应用服务器,大多是通过标准的Web服务器附加特定的音视频处理功能实现,从而满足人们对音视频传输质量和响应时延的要求。 以NGINX为例,其中的FlvStream模块能实现流媒体的功能,而且支持flv视频进度条拖拽,另外NGINX还可以作为反向代理服务器提供基于FlashMediaServer或者Red5的RTMP/RTMP流媒体服务。 基于其实时性和多媒体展示能力,流媒体服务器已经成为云原生应用引擎服务的一种重要形态。 (3)应用服务器 应用服务器是部署特定应用的软件平台,如NGINX、Weblogic、Tomcat。应用服务器一般会实现可插拔的协议处理框架,具备多语言编程接口。 以NGINX为例,它可以通过NGINX和FASTCGI的方式运行PHP、JSP或其他语言编写的应用服务,并可以通过插入特定协议的实现模块支持如Dubbo、gRPC类似的企业应用。 基于简洁高效的编程语言,应用服务器成为构建微服务的基础和云原生应用引擎的重要形态。 (4)代理服务器(Proxy) 代理服务器是客户端和服务端的中介,如NGINX,Envoy等。主要功能是信息的访问控制、应用加速及信息隐藏。代理服务器分为两类,正向代理服务器(forwardproxy)和反向代理服务器(reverseproxy)。反向代理服务器代理外部请求访问内部网络的服务,而前者代理内部请求访问外部网络的服务。 明确支持特定协议的代理服务器被称为7层代理,最常支持的协议类型为HTTP/S。相对应的,不解析内容,仅仅进行TCP/UDP端口转发的被称为4层代理。 以NGINX为例,通过不同的模块对4/7层进行了良好的高性能支持,7层上支持HTTP1.x,HTTP2及HTTP3,并通过插件机制实现对特定7层协议的定制支持。 在云原生架构中,代理服务器通过入/出口网关、边车等角色成为重要的应用引擎产品形态。 (三)云原生应用引擎概述 1.云原生技术架构下应用引擎的演进 云原生应用引擎从传统互联网架构发展到云原生架构,其支撑的软硬件类型由操作系统、数据库、应用中间件和Web服务器逐步发展为基于云原生内核、分区解耦的数据库及相关衍生产品,例如,API网关、入/出口网关、边车、微隔离、消息代理、应用代理等。云原生架构的应用引擎实现虽然需要借助容器、DevOps、微服务等新兴云原生技术,但我国在云原生应用引擎技术领域已经积累了深厚的研究基础。 1 据Gartner预测,到2025年,云原生平台将成为超过95%的新数字计划的基础,远高于2021年的不到 40%。以上预测说明,中国云原生产业将迎来蓬勃发展,基于云原生应用引擎在云原生技术的突出位置,应用引擎将成为信息产业发展的主力军和排头兵。 图3云原生应用引擎演进 1《2022年十二大重要战略技术趋势》,Gartner,2021年10月 2.云原生应用引擎的特点 作为云原生环境部署里的基础组件,云原生应用引擎具有如下特征: (1)无状态能力 云原生应用引擎有多种形态,如应用服务器、应用代理,但无论哪种都需适应云原生环境的多变的动态部署要求,包括扩展、迁移,特别是适配云原生的容器化部署。因此,一定不能在节点存储状态数据,需要把状态数据及时同步到控制管理平面。以NGINX为例,其集群同步能力可以在不同实例间同步配置,产生的日志可以不落盘,而直接对接管控平面的日志服务组件。 (2)可观测能力 传统应用的网络和硬件规划是静态的,而云原生环境下的规划部署是动态的,并且请求的拓扑每次都可能不同。因此,云原生应用引擎需要支持Opentracing等可观测架构,按要求及时上报请求的跟踪信息。NGINX早在数年前就支持Opentracing,可以对接Zipkin、Jaegerserver,实现统一的调用链观测。 (3)动态配置能力 云原生环境下由于业务服务变动频繁,需要应用网关或代理即时变更配置,同时云原生环境下的微隔离也要求控制面及时下发控制策略。因此,云原生应用引擎,尤其是代理服务器必须具备动态配置能力,才不会因为不及时的配置变更影响业务。 (4)DevOps集成能力 云原生的应用架构有快速迭代、多版本并存、蓝绿部署以及热更新的特点。因此,需要应用引擎提供接口支持版本热更新、流量切换、灰度测试等能力。例如,NGINX支持热更新,可以根据复杂协议特有的变量进行不同的路由选择。 3.云原生架构下应用引擎的定位 应用引擎在微服务体系中发挥着重要的作用。一是作为应用服务器,能够适应企业现有的实现语言,提供相应的服务器实现,从而保证企业能以较低的成本完成业务的云化改造。例如,NGINX通过两种模式实现通用服务器支持,通过动态模块机制、加载不同语言的模块,目前已经有对应的C/Go/Java或解释型语言如PHP/Python/LUA;或者把不同的语言首先翻译为WASM方言,再通过WASM模块执行。二是作为流量或API网关,应用引擎仅仅是代理或施加策略控制,有时还可以弥补服务实现的缺陷,比如下面章节中代理MQTT消息协议时对其缺乏HA能力的弥补。 而在服务网格架构中,应用引擎除了上述的作用外,还以边车的形态和控制面组件进行交互,为服务增强了可观测性、安全、流量控制。例如,NGINX本身的融断机制、丰富的路由策略满足边车的流量调度需要,而微隔离的需求则通过丰富的第三方安全插件支持,原生的丰富的upstream指标体系则满足了可观测性需求。 图4应用引擎定位 4.云原生架构下应用引擎的部署 如下图所示,应用引擎的部署包含数据平面、控制平面、管理平面。数据平面实现业务的数据处理,控制平面实现对业务策略的配置,管理平面实现对引擎的管理。基于管理平面、控制平