写点什么

做软件国产化,我们太难了

  • 2020-03-19
  • 本文字数:4805 字

    阅读完需:约 16 分钟

做软件国产化,我们太难了


长期以来,中国信息产业“缺芯少魂”,“芯”指芯片,“魂”指操作系统。2018 年,中兴事件后,国产芯片一时成为万众瞩目的焦点,并引发一片网络热议。有网友评论,“这次被美国卡住的芯,一万年也要搞出来”。


殊不知,即使造出来国产芯,还没搞定国产操作系统。即使弄出国产操作系统,数据库上依然受制于人。即使有了国产芯、国产操作系统,我们依然没有解决最大问题——缺乏国产软件的生态。这个生态联系紧密,“环环相扣”,底层是芯片、中间是操作系统、数据库、中间件等,上层是大量的应用和服务。


为了建立一个健康的国产软件生态,不仅要有国产芯片、国产操作系统和国产数据库,而且还需要大量第三方应用和服务去适配它们。这样,国产软件生态才能“茁壮成长”。

涉足软件国产化

一般来说,国产软件可以分为三类:基础软件、通用软件和垂直行业应用软件。其中,基础软件包含操作系统、数据库和中间件,并且它是 IT 行业发展的中流砥柱。但是,在操作系统和数据库方面,这一直是我们的“软肋”。


“狭义上的软件国产化主要指操作系统和中间件的国产化。”DataPipeline CTO 陈肃说。


在其他领域,像手机 App、企业应用软件和企业服务软件等虽然也属于国产化软件,但是它们过去一直在稳步发展。


近几年,很多人是从比较火的国产数据库/数据仓库开始了解软件国产化的。其中,代表性的国产数据库有 TiDB、GaussDB 和 SequoiaDB 等。


国内云计算的应用和普及,有望成为国产数据库发展的重要机遇。比如,国内云厂商针对云环境应用的特点,推出开源数据库的深度定制化版本和自研的数据库/数据仓库版本。


众所周知,在 2019 年全球 OLTP 数据库权威测试 TPC-C 中,阿里云的 OceanBase 数据库“一举夺冠”,不仅打破 Oracle 维持 9 年的世界纪录,而且让更多人认识到国产数据库的发展水平。


据悉,DataPipeline 是一个批流一体数据融合平台,它主要为企业提供数据采集、API 数据接入、可视化运维管理和元数据管理等功能。其核心功能之一是完成异构数据库的抽取、转换、写入。


陈肃表示,对 DataPipeline 而言,软件国产化意味着不仅要适配国产数据库和数据仓库,而且要适配国产操作系统和硬件环境。DataPipeline 主要基于容器化部署,在国产操作系统、ARM 硬件环境上有时会遇到一些兼容性和性能问题,因此要根据具体环境进行适配和调优。


与之相似,融云则是另一家开展“软件国产化”的企业,它的工作也是去适配国产操作系统、国产数据库等。对融云而言,软件国产化不仅仅是适配,而且要保证在不同的国产操作系统中,它对网络和数据库层面的优化同样生效,并确保性能层面与标准产品性能对齐。

需求驱动

无论是 DataPipeline,还是融云,它们之所以涉足软件国产化,原因很简单:客户有需求


以 DataPipeline 为例,2016 年,这家公司在客户侧感知到国产化需求的增加,开始根据收到的客户需求数量进行优先级排序和研发。以市场为导向,如果只有个别用户有需求,企业可能会当做定制化需求去适配。一旦它变成普遍需求,就需要进行产品化开发,“作为一家创业公司,我们的优势之一是能快速对市场需求做出响应。”


同样,在 3 年前,融云开始走上国产化适配的道路。


融云 CTO 杨攀向 InfoQ 记者透露,“我们做国产化,是因为客户群体中有大量面向企事业单位、政府等机构的服务商。客户需求最终驱动融云启动国产化工作。”

适配怎么做?

对融云和 DataPipeline 而言,它们面临的第一个问题是确定适配目标。“定目标”,这看上去很简单,实则不易。


