标签 AIoT 下的文章

随着人工智能(AI)技术的不断进步和广泛应用,AI已经渗透到金融、医疗、制造、自动驾驶等多个行业。尽管AI带来了巨大的创新和效率提升,但随着其应用范围的扩大,AI的安全性问题也逐渐暴露出来。AI应用安全不仅仅局限于算法模型的本身,更多的是涉及数据隐私、对抗攻击、模型滥用、合规性问题以及垂直行业应用中的特殊风险。因此,企业需要全面识别并应对这些AI应用中的潜在风险,构建健全的AI安全管理体系。

一、AI应用安全的核心挑战
AI应用的安全风险源自多个层面,既包括算法层面的风险,也涉及数据、系统、法律等多维度的安全隐患。
1.1 AI模型算法滥用风险
随着AI生成内容的普及,模型算法的滥用已成为迫切需要解决的安全隐患。特别是在生成式AI领域,AI模型可能被用来生成虚假信息、深度伪造内容等,直接影响社会舆论,甚至对企业造成直接经济损失。

  1. 虚假有害信息的传播:生成的AI内容可能被恶意用于传播虚假信息、误导公众、制造恐慌或进行欺诈活动。例如,某些不法分子利用AI生成的新闻报道或虚假视频,制造社会不稳定因素。
  2. 多模态深度伪造的风险:深度伪造技术融合了视频、音频、文本等多模态内容,生成高度逼真的虚假信息。这类攻击不仅可能带来经济损失,还会破坏公众的信任基础,影响法律和社会规范的实施。
  3. 模型透明性不足:AI应用在实际运行中,许多模型尤其是复杂的深度学习模型,往往缺乏足够的透明度,用户无法理解模型的决策过程。这种“黑箱”性质不仅增加了用户的使用风险,也使得当出现错误决策时,问题难以被迅速定位和解决。

1.2 AI应用开发安全风险
AI应用开发不仅仅是技术问题,还涉及硬件、软件以及协同环境的整合,这就使得AI开发中的安全风险更加复杂和多样化。

  1. 端侧AI安全风险:在边缘计算环境中,由于端侧设备的硬件限制,AI模型可能需要进行压缩或优化,这样的处理虽然可以提升运行效率,但也可能导致模型的鲁棒性和安全性下降,出现性能下降或“安全税”现象。此外,端侧部署通常要求在设备端实现实时推理,并依赖云边协同架构进行模型更新和任务调度,这也带来了异构硬件兼容性和网络延迟等潜在风险。
  2. 智能体的安全风险:AI智能体是由AI模型驱动的自主系统,能够执行复杂任务。随着AI智能体与外部环境的不断交互,智能体的安全风险也在增加。攻击者可能通过篡改协议或利用自主决策链路的不可预测性,导致智能体做出错误决策,从而产生安全漏洞。
  3. 具身智能的安全隐患:具身智能涉及到现实世界中的物理行动,其安全风险不容忽视。传感器设备可能泄露个人信息,具身智能体的物理行为可能被恶意攻击者控制,从而导致人身伤害或财产损失。例如,服务机器人操作不当,或自动驾驶汽车发生事故,都是具身智能安全风险的典型表现。
  4. 智能物联网(AIoT)安全:智能物联网设备融合了AI算法与物联网的物理特性,部署在受限的边缘环境中,面临着传感器噪声、物理攻击、以及复杂环境干扰等问题。与传统物联网设备相比,AIoT还面临着AI特有的安全威胁,如对抗样本攻击、训练数据投毒和模型窃取等问题。

