与 Milvus 合作为趋势科技实时检测安卓病毒
2020 年,86% 的公司对数据隐私的担忧会增加,仅有23% 的消费者认为他们的个人数据非常安全。随着恶意软件变得越来越普遍和复杂,积极主动的威胁检测方法变得至关重要。趋势科技是混合云安全、网络防御、小型企业安全和端点安全领域的全球领导者。为了保护安卓设备免受病毒侵害,该公司开发了趋势科技移动安全(Trend Micro Mobile Security)--一款移动应用程序,可将谷歌应用商店(Google Play Store)中的APK(安卓应用程序包)与已知恶意软件数据库进行比较。病毒检测系统的工作原理如下:
- 从 Google Play 商店抓取外部 APK(安卓应用程序包)。
- 已知的恶意软件被转换成向量并存储在Milvus 中。
- 新的 APK 也会被转换成向量,然后使用相似性搜索与恶意软件数据库进行比较。
- 如果一个 APK 向量与任何一个恶意软件向量相似,该程序就会向用户提供有关病毒及其威胁级别的详细信息。
为了发挥作用,该系统必须在海量向量数据集上实时执行高效的相似性搜索。最初,趋势科技使用的是MySQL。然而,随着其业务的扩展,数据库中存储的带有邪恶代码的 APK 数量也在增加。该公司的算法团队在迅速淘汰 MySQL 后,开始寻找其他向量相似性搜索解决方案。
向量相似性搜索解决方案比较
目前有很多向量相似性搜索解决方案,其中很多都是开源的。虽然不同项目的情况各不相同,但大多数用户都能从利用为非结构化数据处理和分析而构建的向量数据库中获益,而不是利用需要大量配置的简单库。下面我们将比较一些流行的向量相似性搜索解决方案,并解释趋势科技选择 Milvus 的原因。
Faiss
Faiss是 Facebook AI Research 开发的一个库,可以对密集向量进行高效的相似性搜索和聚类。它所包含的算法以集合的形式搜索任意大小的向量。Faiss 是用 C++ 编写的,带有 Python/numpy 封装程序,支持多种索引,包括 IndexFlatL2、IndexFlatIP、HNSW 和 IVF。
虽然 Faiss 是一款非常有用的工具,但它也有局限性。它只能作为一个基本算法库,而不是管理向量数据集的数据库。此外,它不提供分布式版本、监控服务、SDK 或高可用性,而这些正是大多数基于云的服务的主要特点。
基于 Faiss 和其他 ANN 搜索库的插件
在 Faiss、NMSLIB 和其他 ANN 搜索库的基础上构建了一些插件,这些插件旨在增强为其提供支持的底层工具的基本功能。Elasticsearch (ES) 是基于 Lucene 库的搜索引擎,其中包含大量此类插件。下面是 ES 插件的架构图:
1.png
对分布式系统的内置支持是 ES 解决方案的一大优势。由于无需编写代码,这为开发人员节省了时间和公司成本。ES 插件在技术上非常先进,而且非常普遍。Elasticsearch 提供一种 QueryDSL(特定领域语言),它基于 JSON 定义查询,易于掌握。全套 ES 服务使得同时进行向量/文本搜索和标量数据过滤成为可能。
亚马逊、阿里巴巴和网易是目前依靠 Elasticsearch 插件进行向量相似性搜索的几家大型科技公司。这种解决方案的主要缺点是内存消耗大,而且不支持性能调整。相比之下,JD.com基于 Faiss 开发了自己的分布式解决方案,名为Vearch。不过,Vearch 仍处于孵化阶段,其开源社区也相对不活跃。
Milvus
Milvus是由Zilliz 创建的开源向量数据库。它高度灵活、可靠、快速。通过封装 Faiss、NMSLIB 和 Annoy 等多个广泛采用的索引库,Milvus 提供了一套全面直观的 API,允许开发人员根据自己的场景选择理想的索引类型。它还提供分布式解决方案和监控服务。Milvus 拥有一个高度活跃的开源社区,在Github 上有 5.5K 多颗星。
Milvus 优于竞争对手
我们从上述各种向量相似性搜索解决方案中整理出了一些不同的测试结果。从下面的对比表中我们可以看到,尽管是在 10 亿个 128 维向量的数据集上进行测试,Milvus 的速度还是明显快于竞争对手。
引擎 | 性能(毫秒) | 数据集大小(百万) |
---|---|---|
ES | 600 | 1 |
ES + 阿里云 | 900 | 20 |
Milvus | 27 | 1000+ |
SPTAG | 不好 | |
ES + nmslib, faiss | 90 | 150 |
向量相似性搜索解决方案比较。
在权衡了每种解决方案的优缺点后,趋势科技最终选择 Milvus 作为其向量检索模型。Milvus 在海量、十亿规模的数据集上表现出色,该公司选择 Milvus 作为需要实时向量相似性搜索的移动安全服务的原因显而易见。
设计实时病毒检测系统
趋势科技的 MySQL 数据库中存储了 1,000 多万个恶意 APK,每天新增的 APK 有 10 万个。该系统的工作原理是提取并计算 APK 文件中不同组件的 Thash 值,然后使用 Sha256 算法将其转换为二进制文件,并生成 256 位 Sha256 值,将 APK 与其他 APK 区分开来。由于 Sha256 值因 APK 文件而异,因此一个 APK 可以有一个组合的 Thash 值和一个唯一的 Sha256 值。
Sha256 值仅用于区分 APK,而 Thash 值则用于向量相似性检索。相似的 APK 可能有相同的 Thash 值,但有不同的 Sha256 值。
为了检测带有恶意代码的 APK,趋势科技开发了自己的系统,用于检索相似的 Thash 值和相应的 Sha256 值。趋势科技选择 Milvus 对从 Thash 值转换而来的海量向量数据集进行瞬时向量相似性搜索。运行相似性搜索后,在 MySQL 中查询相应的 Sha256 值。架构中还添加了 Redis 缓存层,将 Thash 值映射为 Sha256 值,大大缩短了查询时间。
以下是趋势科技移动安全系统的架构图。
image-20210118-022039.png
选择合适的距离度量有助于提高向量分类和聚类性能。下表显示了二进制向量的距离度量和相应的索引。
距离度量 | 索引类型 |
---|---|
- Jaccard - Tanimoto - Hamming | - 平面 - ivf_flat |
- 上层结构 - 下层结构 | 平面 |
二进制向量的距离度量和索引。
趋势科技将 Thash 值转换为二进制向量并存储在 Milvus 中。在这种情况下,趋势科技使用汉明距离来比较向量。
Milvus 很快将支持字符串向量 ID,整数 ID 不必映射到字符串格式的相应名称。这样就不需要 Redis 缓存层,系统架构也不会那么笨重。
趋势科技采用了基于云的解决方案,并在Kubernetes 上部署了许多任务。为了实现高可用性,趋势科技使用了用 Python 开发的 Milvus 集群分片中间件Mishards。
。
趋势科技通过将所有向量存储在AWS 提供的EFS(弹性文件系统)中,实现了存储和距离计算的分离。这种做法是业界的流行趋势。Kubernetes 用于启动多个读取节点,并在这些读取节点上开发 LoadBalancer 服务,以确保高可用性。
为了保持数据一致性,Mishards 只支持一个写节点。不过,支持多个写节点的分布式版本 Milvus 将在未来几个月内推出。
监控和警报功能
Milvus 兼容基于Prometheus 构建的监控系统,并使用时间序列分析开源平台Grafana 来可视化各种性能指标。
Prometheus 监控并存储以下指标:
- Milvus 性能指标,包括插入速度、查询速度和 Milvus 正常运行时间。
- 系统性能指标,包括 CPU/GPU 使用率、网络流量和磁盘访问速度。
- 硬件存储指标,包括数据大小和文件总数。
监控和警报系统的工作原理如下:
- Milvus 客户端向 Pushgateway 推送自定义指标数据。
- Pushgateway 可确保安全地向 Prometheus 发送短期、短暂的指标数据。
- Prometheus 不断从 Pushgateway 提取数据。
- Alertmanager 为不同指标设置警报阈值,并通过电子邮件或消息发出警报。
系统性能
自基于 Milvus 的 ThashSearch 服务首次推出以来,几个月过去了。下图显示,端到端查询延迟小于 95 毫秒。
image-20210118-022116.png
插入也很快。插入 300 万个 192 维向量大约需要 10 秒钟。在 Milvus 的帮助下,系统性能能够达到趋势科技设定的性能标准。
不做陌生人
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word