以国产操作系统为例,企业要先确定自己的应用或服务适配哪一个国产操作系统。而根据公开不完全统计,市面上,国产操作系统有十几个,包括深度 Linux(Deepin)、优麒麟(UbuntuKylin)、中标麒麟(NeoKylin)、中兴新支点操作系统、银河麒麟等。


这么多操作系统,确定初期的适配目标非常重要,因为它关乎成败。


一旦确定开始的适配目标,就会遇到第二个难题。


杨攀说,“在适配的操作系统具体版本上选择很难,因为有各种版本,让人眼花缭乱,比如通用版、高级版和安全版等。并且,除官网简单说明外,各个版本间的具体区别很难获取到详细信息。”


如果是适配某个行业数据库,企业较难从公开渠道获取到数据库最新发布版本和各版本差异。最后即使通过与售前人员联系获得数据库安装文件,但在实际适配过程中依然有坑,“实际适配中,某些特性无法很好的支持,而产品技术人员也无法给出明确解释,最终只能由适配人员从代码层面着手解决。”


通过市场调研,融云了解到:在 CPU 芯片体系架构上,主要分为 X86、ARM64、MIPS64;在国产操作系统上,市场占有率较高的有中标麒麟、银河麒麟等。在数据库方面,除了考虑市场占有率和品牌外,他们还考虑了特定行业的需求,“最终确定达梦、金仓、神通、南通”。


根据自身产品使用的语言、架构及中间件、适配评估的难度、周期和可行性方面,“我们确定的策略首先是 X86 + 中标麒麟/银河麒麟 + 达梦 &金仓 &神通 &南通,其次是适配 MIPS64,最后是 ARM64 体系。”杨攀说。


目前,融云的适配工作有 10 余人参与,包括服务端研发、PC 端研发和 DevOps 以及部署实施等人员。在实际适配时,团队人员主要分为三类:研发人员负责数据库的适配,DevOps 人员负责中间件在操作系统上的适配,集成测试人员负责适配后的整体测试。

软件坑点和复杂性挑战

适配工作不断推进,“坑”也越来越多。以数据库的适配为例,融云遇到的挑战是对标准 SQL 语法的理解一致性的问题。


据杨攀介绍,适配 SQL 时,不仅对 utf8-mb4 字符集的支持标准不统一,而且报错时,隐式和显式通知也各不相同。为解决该问题,他们投入大量测试资源,对用到 utf-mb4 的业务逻辑,最终通过业务层进行转码来适配。


在适配过程中,“软件坑点”只是困难之一,最大的困难或许是适配复杂性


“产品依赖的一些组件需要进行 OS 层面的适配。例如,用 C 开发的基础组件,包括 Nginx、Redis 和 OpenResty 等,它们在编译过程中需要依赖指定的 glibc 库版本。因此,需要升级 glibc 库操作才可以正常运行。“他说。


并且,国产操作系统版本较多,架构不一致,也会大大提升复杂度。同时,架构不一致也会带来一系列问题,例如基础组件依赖的 OS 内置底层开发环境 glibc 库的版本不一致,需要升级、重新编译或在部署产品过程中处理掉程序的所有相关依赖项,在多个操作系统上进行反复测试,最终达到适配。


此外,除融云自研服务外,依赖的中间件,比如 Nginx、Redis、ActiveMQ 等。对不同的系统内核和基础组件版本,它们在运行时的表现有差异。这需要通过融云完整的单元测试用例和性能测试框架去覆盖功能及性能测试,从而发现潜在问题,“这部分工作也是整个适配过程中复杂度较高的工作内容”。


不过,在杨攀看来,数据库和操作系统的适配工作所面临的挑战和复杂度是不一样的。


操作系统的适配,由于涉及众多组件,主要工作是在不影响性能的前提下,观察整个融云的服务端所有组件及服务在指定操作系统上能否更好的配合起来,良好运行。它更多的工作是进行调优以及验证。


数据库的适配,更多是对 SQL 语法的改写和验证。“不仅功能性的验证工作占比相对多一些,而且代码层面的工作量相对更多,且更加繁琐”。


