国产替代正当时:我们是如何迁移到国产操作系统的?
过去一年,国产操作系统在技术、社区和商业化方面均取得了快速发展:技术方面,更多企业及研究机构投入到自研系统项目中,原创组件和技术如雨后春笋般涌现;社区方面,头部社区蓬勃发展,新的社区不断出现;商业化方面,OSV 都有较为明显的业绩增长。国产操作系统的发展正加速驶入快车道,与此同时,不少企业也开始向国产操作系统迁移。
那么,如何才能更好地迁移到国产操作系统?操作系统迁移会对软件栈带来哪些影响?企业开发、运维人员如何拥抱变化?近日,InfoQ《极客有约》邀请到了政采云公司运维支撑负责人朱海峰老师,为大家分享政采云公司的国产操作系统迁移实战经验。
以下为访谈实录,完整视频参看:https://www.infoq.cn/video/KZ6bJkiHlfmfcCsMBibS
姜雨生:欢迎朱海峰老师做客 InfoQ《极客有约》,首先,请您简单介绍一下政采云这家公司。
朱海峰:政采云有限公司是一家提供购政企采购云服务生态的公司。旗下有两个核心产品,分别是政采云平台和乐采云平台。
政采云平台是专门面向政府采购的平台,是顺应政府采购数字化改革要求和电商化采购趋势,在监管部门指导下搭建的集网上交易、网上监管和网上服务于一体,覆盖政府采购各领域、全流程、多用户的一站式云服务平台。
乐采云平台是一个政企采购开放平台,两者面向不同的用户群体。乐采云平台是为适应数字化采购的新形势,由政采云有限公司为主建设、独立运营,并将在政府采购领域多年积累的技术能力、运营经验和资源优势等引入到企业采购等非政府采购领域,是为广大企业、村社组织等单位用户搭建的一体化、数智化采购云服务平台。
目前,政采云平台已成为政府采购领域中服务范围最广、用户量最多、交易最活跃的全国性区域一体化云平台。
姜雨生:在提到云时,我们更多地关注云 PaaS 方面的能力,尤其是在机器上的搭建。咱们的产品是 SaaS 软件产品,还是同时包含了管理机器和集群能力的 VM 等云平台方面的产品呢?
朱海峰:政采云平台是一个以 SaaS 产品为主的平台,主要是提供 SaaS 服务。此外,平台还在构建生态应用的功能,支持采购服务相关的第三方 ISV 进行入驻等方面提供应用管理的功能。
姜雨生:在过去几年中,我们将企业的操作系统迁移到国产操作系统上,并做了一系列与操作系统迁移相关的工作。请您简单介绍一下所做的工作以及整个迁移过程。
朱海峰:在 2020 年 12 月,CentOS 社区宣布在 2021 年和 2024 年 6 月底停止为 CentOS 服务器操作系统 8 和 7 提供服务,这一事件被视为一个显著的触发事件。国家的“十四五”数字经济发展规划强调数字基础设施建设,其中特别强调了云计算、5G 和物联网等基础领域的发展。这些规划推动了计算产业的变革。
在这种背景下,政采云技术团队意识到 CentOS 停服可能对我们产生影响,并且国家也在强调数字基础设施建设。因此,我们发起了对国产操作系统的调研工作,该调研工作大约从 2021 年开始进行。
在 CentOS 宣布停服后,一些国产系统如龙蜥和欧拉也提供了替代方案。我们主要使用阿里云作为云资源,并注意到了龙蜥开源社区的活跃度,因此选择了龙蜥操作系统。
政采云平台是一个提供 SaaS 服务的云平台。我们支持不同用户以租户的形式入驻云服务,同时也支持政府行业、金融行业和企业等不同领域的本地化部署需求。云上我们主要采用龙蜥操作系统,因为我们观察到龙蜥社区非常活跃,并且它兼容我们之前使用的 CentOS 生态系统。本地化部署上,我们适配了麒麟、统信和红旗等操作系统,根据客户采购的操作系统发行版进行适配。我们的业务包括各地政府采购网搭建,以及电子卖场、项目采购等交易平台的建设,这些业务系统都进行了国产化适配的工作。
姜雨生:我们迁移到龙蜥操作系统,整个迁移过程大概是什么样的?大概多久完成了迁移工作?
朱海峰:在迁移龙蜥操作系统之前,我们主要使用的是 CentOS 7.4 版本。当时龙蜥社区是一个非常活跃的开源社区,它完全兼容 CentOS 生态, 并在性能、安全方面也有所改进,因此我们选择了龙蜥操作系统。
在选择操作系统之后,我们主要有两个步骤。首先是迁移评估,需要评估新系统是否兼容现有软件。接下来是迁移实施。
在评估阶段,我们对操作系统层面和业务应用层面进行了整体评估。在操作系统层面,主要关注内核软件包、系统配置、软件服务等方面的兼容性;而在业务层面,我们主要是 Java 应用,需要检查是否存在依赖系统层面不兼容的配置和软件,比如字体,或者基础软件服务等。龙蜥在操作系统层面提供了一些很好的工具,可以在升级之前比较系统软件包的差异。在评估阶段,我们做了一些基准测试,如磁盘、网络和中间件方面的测试,我们发现龙蜥操作系统与当前的 CentOS 性能数据保持一致。对于应用层面,我们还进行了关键业务的性能测试和功能测试,以确保功能一切正常。
综上所述,迁移评估的结果是,龙蜥操作系统在软件版本上与 CentOS 生态完全兼容,性能数据基本一致,并且对业务层面的影响较小。
在实施阶段,有两种方式可选:一种是原地升级,在原有机器上进行版本更新;另一种是新节点的滚动替换。对于原地升级,龙蜥提供了相应的工具,可以直接从 CentOS 切换到龙蜥操作系统。由于政采云平台是基于 Kubernetes 部署的,我们大部分业务采用了替换节点的方式进行迁移,因 Kubernetes 对于节点的增减是很方便的,只有一小部分业务进行了原地升级。
整个版本升级评估大约两周的时间完成,后续的实施过程中滚动升级,随着旧节点下线和新节点增加,整个实施过程会相对拉长,这块对业务的影响较小。
姜雨生:政采云平台原应用系统所需软件包和龙蜥操作系统中软件包的兼容性和依赖包存在差异,最后我们是如何解决这一问题的?在迁移的过程中还遇到了哪些技术挑战?
朱海峰:在实际操作中存在一些差异,因为我们当时使用的是 CentOS 7,而龙蜥操作系统只支持 CentOS 8,所以这两个大版本之间有一些功能变更,比如安装包的工具不同。我们通过比较软件包找到了这些差异,并判断不同的系统依赖是否满足我们的需求。实际上,大部分系统层的依赖都是向前兼容的,所以升级对我们的影响并不大,需要做的改动也较小。
另外,在软件安装方面,我们制定了标准规范,使用自建的安装包源,并采用自定义安装包的形式进行安装,尽量避免对系统安装的依赖。对于大部分服务,如 NGINX、Elasticsearch、RocketMQ 和 Zookeeper 等,我们通过容器化实现了基础容器镜像,镜像中包含了服务运行环境,这样可以实现在一次构建中多操作系统的部署。
姜雨生:有观众提问,想了解下政采云技术团队在迁移过程中的监控系统以及与稳定性、性能和安全性相关的实施过程。
朱海峰:在迁移过程中,我们对基础设施、中间件和应用层进行了性能测试,非常关注性能数据。同时我们也重视系统调优方面和安全层面的工作。我们根据之前的版本使用了一些固定的参数进行系统调优,而在迁移到新的操作系统时,我们会关注这些参数的适配性,并进行相应的调整。在监控和系统安全方面,我们在云上使用了一些安全产品,例如主机防护会进行巡检并提醒可能存在的差异以及潜在风险。我们还有专门的安全部门负责这些事情。此外,我们配置了稳定性相关的监控指标,通过监控面板和告警以保证变更不会对业务稳定性产生影响。
姜雨生:政采云公司也有针对金融支撑服务和政务行业的项目,是否也进行了操作系统迁移?不同行业的国产化有哪些异同?您能分别介绍下当时的迁移情况吗?
朱海峰:金融支撑服务和政府行业的项目对国产化操作系统有特定要求。在金融和政务领域,麒麟和统信等国产操作系统被广泛使用,而龙蜥操作系统或欧拉操作系统的使用较少。由于金融支撑服务的采购量相对较小,选择性也较为有限。他们可能只需考虑一款操作系统的迁移,比如银河麒麟或红旗操作系统,金融支撑服务对网络安全的要求更高一些, 在进行操作系统迁移解决方案时,我们需要规划离线迁移方案,金融支撑服务对硬件和中间件的国产化要求不那么强烈,政务行业的情况有些不同,它们在操作系统选择方面可能有更多的选项,比如统信、银河麒麟等操作系统。但对硬件和中间件的国产化要求更为强烈,一般政务行业的国产化迁移会包括操作系统,CPU 架构,甚至中间件的迁移。
姜雨生:为了帮助企业更平滑地完成操作系统迁移,不少操作系统厂商都会提供对应的迁移工具,我们在迁移的过程中采用了哪些不错的迁移工具?有哪些迁移经验可以分享下吗?
朱海峰:在龙蜥操作系统迁移过程中,我们进行了调研,并使用了一个叫作 centos2anolis 的工具。该工具直接支持原地升级,实际上它是通过操作系统本身的软件升级方式实现的。它预先进行了一些软件包的检查,非常方便且易于使用,可以直接支持操作系统原地升级。
在本地化方面,我们使用了一个名为 sealor 的阿里开源 kubernetes 集群管理工具,它将 Kubernetes 以镜像的方式进行部署。我们也可以利用该工具进行节点的动态下线 / 上线,很方便的实现节点滚动升级。
在此方面,我有几点经验分享:首先,在进行大型升级时,建议进行镜像备份或数据备份,因为升级过程中可能会遇到一些问题,需要有手段将系统恢复到升级之前的状态。其次,对于依赖的系统包问题,建议采用解耦的方式来解决,比如,可以通过容器化或自定义安装包的方式对服务运行时环境进行封装,对操作系统的依赖解耦掉。最后,在迁移过程中建议通过一些脚本比如 ansible 进行自动化,可以重复执行并自动化执行整个升级或迁移过程,从而最大限度地降低人力成本。
姜雨生:在操作系统迁移过程中,包括日常开发工作,主要涉及到时间成本和人力成本。当我们为客户进行这种迁移工作时,通常的时间和人力成本是怎样的?对于私有化部署的客户来说,我们在迁移过程中除了提供相关的人力支持,客户可能还需要提供一些相关的业务人员支持。那么这方面的时间和人力成本大概是多少呢?
朱海峰:在前期进行评估阶段时,需要业务人员的参与。然而,一旦方案成熟并开始实施阶段,就不需要业务人员参与了。我们可以通过自动化脚本来完成运维人员的工作,他们只需进行实施观察,并在需要时进行紧急操作。根据粗略估计的时间占比,业务人员的投入可能在前期较多,而后续则不需要投入。运维人员则需要全程投入,后期的投入可能会更多一些。因此,评估和实施的时间比例是 1:1 的关系。
姜雨生:从运维的视角来看,操作系统的迁移会带来哪些变化?开发者如何才能更好地拥抱变化?
朱海峰:操作系统的迁移对系统运维方面可能会涉及一些变化。例如,安装软件包、网络排查和性能排查工具等日常工作可能会有一些变化,尤其是包的安装方面可能会有较大的变更。此外,使用不同的操作系统发行版时,解决方案的制定需要考虑不同操作系统的兼容性,对运维工作本身会有一定影响。
对于开发人员而言,他们应尽量减少对系统变化的感知度。一种方式是通过容器化,将应用程序的运行环境与宿主机操作系统解耦。另外,通过工程化理念将运维能力抽象为产品功能,使开发人员无需关心底层技术的变化。这样一来,开发人员对操作系统的变更的感知度就可以最小化。
姜雨生:对于那些有操作系统迁移诉求,但还没进行迁移的企业,您会给他们提供哪些建议?
朱海峰:对于一些客户而言,他们并未迁移到国产操作系统。原因之一是国产操作系统的成熟度尚不够,另外在进行本地化部署时依赖于客户的基础设施,比如客户并未购买国产操作系统,因此没有进行迁移,这取决于客户自身的技术规划。我们不主动建议客户进行国产化迁移,但我们具备国产化迁移的能力,会向客户提供这方面的解决方案的支持。
姜雨生:对于那些未迁移的客户来说,如果面临版本停止服务的情况,那么未来会不会对他们造成严重影响呢?
朱海峰:除了国产操作系统,他们可能也在使用一些其他的操作系统,例如 Oracle Linux 或其他开源的操作系统。对于使用 CentOS 操作系统,并且该停服对客户可能造成影响的,我们会提醒他们关注到这方面的问题,提早规划相关的迁移方案。然而,客户可能会坚持使用某类操作系统,并不愿意改变使用习惯,这会是一个挑战。但是随着国产操作系统的成熟和观念的变化,我相信会有一些转变发生。
姜雨生:您之前提到了多款操作系统,在使用它们的过程中,针对它们的操作系统本身和生态建设,您有哪些建议吗?
朱海峰:某些操作系统无法自行升级内核,并且它们的软件生态系统不够丰富。由于某些操作系统的兼容性问题,必须根据官方的介绍来进行版本升级或内核升级,如果它们没有提供支持,我们将无法进行相应的升级。
目前很多社区都采用商业版和社区版相结合的发展模式。然而,一些操作系统的社区版并不活跃,这导致企业使用该操作系统的成本较高,需要购买商业版才能获得支持。如果使用社区版,可能会在面临一些问题的时候缺乏有效的支持。此外,目前的操作系统如欧拉和龙蜥等,与云服务提供商有一定的关联。比如,欧拉是华为云天然支持的操作系统,而龙蜥操作系统则是阿里云直接提供的。一个优秀的国产操作系统应该与主流云服务提供商都有合作,无论是在哪个云上,都可以方便的使用他们的操作系统。
姜雨生:国产化适配是一个系统性工程,实现国产化操作系统替换只是第一步,未来我们还会有哪些规划?会探索哪些新技术方向来解决我们和客户面临的主要产品问题?
朱海峰:我们在规划国产化适配时,并不仅仅考虑操作系统,还包括硬件方面,如 CPU 架构的变更,目前国内一些公司,如华为,正在推广 ARM 架构的鲲鹏服务器;还包括了国产化的数据库、中间件替代方案。在整个平台中,国产化替代方案也有相应的规划,比如,我们要支持 ARM 架构的 CPU,数据库的国产化支持,如达梦数据库等。
在操作系统层面,运维会尽量减少对业务的影响,但在 CPU 架构,数据库层面的变化,业务的感知度会特别大,尤其是数据库方面,对业务的侵入性比较大,需要业务方面提供相应的支持,改造适配成本会比较高。
作为运维支撑部门,我目前的主要关注点是政府采购平台的多云部署、运维和维护,技术侧主要关注多集群管理,集群弹性能力和云原生网关等。
姜雨生:从您的部门角度来看,运维部会探索哪些方面的新技术呢?
朱海峰:首先,我们需要基于现有技术来思考我们的技术发展方向。其次,我们需要明确这些技术实际上解决了哪些业务问题。在运维和技术保障方面,我们已经着手处理一些重要项目,例如可观测性平台。关于这些项目,您可以在 InfoQ 平台上找到相关文章,这些内容非常值得一读(延伸阅读:《云原生时代,如何建设稳定性可观测体系?》)。
姜雨生:有观众提问,可以简单介绍下如何建立可观测体系吗?
朱海峰:我们以前主要是基于日志、指标、链路等指标来构建整个监控体系,这三类数据是分别处理的。我们的运维开发部门基于 Open Telemetry 开发了的整体可观测性系统。该系统能够收集上述数据并建立关联。当收到指标警告时,该指标可以关联链路和日志数据,从而是告警接受者全面的了解问题。
此外,我们的工程师还在使用 eBPF 技术进行更精细的数据收集,尽量减少对业务层的依赖。在这方面,社区里比较热门的项目是 DeepFlow,我们团队也在与 DeepFlow 协同合作,收集不同类型的数据,通过数据计算关联,最终形成稳定性大盘。此外,我们希望能够把监控数据基于算法与模型进行计算,提供智能化的监控解决方案。
姜雨生,微软软件工程师,负责微软资讯业务与 GPT 集成,曾负责微软广告团队基础设施搭建与维护工作。
朱海峰,政采云有限公司运维支撑负责人,关注混合云架构下的云原生技术场景,比如多集群管理、弹性能力、云原生网关等。
你也「在看」吗? 👇
微信扫码关注该文公众号作者