写点什么

工业软件云化突围战,Webassembly 如何成为重要一环?| 专访三维家陈江豪

  • 2022-08-24
    北京
  • 本文字数:3837 字

    阅读完需:约 13 分钟

工业软件云化突围战,Webassembly 如何成为重要一环?| 专访三维家陈江豪

采访嘉宾 | 陈江豪

采访编辑 | 闫园园

 

Webassembly (以下简称 Wasm)专题系列文章中,InfoQ 对《深入浅出 Webassembly》作者于航就 Wasm 应用现状进行了采访。访谈中,于航提到一个值得关注的现象:当下对于更多开发者来说,关注点已经从 Wasm 这门技术本身转移到了它的具体应用场景中。

 

近日,InfoQ 有幸接触到了聚焦于大家居产业的云工业软件服务商三维家,通过了解,三维家在软件云化过程中正是应用了 Wasm。那么,工业软件和 Wasm 之间能擦出怎样的火花,其中有何可以借鉴的经验呢?带着对这些问题,InfoQ 采访了三维家技术研究院基础平台负责人陈江豪。此外值得关注的是,陈江豪老师还将在 9 月 17 日-19 日 的 QCon全球软件开发大会前端前沿技术】专题分会场分享《百万级代码工业软件的云端综合实战》的演讲,进一步分享三维家在家居行业利用 Wasm 和 Web3D 等技术的前沿研究探索和技术成果,以及新一代云工业软件的未来趋势。

 

工业软件的出路在于云化

 

众所周知,工业软件“卡脖子”问题由来已久。所谓工业软件,是指专用于或主要用于工业领域,为提高工业企业研发、制造、生产管理水平和工业装备性能的软件。其中,根据产品形态、用途和特点的不同,业界一般分为研发设计、生产控制、经营管理、运维服务四大类。

 

根据统计数据显示,截至 2018 年底,中国工业软件市场规模只占全球总量的 6% 左右。可以看出,国内工业软件整体发展受限,被国外垄断现象严重。究其背后的原因在于国外起步较早,形成了一定的市场生态,同时工业软件需要跨学科和复杂的知识系统沉淀,而国内在这些方面起步较晚,因此差距也逐渐形成。

 

为了缩小差距,国内工业软件纷纷寻找解决方法。从实际来看,垂直领域的“突围战”正在进行中。以三维家为例,其所在的家居工业软件赛道正是典型的垂类工业软件,“目前家居工业软件赛道跟国外相比,甚至在设计软件的某些方面我们是领先的。”陈江豪介绍道。

 

同时,云时代的到来,工业软件的云化也逐渐成为新的趋势。这也给工业软件带来又一个机遇,毕竟在云化方面,大家所处同一起跑线,谁能抢先一步,也意味着将在行业处于领先位置。“云时代,把 PC 端的工业软件搬到云上去,是此时家居工业软件赛道的重要任务。”

 

而面对这个重要任务,三维家选择了 Wasm 作为重要技术支撑之一。


三维家产品使用场景

Wasm :为工业软件云化提供一把梯子

 

2015 年 Wasm 诞生。而早在 2017 年,三维家技术团队就开始尝试采用了 Wasm 。谈及为何相关实践走在如此前列时,陈江豪谈到主要在于团队抓住 Wasm 的特性,并且认为它能够很好的契合项目需求。首先,从 Wasm 本身来看,它有三个比较大的技术优势值得关注:

 

  • 高性能。这是 Wasm 最值得称道的优势,毕竟从定义看,Wasm 就是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行。

  • 跨平台。众所周知,在 Wasm 诞生之初,是运行在浏览器中的,而浏览器可以运行在 PC 端或是移动端,所以它天生就拥有跨平台特性。从这方面来说,Wasm 可以实现一套代码多端应用,从而也做到了节约开发成本。

  • 安全性。Wasm 是一种二进制文件,对于一般语言而言,比较难破解;另一方面,因为它运行在浏览器中,自然也拥有浏览器提供的安全沙箱环境,这样一来,可以有效弥补自身漏洞,防止被攻击或者被黑客挟持。

 

“云时代,Wasm 能为我们上云提供一把便利的梯子。”时间拨回到 2017 年之前,三维家早期开发的家装工业软件属于前端软件,并且前端网页基于 Flash——一款当时最方便易用的矢量工具、动画工具、结合矢量位图动画的编程工具。然而,在 2017 年,Adobe 宣布将放弃 Flash,而这一消息直接促使三维家技术团队开始寻求以最新的云化方案重构原来的方案。

 