1.3 AI垂直行业应用的安全风险
AI技术在垂直行业的应用,虽然带来了行业的革新,但也带来了独特的安全风险。不同的行业面临的AI应用安全问题各具特点。

  1. AI在医疗行业的安全风险:AI在医疗领域的应用极大地提高了诊断效率和精确度,但也伴随着巨大的技术与伦理风险。训练数据的偏差、系统漏洞可能导致医疗设备发生错误,甚至误诊。此外,AI系统在处理敏感的患者信息时,若未采取充分的加密与权限管理,可能会导致患者隐私泄露,进而带来法律与伦理上的问题。
  2. AI在新闻领域的滥用风险:随着AI生成内容技术的普及,新闻行业面临着虚假新闻传播的风险。某些不法分子可能利用AI模型生成虚假报道、伪造证据,借此操纵舆论或进行诈骗活动。如何确保生成内容的真实性与可信度,成为新闻行业亟待解决的安全挑战。
  3. AI在金融行业的安全风险:金融行业的AI应用包括身份验证、交易监控等多个方面,面临着深度伪造技术带来的身份验证问题。攻击者通过深度伪造技术伪造身份信息,可能突破金融机构的身份核查系统,实施盗刷或恶意注册等欺诈行为,造成极大的经济损失。
  4. AI在编程领域的安全风险:AI辅助编程不仅提高了开发效率,但也带来了代码安全隐患。AI生成的代码可能存在常见漏洞(如SQL注入、跨站脚本攻击等),同时AI生成的代码缺乏架构设计,可能导致后期维护困难。由于过度依赖AI生成的代码,开发人员可能减少了必要的人工审查,从而放大了潜在的安全风险。

二、AI应用安全的解决方案与应对措施
针对上述AI应用中的安全风险,企业需要采取多维度的防护措施,构建全方位的AI安全管理体系。
2.1 提高模型的鲁棒性和透明性
为了应对AI模型的滥用风险,企业应加大对AI模型的鲁棒性和透明度的建设。例如,采用对抗训练增强模型的抗干扰能力,采用可解释性AI(XAI)技术提升模型的透明度,帮助用户理解决策过程,从而降低不当信任的风险。
2.2 强化数据保护与隐私管理
在AI应用过程中,数据是最核心的资产之一。企业应实施数据加密、访问控制、数据脱敏等技术,确保数据的隐私性和安全性。此外,企业应遵守相关的法律法规,如GDPR等,确保数据使用的合法合规。
2.3 强化安全检测与监控
企业需要在AI模型开发与应用过程中加入安全检测与监控机制,实时发现潜在的安全隐患。例如,利用自动化工具扫描AI模型的依赖组件,识别潜在漏洞,及时修复,并部署AI安全监控系统,实时监控模型的运行状态和异常行为。
2.4 建立合规性框架
AI应用不仅要在技术上保障安全,还需要满足法律法规的合规性要求。企业应构建全面的AI合规性框架,制定AI应用的合规性审查标准,确保AI技术在法律法规框架下运行。

三、艾体宝Mend价值
Mend通过其全面的软件组成分析(SCA)与依赖治理功能,在模型安全方面发挥了关键作用,帮助企业应对AI模型开发、训练、部署和维护过程中面临的安全挑战。具体价值体现在以下几个方面:

3.1 识别和治理AI应用依赖中的安全风险
AI应用往往依赖于多个开源库和第三方组件,而这些组件可能带有安全隐患。Mend通过自动化的SCA工具,能够深入识别和分析AI应用中所依赖的开源库及第三方组件,实时扫描每个依赖组件的安全风险。无论是AI平台、训练框架、容器镜像,还是MLOps流水线中的每一层,Mend都能够精确检测出潜在的漏洞、许可证问题和版本不兼容等安全风险。企业可以借助Mend的实时扫描功能,提前识别并解决这些隐患,避免将不安全的依赖组件引入AI应用,从而减少因依赖漏洞带来的应用安全风险。

3.2 构建透明的SBOM体系,确保合规性
AI应用不仅需要从技术层面防护,还必须符合相关的合规要求。Mend帮助企业构建和管理全面的安全SBOM(软件物料清单)体系,生成覆盖整个AI应用栈的SBOM清单。这一清单为合规审计、漏洞报告和监管备案提供了透明和准确的数据支持。通过Mend的SBOM工具,企业能够清晰地掌握AI应用中每个组件的来源、版本及其安全状况,从而确保模型和应用的安全性与合规性,避免因信息不透明而引发的法律和合规问题。通过这种全面的管理,Mend帮助企业在复杂的合规环境中确保AI应用的合法性与合规性。

