本文首发于 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/nebula-graph-risk-control-boss-zhipin/git
摘要:在本文中,BOSS 直聘大数据开发工程师主要分享一些他们内部的技术指标和选型,以及不少小伙伴感兴趣的 Dgraph 对比使用经验。github
在 Boss 直聘的安全风控技术中,须要用到大规模图存储和挖掘计算,以前主要基于自建的高可用 Neo4j 集群来保障相关应用,而在实时行为分析方面,须要一个支持日增 10 亿关系的图数据库,Neo4j 没法知足应用需求。web
针对这个场景,前期咱们主要使用 Dgraph,踩过不少坑并和 Dgraph 团队连线会议,在使用 Dgraph 半年后最终仍是选择了更贴合咱们需求的 Nebula Graph。具体的对比 Benchmark 已经有不少团队在论坛分享了,这里就再也不赘述,主要分享一些技术指标和选型,以及不少小伙伴感兴趣的 Dgraph 对比使用经验。算法
配置以下:数据库
Nebula Graph 部署 5 个节点,按官方建议 3 个 metad / 5 个 graphd / 5 个 storaged安全
主要调整的配置和 storage 相关 # 按照文档建议,配置内存的 3 分之 1 --rocksdb_block_cache=40960 # 参数配置减少内存使用 --enable_partitioned_index_filter=true --max_edge_returned_per_vertex=100000
目前安全行为图保存 3 个月行为,近 500 亿边,10 分钟聚合写入一次,日均写入点 3,000 万,日均写入边 5.5 亿,插入延时 <=20 ms。网络
读延时 <= 100 ms,业务侧接口读延时 <= 200 ms,部分超大请求 < 1 s并发
当前磁盘空间占用 600G * 5 左右框架
CPU 耗用 500% 左右,内存使用稳定在 60 G 左右分布式
目前来讲原生分布式图数据库国内选型主要比对 Dgraph和 Nebula Graph,前者咱们使用半年,总体使用对好比下,这些都是咱们踩过坑的地方。
就咱们使用经验,Dgraph 设计理念很好,可是目前还不太知足咱们业务需求,GraphQL 的原生支持仍是有很大吸引力,可是存储结构决定容易 OOM(边存储也分组的话会优化不少,官方以前计划优化);另外,采用本身编写的 badger 和 ristretto,目前最大的问题是从官方释放的使用案例来看,未经大规模数据场景验证,在咱们实际使用中,大数据量和高 QPS 写入场景下容易出现崩溃和 OOM,且若是采用 SSD 存储海量数据,Dgraph 的磁盘放大和内存占用也须要优化。
若是没有高 QPS 写入,目前 Dgraph 仍是值得一试,对于不少快速原型的场景,做为 GraphQL 原生图数据库使其很是适合作基于图的数据中台,这是目前的一个大趋势,它也上线了本身的云服务,业内标杆 TigerGraph 也在作相关探索,另外事务的完善支持也是它的优点,这块暂时用不到,因此没作相关评测。实测 Dgraph 在线写入并发不高或只是离线导入数据使用的状况下仍是很稳定的,若是想借助它的高可用和事务功能,能够尝试下。
对比来讲,Nebula Graph 很优秀,特别是工程化方面,体如今不少细节,能够看出开发团队在实际使用和实现上作较了较好的平衡:
这里主要从实际经验对比分享,两者都在持续优化,都在快速迭代,建议使用前多看看最新版本 release说明。
当前 Nebula Graph 作得很优秀,结合咱们如今的需求也提一点点建议:
目前 Boss 直聘将 Nebula Graph 图数据库应用在安全业务,相关应用已经线上稳定运行大半年,本文分享了一点经验,抛砖引玉,指望更多技术伙伴来挖掘Nebula这座宝库。
Dgraph 遇到的一些问题,供有须要小伙伴参考
本文系 Boss直聘·安全技术中心 文洲 撰写