陈江豪回忆,最新的云化方案,也面临着诸多挑战。不过,虽然任务紧迫,但团队对云化方案中的技术选型还是非常谨慎的,并且根据当时的技术体系提出了两点要求:

 

  • 第一,满足核心诉求。把在 Flash 上积累的经验,包括一些核心 C++ 资产库等快速地投入使用。

  • 第二,满足个性要求。三维家自研软件功能庞大,并且有高密度计算,对性能要求高;同时为了提高用户体验,软件体积要求轻量化。

 

在这两点要求下,三维家最终将目光瞄准了 Wasm,并开始了正式接触及研发 。


云设计软件界面

Wasm 应用实践之路

 

作为家装类的工业软件,三维家平台涉及诸多算法,特别是 CAD,都是基于 C++ 的。如果为了上云而将之前积累的模型库、工艺库等资产进行重写是性价比极低的,因此,三维家开始尝试将核心的 C++ 库,其中主要是低运算密度高聚合的 C++ 库进行 Wasm 转换。“Wasm 给我们带来的好处是巨大的,特别在性能方面。”陈江豪谈到。

 

通过实践,三维家将渲染引擎和几何引擎核心库等底层模块 Wasm 化,同时将应用层的业务部分转换成 Typescript,如此结合,既实现了使 C++ 资产能够快速转应用,又满足了项目敏捷开发的需求,逐渐成为团队最常见的技术路线。据了解,三维家核心 C++ 库的 Wasm 的转换在将近半年左右时间上线了 MVP 版本,而后便进入了不断打磨的过程。

 

然而,三维家对 Wasm 的应用并未止步于此,在后续项目开发过程中,诸多新的业务场景中也继续采用了 Wasm。陈江豪举例,“目前三维家三大基础底座之一的 AI 引擎的功能以及自研 CAD 部分均使用了 Wasm 。”

 

那么在应用 Wasm 之后,对于项目来说究竟能否感知到变化呢?陈江豪告诉 InfoQ,其中的变化,要分为两个方面来看:

 

一方面,三维家把原来的 C++ 库进行 Wasm 化,并且转移到云端上去。首先,项目转换后,在性能方面不但没有太大的损耗,甚至在某些场景下超越了之前,其次,也使得核心资产库能够在云化过程中得到快速复用,从而提升了云化效率;

 

第二方面,在新场景中采用 Wasm,也是利用了这门技术的诸多优势,如高并行、计算性高、跨平台等特性。

 

“从结果来看,应用的效果也在这些方面得到了体现。”陈江豪表示,“当然,没有数据支撑多少有点耍流氓,从我们的相关测试用例来看,从性能方面来说,转换完成后有十倍到十几倍的提升。官方用例也是这个程度。”

 

不难看到,作为国内最早一批 Wasm 的先行者,三维家技术团队利用 Wasm,的确为工业软件上云带来了极大的便利。但是,作为一门还属于创新阶段的新技术,除了能够带来诸多优势之外,其本身的局限性也不免会给开发工作带来一定难度。这里,三维家也分享了自己踩过的“坑”。

 

首先,Wasm 的内存限制。目前,Wasm 能使用的最大内存有限制,各个浏览器的限制都不同,一般为 2G,最多支持 4G。

 

“内存问题是我们遇到的一个很大的挑战。”陈江豪坦言。对此,他介绍三维家技术团队采用了三个方法来解决这个问题:

 

  • 在技术手段上面,重构一部分代码,对内存进行控制;

  • 尝试使用内存技术,比如内存池,对象池等;

  • 最后,从产品形态上去规避内存高峰。所谓内存高峰是导致 Wasm 内存限制的条件之一,因此,从这方面入手,三维家技术团队也采用了相关错峰技术手段。

 

其次,Wasm 性能问题。引入 SIMD 做性能提升,尤其是在高密度运算方面,能够有更高的提升性能的效果。但陈江豪也在这里提醒大家,SIMD 本身也有缺陷,即不是所有浏览器都支持。

 

最后,在项目进行 Wasm 化过程中,需要 Wasm 化的 C++代码与业务深度绑定的问题也时常存在。“类似这种问题,无法避免地,我们需要对业务代码进行解耦。”

 

写在最后

 

从三维家对于 Wasm 的实践中,不难看到,Wasm 能够帮助工业软件在云化过程中,快速复用原有资产库,提高云化效率,并且使应用获得跨平台、更轻量等诸多新特性。那么,对于更多项目和团队来说,看到了诸多好处,又如何快速、准确的自己在技术选型过程中判断是否应该采用 Wasm 呢?在本次采访的最后,陈江豪对此提出了自己的几点看法:

 

首先,Web 项目中如若涉及跨平台、提升性能、控制包大小以及高密度计算等需求,比较适合采用 Wasm。 Wasm 天生适合 Web,性能也是 js 的几倍到几十倍,而二进制的 Wasm 也比文本式的脚本语言体积小。此外,Wasm 的使用是有技术门槛的,选择 Wasm 的团队需要衡量更多因素包括技术和非技术因素。

 