3.3 防范对抗攻击与漏洞利用
Mend通过对AI模型进行真实的红队模拟交互,模拟攻击者的行为,测试模型对恶意输入、提示词注入以及其他对抗攻击的防御能力。Mend通过模拟各种可能的攻击情境,实际验证模型在面对各种恶意输入时的响应能力和稳定性。通过这种方式,Mend能够识别出潜在的安全漏洞,并提供针对性的防御策略,帮助企业提前发现并修复可能被攻击者利用的弱点。

引言

支持在同一实例中同时建立时序库和关系库,进行多模数据的融合处理,是KaiwuDB 的一大核心优势。这其中一致可靠的数据持久化离不开底层存储引擎的支持。

众所周知,关系库与时序库服务于不同的数据使用场景,因此,需要不同的存储引擎来针对性地优化性能。关系数据库需要处理复杂的数据结构和多样化的查询请求,包括多表关联和随机读写操作等。这要求关系存储引擎能够支持高效的数据检索、更新和事务处理,同时保持数据的完整性和一致性。相对地,时序库主要处理按时间顺序记录的数据,通常以连续的方式写入,具有高度的时间相关性。正因如此,时序存储引擎的关键设计需求,就是要保证快速处理大量顺序写入的数据。

KaiwuDB 3.0 时序存储引擎架构

KaiwuDB 自主研发的时序存储引擎,专为物联网及工业互联网设备产生的时序数据进行了深度优化。时序数据应用场景的一个显著的特点是:数据的写入频率远超读取频率——这与传统的关系型数据管理有着本质的区别。针对时序数据场景,KaiwuDB 采用列式存储架构,每列数据被独立存储于各自的文件块中。这种列式存储方式具备多项优势:减少磁盘 I/O、提高 CPU 缓存性能、提高压缩效率、支持向量处理。

KaiwuDB 时序引擎使用内存映射(Mmap)技术对这些持久化列存数据文件进行读写。Mmap 通过将文件内容直接映射到进程的地址空间,减少了数据在用户空间和内核空间之间的拷贝,实现了文件 I/O 操作的高效性。Mmap 利用操作系统的页缓存机制来优化文件访问,提高了数据访问的速度和一致性,同时减少了内存的使用。Mmap 在处理大型文件和需要高效文件共享的场景中作用尤其突出。这也正是时序数据库所面向的典型场景。

1. 存储结构

KaiwuDB 的底层时序存储首先基于设备主键(Primary Tag)进行哈希(Hash)划分,将设备数据分配到不同的 VGroup 中,每个 VGroup 中可以存储不同表,不同设备的数据,而且不受限于设备的数量。每个 VGroup 内通过时间分区进行数据分组管理,方便快速通过时间过滤查询。所有持久化文件均采用列存结构,以保证优秀的压缩效果、查询和就地计算性能。时序存储引擎将所有时序数据存放在目录./kwbase-data/tsdb下。存储结构整体可分为三部分:

✅元数据:存储各个表的元数据信息,位于schema目录下,如78.tag.et(Tag 表索引)、78.tag.mt(Tag 元数据)等;

数据文件:分为 LastSegment 与 EntitySegment 两类,前者由内存刷盘生成(文件名如last.ver-000000001020),存储较新数据;后者由多个 LastSegment 合并而成(包含block.ver-*header.e.ver-*等文件组),存储长期数据。下面示例中的 vg_001 ~ vg_004用于存储数据;

✅WAL:位于wal目录下,记录写前日志,确保系统崩溃时的数据一致性,分为 ddl、engine、各 VGroup 专属 WAL 文件。

一个典型的时序库路径如下:

├── schema
│   └── 78                          //表ID
│       ├── metric
│       │   └── 78.bt_1            // 不同版本的Metric数据
│       └── tag
│           ├── 78.tag.et           // Tag表的Entity Row Index数据文件
│           ├── 78.tag.ht           // Tag表的Hash Index数据文件
│           ├── 78.tag.mt_1         // 不同版本的Tag元数据
│           └── tag_version_1       // Tag表版本1 数据目录
│               ├── 78.tag.header   // Tag表的Delete Mark数据文件
│               ├── 78.tag.mt       // 该版本的Tag元数据
│               ├── 78.tag.pt       // Tag表的Primary Tag数据文件
│               └── 78.tag.rinfo    // Tag表的OSN数据文件
├── vg_001                                // VGroup-1 数据目录
│   ├── CURRENT                          // 版本控制文件
│   ├── db00077_+0001726272000           // 库目录,1726272000为分区时间
│   │   ├── agg.ver-000000000006        // 聚合文件,记录每个数据块的聚合信息
│   │   ├── block.ver-000000000005      // 数据块文件,以压缩形式存储
│   │   ├── entity_count.item           // count文件,统计各个设备的数据条数
│   │   ├── header.b.ver-000000000004   // Block Header文件,记录数据块的元信息
│   │   ├── header.e.ver-000000001015   // Entity Header文件,记录各个设备的元信息
│   │   ├── last.ver-000000001001       // LastSegment文件,由内存刷盘形成
│   │   ├── last.ver-000000001006
│   │   ├── last.ver-000000001016
│   │   ├── last.ver-000000001017
│   │   ├── last.ver-000000001020
│   │   └── partition_del.item          // 记录标记删除信息
│   ├── db00077_+0001727136000
│   │   ...
│   └── TSVERSION-000000000000           // 版本控制文件
├── vg_002
│   ├── ...
├── vg_003
│   ├── ...
├── vg_004
│   ├── ...
└── wal
    ├── ddl
    │   ├── KaiwuDB_wal.cur
    │   └── KaiwuDB_wal.meta
    ├── engine
    │   ├── KaiwuDB_wal.cur
    │   └── KaiwuDB_wal.meta
    ├── vg_001
    │   ├── KaiwuDB_wal.cur
    │   └── KaiwuDB_wal.meta
    ├── vg_002
    │   ├── ...
    ├── vg_003
    │   ├── ...
    └── vg_004
        └──  ...

在每个 VGroup 下,数据会按照库 ID 和时间戳进行分组分区,每个分区路径下存放原始数据以及聚合数据的相关信息。LastSegment 和 EntitySegment 两种数据文件都是按“Block”(块)来组织数据的,通过调整块的大小,可以在压缩效果和查询速度之间找到一个较好的平衡点。

LastSegment:对应文件名last.ver-000000000006等文件,LastSegment 由内存刷盘产生。LastSegment 中以 Block 组织数据,每个 Block 可能会包含多个设备的数据,Block 内的数据以列存格式存储。文件采用如下编码顺序:


其中数据块部分用于存放列存数据,块信息部分存储如何解析数据块(记录每块中每列的偏移,数据条数等),块索引记录简单的聚合信息用于查询时的快速过滤,元数据块为可选项,以提供部分拓展支持,Footer 用于记录索引块的数量和偏移。

当 LastSegment 数量满足一定阈值时,后台任务会自动将多个 LastSegment 文件合并,如果同一设备的数据条数达到 EntitySegment 中 Block 的最小阈值,就会将这部分数据追加写入到 EntitySegment 中。而不满足数据的将写入到一个新的 LastSegment 文件中。

