iTwin相关技术,代表Bentley公司多年技术积累。这里分享相关实现思路和关键技术实现路径。目标是介绍地球另一边的团队是如何开发CAD,换一种思路。以技术介绍为主,少量花边新闻。分享资料来自各种来源,尽量使用公开资料。未公开资料为主观臆测,如有雷同纯属巧合。

技术传承 – MicroStation历史

iTwin的开发团队,与MicroStation团队高度重合。因此可以说iTwin是MicroStation的技术传承,尽管他们完全不同的形态,但是从代码来看,神似形不似。这里介绍下相关的历史。

从文件格式,关键项目的历史看:

为什么开发iTwin? 我在另外一个文章里给出了最重要的原因:CAD淘金热。Bentley作为老牌公司,在经过多年的研发之后,计划浴火重生。同时,这也是第一代创业者的最后努力了。Keith Bentley,宣布退休

名词解释

名词 解释
DGN 两个版本DGN V7, DGN V8。 V8只有windows可用。底层存储为OLE structured storage。DGN文件与MicroStation Workspace集成,构成基于文件的项目数据存储。
iModel 最初为DGN with EC(i-Model),还是DGN文件。后来指以SQLite为存储引擎的新一代格式,为端云统一数据存储系统。版本:1.0 (DGN,只读),1.5(SQLIte,可读可写,mobiledgn 5.5),1.6(SQLIte,可读可写,mobiledgn6.0),2.0(SQLIte,协同编辑,BIM)。Microstation支持显示,数据导出到iModel。
EC(Engineering Content), ECFramework, 工程数据框架。2002年左右开始开发。MicroStation XM版本开始,成为DGN文件格式的一部分。由EC Schema(XML文件定义),EC Framework, ECPlugin等部分组成。包括数据格式定义,数据对象实现,DGN支持插件等具体实现。
iModel.js, iTiwin.js iTwin.js最初为iModel.js,iTwin是PaaS服务的名字。统一命名之后,iModel.js改为iTwin.js,但是在代码中,很多还没有修改。作为开源的技术框架,支持用户开发iTwin服务。
iTwin Platform PaaS平台,可独立部署。与iModelHub区别较大,很多服务没有集成。
iModelHub Bentley公司部署的iModel服务,部署在Azure,与Bentley公司其他的云服务集成。
iTwin Services 支持PaaS服务所需要的账户服务,开发服务等其他服务。由Bentley管理和部署。

iTwin技术栈

拥抱开源:

iTwin代表Bentley公司新一代的图形平台,提供数字孪生解决方案,Bentley已经有相关桌面产品基于iTwin技术栈重新开发。iTwin相关技术栈,是为了解决大型CAD开发维护困难,而客户对云服务的需求越来越多,数字孪生迫切需要新的图形平台。作为Bentley2.0战略的核心技术架构,是Bentley公司老一代工程师的技术结晶:

  • iTwin.js:核心模块(iModelCore)闭源,与合作伙伴共享代码共同开发(西门子)。显示,数据交换等模块开源,Javascript技术栈。支持桌面,移动设备,云端等多端平台
  • iModelHub:Bentley公司提供的SaaS服务,提供iModel数据集成,协同设计,项目管理等云服务
  • iTwin Platform:PaaS服务平台,为客户提供数字孪生解决方案。核心是iModelCore封装后的iModelBank服务。提供数据集成服务。协同设计等服务由客户开发。

技术拼图

iModel如何使用

  • iModel是数据库系统,基于SQLite开发。
  • iModel在云端,桌面,移动设备有不同的存储方式。
  • iModel提供基于变更的数据库,类似git;iModelHub提供集成数据环境,项目管理,协同设计,类似github。
  • 云端微服务架构,微服务使用iModel.js作为接口,使用iModel数据库。

iModel.js与iModelHub

  • iModel.js(iTwin.js)是开源的iModel读写库
  • iModelCore:C++代码库。封装SQLite, ECSQL, BIS等技术,提供iModel核心功能
  • iModelNative:Node.js的扩展模块。封装iModelCore,提供Javascript接口。
  • iModel.js提供数据读写,WebGL显示等功能
  • iModel.js可以嵌入云端,移动端,桌面端。
  • iModelHub是Bentley公司的SAAS服务
  • 很多云服务并没有在iTwin Platform中提供

iModelHub与iTwin Platform的区别

iTwin相关核心技术栈式共享的。很多云服务也在逐步融合。iModelHub正在逐步迁移至K8S。

iTwin应用

下面几张图展示了相关的应用架构:

iModel版本管理

总结

iTwin的开发,代表了新的CAD开发思路。当然太阳底下没有新鲜事,这些架构设计也不是创新,只是在CAD这个古老的行业,有了新的实现思路,而且已经落地并实现。

关键技术

iModelCore:核心模块

iModelDb是描述不同存储形式的SQLite数据库。BIS既是工程数据定义格式,也是描述数据、SQLite表、字段如何映射的描述文件。

名称 存储形式 功能
Snapshot快照 SQLite文件 •只读 •
Briefcases SQLite文件 + Changesets二进制文件 •与iModelHub同步,支持变更
对象存储 SQLite数据库,使用对象存储保存数据 •iModelHub云端存储形式
Changesets 基线SQLite文件 + Changesets二进制文件 •iTwin(iModelBank)存储形式

iModel数据库逻辑层次:

与git的三路合并不同,类似rebase的方式。与Fossil类似。底层基于SQLite Session API实现。这是Bentley公司委托SQLite开发团队开发并开源。

BIS: Base Infrastructure Schemas。定义来自Bentley公司现有的软件的数据定义和相关处理逻辑。支持版本,支持扩展。iModel使用的Schema保存在数据库中,自包含。ECSchema是表达BIS的定义格式。可以从以下网站查看现有的BIS定义:https://imodelschemaeditor.bentley.com/

iTwin .js

软件架构图:

Presentation

  • Presentation包括前后端,其帮助iModel中检索数据,并负责统一选择。
  • 从iModel中检索的数据是由用户使用规则以声明方式定义的,这就是为什么该库通常称为“表示规则引擎”。
  • 基于ECSQL, ECSchema实现。方便用户无代码实现元素的检索和显示

这一系列文章会介绍iTwin相关的开发技术,并不会非常详细。整体设计背后有很多考虑,这里只能简单介绍相关技术。本文内容为ppt的浓缩版