本文来自微信公众号“twt企业IT社区”,作者/汪照辉,,中国银河证券架构师,专注于容器云、微服务、DevOps、数据治理、数字化转型等领域,对相关技术有独特的理解和见解。擅长于软件规划和设计,提出的“平台融合”的观点越来越得到认同和事实证明。发表了众多技术文章探讨容器平台建设、微服务技术、DevOps、数字化转型、数据治理、中台建设等内容,受到了广泛关注和肯定。个人微信公众号:技术思维创新
容器云平台是基于云原生容器等技术所构建的支撑“以应用为中心”的应用发布、应用运行和应用运维的轻量化PaaS平台。由于容器云采用开源的云原生技术,云原生本身就具备信创的基因,也使我们具备自主可控能力,所以其信创改造重点是对各种信创CPU芯片的支持和信创操作系统、信创数据库、以及信创中间件等的支持。信创数据库和中间件不是容器云信创改造的核心,只要性能和稳定性满足需求,适配信创操作系统,就问题不大。信创操作系统和信创CPU则是容器云平台信创改造需要关注的重点。虽然理论上云计算无需考虑资源的位置、类型等,但目前国内尚无法实现高性能、高可用、高精密的一体化集成,各种厂商还是一片混战。这也导致大量的重复建设和低效集成工作。云计算很重要的一点就是要实现异构基础设施资源的整合和统一的、高效的资源调度服务,容器云作为轻量化PaaS[1]也可以直接使用标准化的基础设施资源服务,从而提升资源管理和调度效率。
目前国内信创CPU有龙芯、鲲鹏、飞腾、海光、兆芯、申威等多种采用不同指令集架构的CPU,这也导致在采购信创服务器的时候不得不考虑不同架构CPU的特点、生态、和操作系统的适配、未来发展趋势及存活下来的可能性。
信创CPU指令集介绍
CPU是计算机的运算中心和控制中心。信创CPU选型主要看CPU指令集。所谓指令集是计算机中计算和控制系统所有指令的集合,计算机高级语言设计实现的程序最终需要转化为一条条“指令”才能在CPU上运行。指令集决定了处理器的架构(称为微架构),处理器架构就是用硬件电路实现指令集,所以采用不同的指令集意味着不同的微架构。
CPU指令集分类
CPU指令集可分为CISC(复杂指令集)和RISC(精简指令集)两类,CISC型CPU目前主要是x86架构,RISC型CPU主要包括ARM、RISC-V、MIPS、POWER、Alpha架构等。
(1)X86架构指令集庞大,功能复杂,寻址方式多,且长度可变,有多种格式;各种指令均可访问内存数据;一部分指令需多个机器周期完成;复杂指令采用微程序实现;系统兼容能力较强;其优势是x86架构兼容性强,配套软件及开发工具相对成熟,且x86架构功能强大,高效使用主存储器,在处理复杂指令和商业计算的运用方面有较大优势。
(2)ARM指令集长度固定,易于译码执行;大部分指令可以条件式地执行,降低在分支时产生的开销,弥补分支预测器的不足;算数指令只会在要求时更改条件编码。ARM结构具有低功耗,小体积的特点,聚焦移动端市场,在消费类电子产品中具有优势。
(3)RISC-V支持32位或64位指令集,使用加载-存储架构,RISC-V指令集完全开源,设计简单,易于移植Unix系统,模块化设计。尽管RISC-V允许设计人员免费试验和开发RISC-V系统,但几乎没有对硬件设计的支持。RISC-V架构的起步相对较晚,但发展很快,在智能穿戴产品上的应用广泛。
(4)MIPS采用32位寄存器,大多数指令在一个周期内执行,都是32位定长编码的指令集和流水线模式执行指令;具有高性能高速缓存能力,且内存管理方案相对灵活。优势是结构设计简单、功耗较低,在嵌入式应用场景具有优势。
(5)Alpha采用32位定长指令集,使用低字节寄存器占用低内存地址线;分支指令无延迟槽,使用无条件分支码寄存器;优势是结构简单,易于实现超标量和高主频计算。
(6)Power指令集是一种由IBM公司设计开发的一种基于RISC架构的指令集体系构架,2019年IBM宣布完全开源Power Command Set指令集,这是继RISC-V、MIPS之后又一个开源CPU指令集,与RISC-V、MIPS等开源指令集相比,Power指令集最大的优势就是性能强大。
CPU指令集自研和授权情况
国内信创CPU指令集通过授权和自研两种方式来实现。申威完全自研Alpha指令集,自主化程度最高;龙芯采用MIPS指令集授权+自研方式,国产化程度很高;鲲鹏CPU和飞腾CPU采用ARM指令集授权方式,拥有100%源代码,按处理器的架构和指令自行编写代码,设计芯片,自主先进程度相对较高;海光CPU采用指令集授权方式,高效兼容安全,整机优势明显,不过自主程度比较低;兆芯采用x86(VIA)IP授权方式,性能和生态具有较强优势,自主程度最低。
CPU生态
在生态方面,基于x86和ARM架构的CPU与下游软硬件的兼容性较好,适配产品较为丰富,对用户使用较为友好;基于MIPS和Alpha架构的CPU在高性能计算、嵌入式工控机等特定领域应用较好,市场化仍有待进一步发展。RISC-V架构的起步相对较晚,积累少,生态还不完整。Power处理器的问题也在于越来越少的厂商支持。
信创CPU与操作系统的适配支持
国产主流操作系统是基于Linux内核的二次开发,主要也都是对CPU芯片和应用的适配支持,所以主要看操作系统支持的适配应用和CPU的量,也就是生态情况。目前国内的操作系统主要有麒麟、统信、普华、中科方德、OpenEuler等。麒麟、统信操作系统目前占据主导地位,支持各种架构的CPU,整个生态也相对比较成熟。普华和中科方德也在不断发力,但仍需进一步的努力构建完善的生态体系。虽然可以通过云原生技术构建弹性、敏捷的云原生操作系统,但依然无法绕过基础软件服务器操作系统对基础硬件的管理和适配。
容器云信创改造方案
采用开放、开源云原生技术的容器云信创改造主要是基础软硬件的替换,包括CPU、操作系统、存储、网卡等,其实也就是容器云节点——服务器整机的替换。不过由于目前信创CPU和操作系统等依然处于混战状态,很多公司都是采用了多种CPU架构,从而可能需要在一个平台支持不同架构的CPU,和不同的操作系统,采购两到多种异构的服务器,从而需要实现一云多芯部署方案。
一云多芯容器云集群部署方案
容器云平台改造有几种部署方案,一是在不同的CPU架构上重新部署一套新的信创容器云平台;一种是在现有平台上支持不同架构的信创应用;现有平台支持信创也有两种方案,一是独立的信创CPU架构集群和非信创集群,二是信创和非信创混合部署方案。不同的方案各有优缺点,部署多个平台、多个集群会造成浪费,混合方式又使平台管理操作、资源调度等复杂化。考虑到数字化发展系统融合的要求,可以用一个portal界面统一管理信创和非信创应用,尽可能通过平台的封装来屏蔽下层异构基础设施资源的差异,提升应用部署和运维管理的效率。不同的CPU架构也使租户应用需要多种不同架构的资源,通过一个入口实现多种能力支持,对租户来说要简单一些。不过对于一个集群有异构资源来说,使资源调度和维护管理复杂化,特别在节点量比较大的情况下,需要定义不同的标签来区分,对平台管理能力和可见性、可观测性等有较高要求。目前的容器云平台功能有限,难以达到自主调度要求,否则额外带来很多的工作量。因此,当前选择不同架构CPU独立部署一个集群的方式,在应用调度时直接调度到相应的集群,资源管理的粒度相对较大,相对更容易实现。
一云多芯资源管理和调度
对于资源的调度和管理,理论上最佳的方案是不用关注资源在哪里,有多少,是什么类型,云的思想是实现资源融合,因此资源容量越大,弹性越大。但现实往往受制于有限的资源,需要考虑资源的调度和分配。信创增加多种CPU架构,使资源管理和调度相对更复杂化。理论上,可以通过云管平台或内部基础设施资源管理平台来实现基础设施资源的弹性,不过往往涉及多个团队甚至多个部门,比较难以整合,比较难以获得高效率。部署时如果做不到自主调度,就需要人工去做一些配置或选择,人的操作难免会出错,所以越简单可能体验越好。独立集群部署方式也在于这样可以简化很多工作。粒度上比节点管理要简单,通过分类来管理一类资源,而不是管理分片资源。Kubernetes自身具备集群内资源调度能力,容器云平台需要实现自应用到资源的全局调度能力,需要在平台层进行能力扩展。资源调度本身就比较复杂,有很多种调度算法,这一部分还需要继续投入和优化。
由于信创CPU的架构差异,也导致整个容器云平台在信创改造时架构相对复杂化,管理和调度复杂化,需要在Portal和平台层进行优化和完善,以支持多种异构CPU资源调度,实现一云多芯。
注:参考天风证券信创产业链全梳理、普华基础软件资料等。
[1]很多人把只要用到容器的系统就称为容器云,在IaaS上提供容器服务,往往是以容器为中心的调度和管理,而不是应用为中心的管理和运维能力。和这里讨论的容器云(容器化PaaS)是不一样的,不在一个层次。容器化PaaS是PaaS服务层,容器以及介于IaaS和PaaS之间的服务能力,类似于虚拟化。