EntitySegment:对应文件组block.ver-*header.e.ver-*header.b.ver-*agg.ver-*四个文件,Block 文件用于存储原始数据,header.e 与 header.b 用于存索引信息,Agg 文件存储每个 Block 的聚合结果。EntitySegment 中的 Block 数据是列存压缩的,且只存储同一设备的数据,并按照时间戳排序。每个分区下,通常只有一组 EntitySegment 文件。EntitySegment 文件由多个 LastSegment 合并而成,为保证原子化,在合并时 block, header.b, Agg 文件均为追加写,header.e 会重写。header.e、header.b 文件为索引文件,大致结构如下:

每个设备的 BlockItem 都串成一个链表。可以将 header.e 理解为记录链表头,header.b 理解为记录链表内节点,每次刷盘更新时,将链表节点追加到 header.b 文件中,同时更新 header.e 记录的链表头。Block 和 Agg 数据分别追加到 Block 和 Agg 文件中,由于 header.b 中记录了该 Block 对应的偏移,在未来可能的查询中通过 header.b 记录的 BlockItem 结构即可查询到该 Block。Block 和 Agg 的文件结构分别如下:

📌 KaiwuDB 3.0 时序存储的特点

• 时序存储会根据设备的主键(Primary Tag) 拆分到不同 VGroup 中。

• 随着时序数据的写入,会按照写入时序数据的时间戳来写入不同的分区目录。

• 支持历史分区的写入、导入。

• 以 Block 为单位进行实时压缩,针对不同数据类型采取相应的压缩算法。

2. 数据读写流程

2.1 存储读写架构

在时序存储模块中,数据将按照三层结构进行划分与管理,各层承担不同的功能,具体如下:

✅MemSegment:完全驻留于内存中。其核心作用是对实时写入的时序数据进行快速整合与排序,通过内存级别的高效操作,确保数据在初步存储阶段就保持有序状态,为后续的持久化和查询加速奠定基础。由于内存的高速访问特性,MemSegment 能显著降低实时写入时的排序延迟,提升整体数据处理吞吐量。

✅LastSegment:当 MemSegment 达到阈值时,会被持久化到磁盘中变成 LastSegment 文件,通常保持较新的数据。它由 MemSegment 中刷盘而来,避免了内存数据因容量限制丢失的风险,又通过磁盘存储为数据提供了持久化保障。同时,由于存储的是相对较新的数据,LastSegment 也会作为高频查询的优先访问对象,平衡数据持久性与查询效率。

✅EntitySegment:同样以持久化形式存储在磁盘上。这些数据通常是从 LastSegment 中进一步合并、压缩而来,按照时序数据的设备 ID 进行归类存储。EntitySegment 侧重于数据的长期留存与高效检索,通过结构化的磁盘存储策略,支持对海量历史时序数据的快速查询与分析。

2.2 数据写入

数据在写入时,以行存的形式写入到 MemSegment 中,MemSegment 内部以无锁跳表的方式实现,能够高效地对写入数据按照设备 ID、时间戳、OSN(Operation Sequence Number)的方式进行排序。

MemSegment 大小达到阈值时,将主动触发 Flush(刷盘)线程,Flush 线程将 MemSegment 中的行存数据首先按照时间分区分组,然后组织成列存数据,并以追加写的方式持久化到一个新的 LastSegment 文件中。存储层支持同一设备在相同时间戳下的多条数据进行去重,可通过 CLUSTER SETTING 设置集群级去重规则。写入时根据去重策略对数据进行去重,保证相同文件内无重复输数据。由于 LastSegment 是由 MemSegment 直接 Flush 生成的,因此其中的数据同样保持有序。当某个分区中的 LastSegment 数量达到阈值时,会触发合并操作,合并多个 LastSegment 并将数据量满足条数的设备以压缩的方式追加写入到 EntitySegment 中。


时序数据写入基本流程图

2.3 数据查询

进行查询时,存储层首先按照下发的时间范围来过滤满足的时间分区,在对应的分区下逐级查询当前可见的 MemSegment、LastSegment 和 EntitySegment。此时各结构中每个 Block 内部的数据均按照设备号和时间戳升序排列。在返回给上层执行层前,这些 Block 会再经过归并排序来处理 Block 之间的重复数据,最终将经过处理的 Block 组织成合理的数据格式再返回给上层。查询的逻辑如下:

3. 数据目录结构说明

时序数据存储于数据库数据路径下的tsdb目录中。该目录默认包含 4 个以vg_为前缀的 VGroup 子目录,每个 VGroup 内部会按库 ID 与分区时间对数据进行分层分组管理。各 VGroup 下常见的文件如下:

3.1 版本控制文件

文件名:CURRENTTSVERSION-*

版本控制文件每个 VGroup 路径下有一组,核心功能是记录文件层级的所有变更,例如 Flush 操作新增的 LastSegment、Compact 操作导致的 LastSegment 新增或减少等。这些变更会通过以 TSVERSION-* 为命名格式的文件,以追加写方式实时记录,且记录时机严格限定在所有更新文件完成写入并 Sync 成功之后,确保数据一致性。

CURRENT 文件用于标记当前生效的 TSVERSION-* 文件(即当前变更由哪个版本文件记录),其核心目的是保障系统宕机或正常退出后重启时,能准确重建文件层级,避免重启恢复过程中出现数据丢失或读取错误数据的问题。

系统重启时,会读取所有旧 TSVERSION-* 文件中的变更记录并合并为一条完整记录,写入新的 TSVERSION-*文件(这也是该类文件后缀带有文件号的原因)。若重启成功,CURRENT 文件会更新为最新的 TSVERSION-* 文件标识,并清理旧版本文件,从而规避重启过程中再次发生断电或宕机时,后续重启出现异常的场景。

3.2 设备 Count 统计文件

文件名:entity_count.item

entity_count.item文件用于记录分区下各设备的落盘数据条数。当count查询的时间范围覆盖整个时间分区,会直接读取分区下该文件,取统计结果并返回,无需遍历全量数据,大幅提升查询效率。

3.3 删除记录文件

文件名:partition_del.item

partition_del.item文件用于记录各设备的删除信息,执行删除操作时会同步更新该文件内容。文件中会明确记录被删除设备的 ID、OSN 范围及时间戳范围,查询数据时,系统会先从查询范围中剔除该文件所记录的删除范围,从而间接实现数据删除的效果。

3.4 Last 文件

文件名:last.ver-*

Last 文件是一种自索引、不可修改的持久化文件。它通常通过两种方式生成:一是将内存中的数据通过 Flush 操作刷盘;二是在 Compact 过程中,将那些行数未达到 EntitySegment 合并阈值的设备数据回写而成。

3.5 Block 文件

文件名:block.veragg.verheader.eheader.b

这四个文件共同构成 EntitySegment,各文件功能及关联如下:

block.ver:以 Block 为单位存储原始数据,是数据的核心载体。

agg.ver:记录每个 Block 的聚合信息,与 block.ver 中的 Block 一一对应,用于快速获取 Block 级聚合结果。

header.b:包含两部分关键信息:一是各 Block 的部分聚合信息(支持查询时快速过滤);二是设备 ID、该设备上一个写入 Block 的 BlockID 及对应文件偏移,整体呈现类似链表的结构,便于追溯数据写入顺序。

header.e:记录设备最后一个写入 Block 的 BlockID,以及该设备的累计写入条数等核心统计信息。

除了header.e外,其余三个文件在 Compact 时均以追加写的方式写入。header.e会重写一份。

结语

KaiwuDB 3.0 时序存储模块通过深度适配物联网 AIoT 场景的架构设计,充分满足了海量时序数据高吞吐写入、极速查询、可靠存储等核心需求,为物联网核心系统提供了稳定、高效、易运维的数据管理支撑。其多模融合能力与自主可控特性,不仅实现了 AIoT 场景下的多样化数据处理,也为关键行业核心系统的数字化转型提供了可靠保障。未来,随着物联网技术的持续演进,KaiwuDB 将继续深耕时序数据处理领域,推出更多针对性优化功能,助力企业释放数据价值。