对 DataPipeline 而言,操作系统和硬件环境的适配更多是靠灵活的部署策略。比如,某些环境容器化运行不稳定,DataPipeline 则提供非容器化的集群部署方式。


陈肃表示,工作量最大且最复杂的是将国产数据库作为数据源和数据目的地进行适配。对于数据源,DataPipeline 通常需要提供基于日志的实时采集和基于 JDBC 的批量查询两种同步方式。但是,不同国产数据库日志记录的原理各不相同,而且对第三方解析的友好支持程度也不同,因此需要投入比较多的精力去解决该问题,并应对一些特殊数据类型的处理。而在数据目的地端,他们面临的主要挑战是如何实现灵活高性能的写入。这通常需要根据数据库特性,提供实时和批量加载两种方式。


虽然有诸多困难,但是在他看来,国产数据库/数据仓库有着自己的优势


优势一是架构的先进性。国产数据库虽然起步较晚,但可以参考成熟产品并结合新理论进行架构方面的创新。国产数据库在水平扩展和分布式容错等方面比较优秀,这是受益于架构先进性。


另外,这波国产化浪潮正好赶上人工智能的风口。在传统数据库运维中,最头疼的是参数调优和故障恢复。以华为 GaussDB 为代表的一些国产数据库,将智能化运维作为重要产品特性加以研发和应用,“这代表了未来方向”


第二个优势是本地化服务。相比国外大厂,国内公司在灵活度、服务成本等方面都有一定优势。另外,国产数据库可根据国家政策对产品和服务进行调整的限制少、周期短,更容易满足国家“安全可控信息技术”方面的法规要求。

10 分钟解决一个 bug

在适配 Oracle 等传统数据库时,遇到问题时,DataPipeline 主要靠官方技术文档来解决。比如,如何提高写入速度,只能通过不断实验进行调优。但是在适配国产数据库时,“我们会和产品方建立比较密切的联系,有技术讨论群,可以找到对方架构师甚至 CTO 讨论问题。”陈肃说。


在 2019 年,有一次,客户反馈某个国产数据库目的地报了写入异常,查看错误提示,得知问题是出于参数数量超过限定值。因为该数据库是高度兼容 MySQL,同样的数据写入 MySQL 却没有问题。


“我们于是把这个 bug 放到技术讨论群里进行反馈,10 分钟就得到答复,而 bug 也在第二周的例行发行版中得到修复。同时,确认该 bug 产生的原因后,我们立即在产品中做了限制,帮客户绕过这个问题。”他说,“这样的响应速度和交流便捷性,是我们在做传统数据库适配时无法想象的。这也是国产软件的优势之一。”


众所周知,在所有行业中,金融行业是对数据库一致性和可靠性的要求是最高的。传统上,这个领域是 Oracle、IBM 等公司的“天下”。


在陈肃看来,截至目前,绝大多数银行的交易系统依然是基于 Oracle 和 DB2。


对银行而言,核心交易系统的升级和替换是一件需要慎重考虑的事情。一方面,即使国产数据库本身足够优秀和稳定,也需要大量测试来保证迁移的平滑和迁移后的稳定;另一方面,大部分现有应用可能包含一些特定数据库的方言,迁移到国产数据库时,由于支持的方言不同,需要经历一个适配过程。


因此,这两点决定国产数据库的存量替换工作在银行核心系统上还有一个相对漫长的过程


对于国产数据库/数据仓库的使用,金融行业更多是从分析系统入手。有些国产数据库,比如 TiDB,它是支持 OLTP 和 OLAP 二合一的。在实际应用中,金融企业一般从数据仓库应用入手,逐步在边缘业务系统或新业务系统使用,最终进入核心系统。


与之相比,互联网公司负担较轻,“我们确实看到一些互联网公司在比较激进地使用国产数据库替代原有数据库,尤其是在大规模的分布式集群应用场景下“。

崛起的国产化软件

无论是 DataPipeline,还是融云,它们只是无数适配企业的一个缩影。在其背后,我们看到的是国产化软件正在崛起。