第二,C++ 资产云化。“C++资产云化有多种手段,如各种服务器编程语言调用 C++、直接包装 C++提供 HTTP 服务、使用阿里的函数式服务等等。但偏前端的 C++模块云化的路线,Wasm 是一个比较理想的选择。”

 

当然,采用任何一门新技术,不免都需要考虑到其自身的不稳定性和未知性。因此,在项目研发过程中,陈江豪建议最好尝试先做最小产品闭环,一旦验证符合预期,能够契合项目需求,再做进一步大规模应用。

嘉宾介绍:



陈江豪

三维家技术研究院 基础平台负责人

 

广东三维家信息科技有限公司技术研究院基础平台负责人 &高级平台技术专家。主要技术方向为前端底层平台技术及后端微服务和云原生技术。先后从事教育、游戏及家居行业,对互联网和工业软件有独特见解,负责过公司百万级前端代码的技术转型项目及公司前沿产品的平台支持。现负责三维家渲染及 AI 基础平台支持。


9 月 17 日-19 日,QCon全球软件开发大会即将落地北京·富力万丽酒店,陈江豪老师将在【前端前沿技术】专题分会场分享《百万级代码工业软件的云端综合实战》的演讲,带你了解三维家在家居行业利用 WebAssembly 和 Web3D 等技术的前沿研究探索和技术成果,以及新一代云工业软件的未来趋势。除此之外,本次 QCon 邀请来自微软、华为、腾讯、百度、阿里、蚂蚁、火山引擎、网易、美团、快手、小红书、涛思数据、OPPO、大疆、德邦、华泰证券、PingCAP、OpenResty、Second State、DCloud 等国内外一线大咖分享 100+ 精彩演讲,不容错过,点击直达大会官网

2022-08-24 16:485250

评论

发布
暂无评论
发现更多内容

JUnit速查手册

jiangling500

Java JUnit

深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!

Python猫

Python 编程

日记 2021年2月15日(周一)

Changing Lin

2月春节不断更

面试官系列:你对Spring事件发布和广播监听有了解吗?

后台技术汇

面试 2月春节不断更

10. 比找女朋友还难的技术点,Python 面向对象

梦想橡皮擦

Python 2月春节不断更 python入门

中国科学家突破区块链核心技术

CECBC

区块链

【LeetCode】最大连续1的个数Java题解

Albert

算法 LeetCode 2月春节不断更

日记 2021年2月14日(周日)

Changing Lin

2月春节不断更

第十二周学习总结

Binary

熬夜7天,我总结了JavaScript与ES的25个重要知识点!

我是哪吒

学习 程序员 面试 大前端 2月春节不断更

保持模块的兼容性

Rayjun

go modules Go 语言

松耦合

sinsy

设计模式 RabbitMQ

SpringMVC专栏 第1篇 - 快速入门

小马哥

Java spring Spring MVC 七日更 二月春节不断更

第十二周课后作业

Binary

诊所数字化从预约开始

boshi

数字化医疗 七日更 线上预约

【LeetCode】情侣牵手Java题解

Albert

算法 LeetCode 2月春节不断更

深入理解gradle中的task

程序那些事

Java maven Gradle 程序那些事 构建工具

数字资产助力未来十年打赢数字经济战

CECBC

数字经济

华为 MPLS的数据转发流程

艺博东

华为

Idea应用启动时WEB-INF/lib无效标记问题处理

程序员架构进阶

Java IntelliJ IDEA 七日更 2月春节不断更

翻译:《实用的Python编程》01_03_Numbers

codists

Python

Tomcat异常: Unable to process Jar entry [module-info.class] from Jar

小马哥

Java maven 七日更 二月春节不断更

记一次有意思的微信视频号直播

小匚

产品经理

机器学习笔记之:

Nydia

今日出门

Nydia

Elasticsearch dynamic mapping

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

【STM32】串口通信出现乱码(使用官方标准库)

AXYZdong

硬件 stm32 2月春节不断更

工作学习累了?试试 GitHub 上的那些简单易学的游戏项目吧!

JackTian

GitHub 开源 游戏 2月春节不断更

公路交通区块链技术的痛点问题和典型场景应用

CECBC

区块链

《我们脑中挥之不去的问题》 - 卓克科普(3)

石云升

读书笔记 科普 2月春节不断更

ElasticSearch.01-简介

insight

elasticsearch 2月春节不断更

工业软件云化突围战,Webassembly 如何成为重要一环?| 专访三维家陈江豪_大前端_闫园园_InfoQ精选文章