HugeGraph调研 郝伟 2021/04/25 [TOC]
1. 简介
图数据库在安全反欺诈、知识图谱、机器学习等诸多领域有着重要的应用,但TitanDB团队被DataStax收购之后,开源图数据库出现了断层。近年来百度安全凭着雄厚的技术实力自主研发了全面支持Apache TinkerPop 3框架和Gremlin图查询语言的大型分布式图数据库HugeGraph,与Neo4j、TitanDB等传统图数据库相比有很多独特的优势。今天我们很高兴的宣布HugeGraph开源,更好的为网络安全、机器学习等社区服务。
HugeGraph主要应用场景是解决百度安全事业部所面对的反欺诈、威胁情报、黑产打击等业务的图数据存储和图建模分析需求,在此基础上逐步扩展及支持了更多的通用图应用。目前HugeGraph在百度安全的应用场景非常多,例如网址安全检测、威胁情报分析、设备关系图谱和数据安全治理等。
HugeGraph拥有良好的读写性能,并且我们根据安全业务场景对图数据库的核心功能(例如批量写入、最短路径、N度关系等)做了重点优化,与常见图数据库Neo4j和TitanDB等相比较,HugeGraph拥有明显的性能优势。
图 1 db-engines.com数据库发展趋势
图数据库是基于图论的数据库,其基本含义是以“图”这种数据结构存储和查询数据。需要注意的是图数据库并不是存储图片的数据库。图数据库的数据模型由顶点(Vertex)、边(Edge)和属性来体现。其基本数据类型可表示为。其中 表示一系列顶点 , `表示一系列边。
2. 1 GraphDB图数据库
随着社交网络、移动互联网和IOT等新的互联网应用不断涌现,用户、系统和传感器产生的数据呈指数级增长,数据内部依赖和复杂度增加。在应对这些新的趋势时,关系型数据库产生了较多的不适用性,NoSQL(Not Only SQL,不限于SQL)数据库应运而生。
GraphDB图数据库作为一种新型的NoSQL数据库,最近几年广受关注。如图1所示,数据库咨询公司 (http://db-engines.com) 对数据库发展趋势的分析结果表明,图数据库是最近几年发展趋势最明显的数据库类型。
3. 2 HugeGraph项目介绍
图数据库所提供的关联分析能力是金融反欺诈、威胁情报、黑产打击和案件溯源等业务所需要的核心能力。百度安全对图数据库的需求非常多,例如金融安全业务希望使用图数据库进行金融反欺诈关联分析、威胁情报业务希望通过图数据库进行黑产研究和情报分析、还有社交关系分析、知识图谱等需求场景。我们也试用过包括TitanDB、Neo4j在内的多款图数据库产品,但由于各种原因无法满足实际业务需求。在此背景下我们基于对安全业务的理解和自身业务需求,设计了HugeGraph图数据库系统。
3.1. 2.1 HugeGraph详细介绍
参考:图数据库系统 HugeGraph,https://mulanos.oschina.net/p/hugegraph。
3.1.1. 2.1.1 基本信息
图数据库(Graph Database)是一种以图结构进行语义查询,并使用节点、边和属性来表示和存储数据的数据库。图数据库的关键概念是边,通过边将顶点连接在一起,从而进行快速的图检索操作。
HugeGraph是一款面向分析型,支持批量操作的图数据库系统,它能够与大数据平台无缝集成,有效解决海量图数据的存储、查询和关联分析需求。HugeGraph支持HBase和Cassandra等常见的分布式系统作为其存储引擎来实现水平扩展。HugeGraph可以与Spark GraphX进行链接,借助Spark GraphX图分析算法(如PageRank、Connected Components、Triangle Count等)对HugeGraph的数据进行分析挖掘。
HugeGraph图数据库由何而来 HugeGraph架构图 HugeGraph架构图 HugeGraph团队初期尝试了几个图数据库均无法满足百亿级以上关联数据分析的需求,开始时基于Titan改造来实现,但发现Titan代码难以修改及维护,因此决定参考Titan重新开发HugeGraph图数据库,并于2018年8月开放源代码回馈给社区 。
3.1.2. 2.1.2 主要特点
HugeGraph的主要特点包括:
- 基于TinkerPop 3 API实现,支持Gremlin图查询语言;
- 拥有完善的周边工具链和相关功能组件,可以满足图数据库开发的基本需求,提供易用高效的使用体验;
- 具备独立的Schema管理模块,丰富完善的Schema校验机制,确保图数据库中的数据完整性和一致性;
- 支持数据的备份和还原,可以在不同的后端存储之间转换;
- 多种ID生成策略应对不同业务场景,拥有完善的索引管理机制,支持多种索引查询操作; 可以实现与Hadoop、Spark、HBase、ES等大数据系统集成,支持多种Bulk Load操作,实现海量数据快速插入;
3.1.3. 2.1.3 核心特性
- 易用:HugeGraph支持Gremlin图查询语言与RESTful API,同时提供图检索常用接口,具备功能齐全的周边工具,轻松实现基于图的各种查询分析运算。
- 高效:HugeGraph在图存储和图计算方面做了深度优化,提供多种批量导入工具,轻松完成百亿数据快速导入,通过优化过的查询达到图检索的毫秒级响应。支持数千用户并发的在线实时操作。
- 通用:HugeGraph支持Apache Gremlin标准图查询语言和Property Graph标准图建模方法,支持基于图的OLTP和OLAP方案。集成Apache Hadoop及Apache Spark大数据平台。
- 可扩展:支持分布式存储、数据多副本及横向扩容,内置多种后端存储引擎(包括RocksDB、Cassandra、ScyllaDB、HBase、Palo、MySQL以及InMemory等),也可插件式轻松扩展后端存储引擎。
- 开放:HugeGraph代码开源(Apache 2 License),客户可自主修改定制,选择性回馈开源社区。
除上述特定之外,HugeGraph还针对图数据库的高频应用(例如:ShortestPath、k-out、k-neighbor等)做了特定性能优化,并且为用户提供更为高效的使用体验。
3.1.4. 2.1.4 图数据库优势
与传统关系型数据库相比,图数据库的优势有:
- 可以很自然的表达现实世界中的实体及其关联关系(对应图的顶点及边);
- 灵活的数据模型可以适应不断变化的业务需求;
- 灵活的图查询语言,轻松实现复杂关系网络的分析;
- 关系型数据库在遍历关系网络并抽取信息的能力非常弱,图数据库则为此而生;
- 关系型数据库在规模庞大时很难做多层关联关系分析(Join操作往往消耗过长时间而失败),图数据库则天然把关联数据连接在一起,无需耗时耗内存的Join操作,可以保持常数级时间复杂度。
- 支持百亿边+快速导入,支持横向扩容。HugeGraph针对百亿级数据场景进行定制化优化,实现大数据环境下的快速导入和高效查询,同时能够对接Hadoop和Spark GraphX等已有大数据平台。
- 支持Gremlin图查询语言,Gremlin提供了标准、灵活、丰富的图查询语法。
- 支持多后端存储引擎,后端存储引擎可配置,可插件式扩展新的后端存储引擎。
- 支持快速的批量导入、批量导出功能,同时用户可灵活定义导入导出格式,支持CSV、TXT、JSON等格式,支持从HDFS、MySQL、SQL Server、Oracle、PostgreSQL等数据源直接导入数据。
- 支持厂内存储系统。
3.1.5. 2.1.5 基础功能
- 顶点、边:支持基本增删改查操作,支持有向图,支持两顶点间同一类型多条边,支持超级点。
- 属性:支持属性图、支持多值属性、支持多样化的属性类型、支持顶点属性追加与合并。
- 元数据:支持丰富的Schema校验,如属性是否可空(可选),支持Schema动态修改。
- 索引:支持二级索引、范围索引、全文索引,支持联合索引。
- 事务:遵循Tinkerpop事务规范,支持Read Committed级别事务。
- 多顶点ID策略:支持主键ID、支持自动生成ID、支持用户自定义字符串ID、支持用户自定义数字ID。
- 大规模数据:支持批量插入顶点/边、支持超级顶点、支持流式分页获取、支持Shard并行获取。
- 优化的图接口:最短路径(Shortest Path)、K步连通子图(K-neighbor)、K步到达邻接点(K-out)等。
- 其它:支持图变量(Graph Variables)、兼容性上已通过Apache Tinkerpop官方测试用例90%兼容测试。
3.1.6. 2.1.6 高级功能
- 多图实例:支持多个图实例,图之间数据相互隔离。
- 用户认证:支持多用户,支持用户权限认证,支持用户角色访问控制。可轻松对接现有用户认证系统。
- 监控接口:支持系统状态监控、API访问时间监控、性能数据监控等。
- 备份恢复:支持在线备份、支持备份数据的恢复。
- 云环境适应:兼容多个云厂商平台,轻松对接公有云、私有云和混合云等多种云环境。
- 商业版本:商业版本提供技术咨询、解决方案、定制化需求等服务。
3.1.7. 2.1.7 接口支持
- Gremlin接口:支持标准、灵活的Gremlin查询接口。
- Restful API接口:支持功能丰富、简单易用的HTTP Restful接口。提供顶点、边、元数据等的基本操作接口;此外提供各种高级查询接口,包括最短路径、多路径、交叉点、N步可达邻居等。
- Java Client客户端:支持Java语言客户端,用户可根据自身需求实现其它语言客户端。
3.1.8. 2.1.8 周边工具
一键部署(hugegraph-tools/deploy):通过部署工具简单轻松的一键部署所有组件。 可视化界面(hugegraph-studio):基于Web的可视化环境,提供图操作界面、图数据展示与分析。 导入工具(hugegraph-loader):数据导入工具,支持从txt、csv、json等格式文件导入到HugeGraph。 导出工具(hugegraph-tools/dump):数据导出工具,可将顶点及关联边导出到文件,支持用户实现formatter自定义格式。 备份恢复工具(hugegraph-tools/backup&restore):数据备份与恢复工具,支持定时备份、手动备份、手动恢复等功能。 Gremlin任务工具(hugegraph-tools/gremlin):Gremlin任务执行工具,支持同步执行Gremlin查询与分析(OLTP),支持异步执行Gremlin任务(OLAP)。 集成Spark GraphX工具(hugegraph-spark):基于Spark GraphX的大数据环境下的图分析工具。
3.2. 2.2 HugeGraph的系统架构
3.2.1. 2.2.1 基本架构
作为一款通用的图数据库产品,HugeGraph需具备图数据的基本功能。HugeGraph的系统架构主要包括存储层、计算层和用户接口层三个功能层次。 HugeGraph的存储层包括图数据(顶点、边和属性等)存储、索引数据存储和Schema元数据存储。HugeGraph后端存储会采用插件化方案,目前已经支持RocksDB、Cassandra、ScyllaDB、HBase、Doris(原Baidu Palo)和MySQL等,后续会适配更多的后端存储系统。
3.2.2. 2.2.1 计算层类型
HugeGraph的计算层包括OLTP和OLAP两种类型。其中HugeGraph重点实现了OLTP核心功能,而OLAP部分功能需要和Spark GraphX相结合完成。
3.3. 2.2.2 接口方式
HugeGraph提供了多种接口方式,用户可以根据自己的业务需求和喜好,选择相应的接口来操作HugeGraph,具体包括:
- HugeStudio(基于Web的IDE可视化编辑环境)
- HugeLoader(数据导入工具)
- HugeConsole(基于命令行的Gremlin接口)
- HugeApi(基于Rest的Api接口)
- HugeClient(基于Java的客户端驱动程序)
3.4. 2.3 HugeGraph的性能指标
HugeGraph具有良好的读写性能,可以胜任多种图应用场景。我们使用图数据库Benchmark测试工具对HugeGraph进行性能测试,并对比了HugeGraph、TitanDB和Neo4j等常见的图数据库,以下是HugeGraph的基本性能数据。
3.4.1. 2.3.1 批量写入
以下在4组开源数据集分别对HugeGraph、TitanDB和Neo4j进行批量写入性能测试,测试结果如表1所示。HugeGraph采用RocksDB存储引擎时插入amazon0601数据集的300万条边耗时为5.711秒,平均每秒可完成50万条边插入。性能数据分析来看HugeGraph的批量插入性能明显优于Neo4j和TitanDB。
表1 HugeGraph批量插入的性能
3.4.2. 2.3.2 最短路径
我们使用同样的4组数据集分别测试HugeGraph、TitanDB和Neo4j三款图数据库在最短路径查找的性能。测试方式是从第一个顶点出发到达随机选择的100个顶点的最短路径,测试数据如表2所示。HugeGraph对最短路径求解采用双向广度优先算法进行优化,其最短路径查询性能明显高于TitanDB,与Neo4j处于同一水平,小数据量情况下HugeGraph略胜于Neo4j。
表2 HugeGraph最短路径查询性能
数据库 | email-entron 30w edges |
amazon 0601 300w edges |
com-youtube.ungraph 300W edges |
com-lj.ungraph 3000w edges |
---|---|---|---|---|
Hugegraph | 0.494 | 0.103 | 3.364 | 8.155 |
TitanDB | 11.818 | 0.239 | 377.709 | 575.678 |
Neo4j | 1.719 | 1.800 | 1.956 | 8.530 |
Ref: https://pic3.zhimg.com/80/v2-e2523aa25c4e99594e5de975ca90d8e6_720w.jpg
3.4.3. 2.3.3 N度关系
HugeGraph针对“好友的好友”这类常见“N度关系”查询也进行了特定优化。我们将N度关系查询分为K-neighbor和K-out两种模式。例如要查询3度关系(即好友的好友的好友),K-neighbor则返回3度之内的所有节点,K-out仅返回3度关系节点。关于K-out的测试数据如表3所示,HugeGraph可以3秒内完成amazon0601的开源数据集(40万节点和338万的边)的5度关系查询。
表3 HugeGraph K-out性能
关于HugeGraph的更多性能测试数据,请查询见官方文档:
(https://hugegraph.github.io/hugegraph-doc/performance/hugegraph-benchmark-0.5.6.html)
具体的测试方法和逻辑请参考:
HugeGraph-Benchmark(https://github.com/hugegraph/graphdb-benchmarks)
4. 3 HugeGraph体系结构
HugeGraph已经在GitHub上开源,项目地址是https://github.com/hugegraph。HugeGraph包含了10多个关联子项目,其中包括:
- HugeGraph HugeGraph子项目是HugeGraph项目的核心部分,包含Core、Backend、API等子模块。该模块实现了TinkerPop框架接口,并提供Schema元数据管理,事务、缓存和序列化等功能。HugeGraph可以支持多种后端存储系统,用户可以根据实现需求灵活选择;另外通过内置的HugeGraph-Server(简称为HugeServer)对外提供Restful API,该接口也可以接收Gremlin查询。
- HugeGraph-Client 简称为HugeClient,提供了Rest API的客户端,用于连接HugeServer,目前实现Java版,其他语言用户可自行封装实现;
- HugeGraph-Loader: 简称为HugeLoader,是基于HugeClient的数据导入工具,可将普通JSON、CSV等文本数据转化为图的顶点和边并快速插入图数据库中;
- HugeGraph-Studio 简称为HugeStudio,是HugeGraph的Web可视化工具,可用于执行Gremlin语句并将图的链接关系通过Web可视化呈现。
HugeGraph各组件之间的关系如图3所示:
图3 HugeGraph各组关系图
5. 4 HugeGraph的应用场景
百度安全每天需要处理大量的日志数据,并对数据进行挖掘分析以识别各种安全问题,HugeGraph为安全业务提供关联分析能力。HugeGraph在百度安全内部的应用场景非常广泛,包括网址安全检测、设备关系图谱和数据安全治理等。
5.1. 4.1 网址安全检测
搜索是百度的核心业务之一,为保证用户访问的网站是安全的,我们需要对搜索引擎的每一个网页进行安全检测,以防止用户通过搜索引擎入口访问恶意网站。在网址安全检测项目中,我们使用HugeGraph存储网站的基本信息包括域名Whois、IP和外链等,安全分析人员可以方便分析站点之间的关系。另外从链接关系入手,结合PageRank等图挖掘算法可以发现网站链接异常行为,识别网络黑产业。据此我们发现了黑产利用运营商漏洞进行用户隐私窃取的行为,也发现了虚拟点击和非法推广等非法行为,切实维护了网民的权益。
5.2. 4.2 设备关系图谱
关联分析是威胁情报、黑产打击和案件溯源等业务所需要的核心能力,构建设备关系图谱,提供设备关联分析能力是黑产对抗所需要的核心能力。我们使用HugeGraph存储手机号码、帐号ID、设备指纹等设备信息,通过ID-Mapping和关联分析,精确识别黑产作弊设备,并为业务风控提供细粒度的反作弊策略。
5.3. 4.3 威胁情报分析
在威胁情报处理方面,利用HugeGraph将恶意攻击记录、恶意IP、恶意域名、Whois信息、漏洞库、文件、邮件地址、杀软检测、开源情报等信息结合构建威胁情报关系网,为风控业务和安全应急响应中心提供服务。另外在伪造设备识别、群控挖掘、自然人识别等方面,HugeGraph也发挥了很大的作用。
5.4. 4.4 安全数据治理
在安全领域之外之外,图数据库也可以应用在知识图谱、企业图谱、推荐系统、社交网络、IT运维等多种场景中应用。目前我们也将HugeGraph应用到安全数据治理中项目中。我们将数据资产作为图数据库的顶点,将对数据资产的ETL处理作为图数据库的边,通过顶点和边的关联关系分析数据血缘,并在此基础上实施安全数据治理策略。
图4 HugeGraph在数据治理中的应用
6. 5 项目开源
HugeGraph项目及其子项目选择使用ApacheLicense V2开源协议下开源。Apache License V2开源协议是一款给予使用者很大自由的协议,使用者可以在需要的时候修改HugeGraph的代码来满足其业务需要并作为开源发布,也可以集成到其商业产品发布或销售。我们通过开源的方式发布HugeGraph希望有更多的人使用HugeGraph来解决实际业务问题,共同推动图数据库的进一步发展。同时也非常欢迎开源社区、工业界、学术界的用户支持和贡献。
支持HugeGraph的途径有很多,例如:
- 下载并试用HugeGraph,给我们反馈使用感受和改进建议
- 参与贡献HugeGraph的开发流程、完善相关文档、帮助解答常见问题等
- 参与贡献HugeGraph维护的核心工具代码,例如HugeCore、 HugeLoader、HugeStudio、HugeClient、HugeSpark等
- 贡献完善HugeGraph周边生态工具,例如多语言客户端驱动程序Python Client Driver等
HugeGraph仍然在鼓励用户到HugeGraph在GitHub的社区(https://github.com/hugegraph)参与社区讨论或贡献代码。
7. 参考文献
[1] 百度百科 HugeGraph, https://baike.baidu.com/item/HugeGraph/23625088 [2] 百度安全开源大规模图数据库HugeGraph, https://zhuanlan.zhihu.com/p/41240429