众所周知,过去四十年,中国在白色家电、消费电子、通信技术、高速铁路、生物医药等领域取得极大进步,甚至在某些领域处于世界领先。但是,在操作系统、数据库等软件系统偏底层的领域,始终主要依赖国外产品。随着中国经济体量的进一步增大,围绕这些核心组件的产品+服务的市场规模不断扩大。按照经济规律,资本和社会资源就会逐渐流向这个领域,推动其发展和落地。


其次,国家层面对“安全可控信息技术”不断深化的要求,催生出存量替换市场。据悉,早在 2014 和 2015 年,国家针对金融行业提出安全可控信息技术推进指南。操作系统、数据库等核心组件是其中的重要组成。并且,随着中美贸易战的爆发,这项措施的必要性更加凸显,这也促使“国产化”在更多部门和行业内加速推进。


此外,还有优秀的人才培养和人才回流。过去几年,国内头部公司培养和招募了国内外大量的优秀人才,其中包括从事操作系统、数据库以及各类分布式中间件的研发人员。并且,随着 IBM、Oracle 在内的国外巨头缩减国内研发中心,一些有丰富经验的工程师相继加入国内公司从事研发工作。


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-03-19 06:003737
用户头像
万佳 前InfoQ编辑

发布了 677 篇内容, 共 335.4 次阅读, 收获喜欢 1795 次。

关注

评论 1 条评论

发布
用户头像
软件国产化,加油!
2020-07-23 19:56
回复
没有更多了
发现更多内容

前端培训机构选择哪些建议

小谷哥

JavaScript——数据类型

胖虎不秃头

前端 js 10月月更

docker-maven-plugin:自动构建Docker镜像,并推送到Docker Registry或阿里云

琦彦

Docker maven 10月月更 docker-maven-plugin

Docker可视化工具Portainer的安装和使用

琦彦

Docker Portainer 10月月更 可视化管理工具

求平方根 (又是辛苦debug的一天)

清风莫追

数据结构 算法 函数 10月月更

JavaScript——关于JavaScript、在HTML中嵌入JS代码的三种方式、变量

胖虎不秃头

前端 js 10月月更

如何以非root用户运行Docker容器

琦彦

Docker 10月月更 root用户

不懂FAQ页面怎么设计?一些产品FAQ页面模板展示!

Baklib

产品 FAQ

浅谈前端工程化的发展以及相关工具介绍

茶无味的一天

大数据培训学习如何选择?

小谷哥

如何零基础学习大数据培训

小谷哥

前端培训学习比较实用的方法

小谷哥

陈宗绵|关于研发效能的理想与现实

laofo

DevOps cicd 研发效能 持续集成 持续交付

反转字符串

清风莫追

数据结构 字符串 10月月更

Timestone: Netflix的高吞吐、低延迟优先级队列系统

俞凡

架构

国庆perfetto学习

留白的艺术

JavaScript——JS事件

胖虎不秃头

前端 js 10月月更

第一个只出现一次的字符 (哈希表、队列两种解法)

清风莫追

数据结构 算法 遍历 字符 10月月更

用纯CSS实现优惠券剪卡风格

茶无味的一天

CSS 前端

慧嗨

kcnf

2022 Kubernetes 批处理和HPC发展一览

琦彦

HPC 批处理 KubeCON 10月月更

基于BuildKit优化Dockerfile的构建

琦彦

Dockerfile 10月月更

构建Java镜像的10个最佳实践

琦彦

Java应用 Docker 镜像 10月月更

Spring 项目启动测试的时候错误:Unable to acquire JDBC Connection

HoneyMoose

自学java培训之间学习方法有哪些

小谷哥

二分查找

掘金安东尼

算法 10月月更

利用Vue自定义指令让你的开发变得更优雅

茶无味的一天

Vue 前端 vue指令

vue快速入门---高速版

楠羽

笔记 VUE 3.0 源码 10月月更

Qt|控件的事件过滤使用与总结

中国好公民st

c++ qt 10月月更

Docker层和虚悬镜像(dangling image)介绍

琦彦

Docker 10月月更

推荐一款工具,辅助估算线程池参数

xiaoxi666

线程池

做软件国产化,我们太难了_安全_万佳_InfoQ精选文章