微信万亿数据仓库架构设计与实现

这篇具有很好参考价值的文章主要介绍了微信万亿数据仓库架构设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信万亿数据仓库架构设计与实现

没有足够的特征数据,安全策略将是"无根之木,无源之水"。微信安全数据仓库应运而生,成为整个安全业务的特征数据存储中心,每天服务了万亿级的特征数据读写请求,为整个微信安全策略提供了可靠的数据支撑,是微信安全基石之所在。
然而,微信安全数据仓库不仅仅是一个存储中心,更是一个特征管理和数据质量管理的中心。
在演进过程中,数据仓库一直致力于提升特征管理能力和数据质量保障,实现了特征的管理、共享、分析和数据质量检测等功能。
本文将介绍安全数据仓库的起源、演进、当前的架构设计和数据质量保证系统的实现。

业务背景

安全策略开发流程

安全业务的核心逻辑在安全策略中实现。整个的策略开发流程包括特征数据的收集,安全策略的编写实现,和策略的反馈评估。其中特征数据的收集是必不可少的环节,数据的质量将直接影响安全策略的效果。

微信万亿数据仓库架构设计与实现

特征数据收集主要包括:数据接入、特征的计算、特征的存储。

在数据仓库还未建立时,业务同学通过消费离线存储mmdata和tdw接入数据,通过Flink流式计算或者自定义模块对数据进行加工,计算出需要的特征,最终存储到自行维护的KV,然后在安全策略平台上编写安全策略,读取KV中的数据, 实现需要的安全逻辑。

微信万亿数据仓库架构设计与实现
传统特征数据收集流程

为什么需要数据仓库

前面提到在还未建立数据仓库时,业务同学都按照自己的方式去存储计算出的特征,大多通过自行申请部署KV来存储,如A同学把部署一套KV集群,存储特征到KV表中,B同学把特征存储到同KV集群的不同表中,C同学又额外申请了另外一套KV集群存储。如下图中的架构:

微信万亿数据仓库架构设计与实现
传统安全后台: 各业务特征分散存储

这种特征的分散存储,导致业务同学只了解自己熟悉的特征,难以交流和共享,特征缺乏统一的管理,数据质量难以保证,不同的存储方式,也导致特征访问接口的混乱,业务系统的可靠性也难以保证。

针对上述的问题,我们希望把所有业务的特征,按统一的规范,建立统一的存储,方便特征的共享、管理和维护、并建立数据质量保障体系, 为策略提供可靠的数据。所以我们需要开发数据仓库。

微信万亿数据仓库架构设计与实现
问题和目标

安全业务后台架构

当前我们已经把所有的安全策略统一到安全策略平台进行开发和管理,特征数据的接入和计算统一到了Flink实时计算平台特征平台。

数据仓库作为承上启下的部分,对上为在安全策略平台上的安全策略提供了数据读写,对下为实时计算平台特征平台计算输出的特征提供了存储,是整个业务体系中不可或缺的部分。

微信万亿数据仓库架构设计与实现
安全业务后台架构

数据仓库架构演进

存储选型

安全业务特征数据主要有2种类型:

  • 离线特征:用来满足离线计算数据导入线上实时使用的需求,通常特征离线计算,定期的批量后台上线,提供在线读,但不支持实时写入。
  • 实时特征:用来满足实时的在线读写需求

微信内部有多种非常成熟稳定的自研KV:实时读写KV(简称实时KV)离线写实时读KV(简称离线KV), ***KV等等, 这些KV已经在多个业务被验证,有非常好的性能和可靠性,有团队做长期的维护,为此数据仓库的底层存储采用了微信自研的KV。其主要特点如下:

存储KV 特点 是否选用
离线写实时读KV 非常适用大量key的定时批量更新,在线只读,具有版本管理功能,支持版本历史版本回退,具有非常优秀的读性能。
实时读写KV 强一致性的key-value服务,存在类MySQL的表概念,提供了Select Insert Update Delete接口,在单表操作保证ACID,支持过期淘汰TTL。
***KV 提供强一致性的key-value读写服务,类似STL中的容器,不支持TTL, 不提供新集群,不建议使用。
  • 离线KV适合离线特征要求的场景,拥有非常好的读性能,并且提供了版本管理功能,在处理有问题数据时可以非常方便的可以回退版本,采用这种KV存储时,value一般是protobuf对象,新增特征时可以在pb中增加字段。
  • 实时KV适合实时特征的场景,在线实时读写性能优秀,而且支持数据过期淘汰,该KV提供了类MySQL表的概念,KV表定义类似于一个MySQL表,而每一个安全业务特征刚好可以用表的一个字段表示。

架构设计和演进

统一存储统一接口

数据仓库第一个版本,针对特征存储分散访问接口混乱问题,首先部署了公共的实时KV/离线KV集群,并实现了一个接入层。新增特征和历史特征放到公共的KV存储集群,并且在接入层屏蔽了底层KV的细节,提供了统一的读写特征的接口。

微信万亿数据仓库架构设计与实现
数据仓库架构1.0

接入层支持任意多个KV集群,支持多个表,为屏蔽KV的细节,接入层为每个特征分配唯一的标识<sceneid, columnid>,读写特征数据使用唯一标识进行,不需要关注KV类型和KV表ID,方便业务的接入使用。

微信万亿数据仓库架构设计与实现
统一接口

接入层还实现配置管理、参数校验、模块校验、权限校验、流水上报、PV统计等功能。

微信万亿数据仓库架构设计与实现

读写分离和多IDC同步

读写分离:数据仓库的读请求量远远多于实时写入量,为了提高性能,减少读写之间的相互影响,接入层做了读写分离,将读和写接口拆分到两个模块。

数据多IDC同步:数据仓库和业务都采用的是多IDC部署,为了不降低查询性能,不希望业务跨IDC访问存储,所以底层的KV也是多IDC部署。这里就带来一个问题,特征数据如何在多IDC的KV之间进行同步? 例如业务在上海写入一个特征,希望在深圳也能读到这个特征。这里按特征类型进行分类处理:

  • 离线特征数据同步:离线特征数据上线流程是通过离线计算在文件系统中生成一个文件,然后将文件导入到离线KV, 而离线KV支持多个IDC共享同一份数据,数据文件只需要生成一份,所有IDC的离线KV拉取同一个文件,新数据最终能同步到所有IDC上。
  • 实时特征数据同步:实时特征的同步采用微信自研的分布式队列组件,该组件提供了高可靠、高可用、高吞吐、低延时的数据消息队列服务。数据仓库写接入模块在写入数据时,同时将数据写一份到分布式队列,使用队列做跨IDC的数据同步,在其他IDC启动进程消费队列中的数据,写入到本IDC的实时KV,实现实时特征数据的同步。
微信万亿数据仓库架构设计与实现
数据仓库架构2.0
异步写和替代分布式队列

异步写入:前一个版本中实时特征是同步写入,影响业务的性能,业务希望是异步写入。

替代分布式队列:前一个版本中分布式队列采用的是公共的集群,众多业务使用,出现过数据仓库受干扰影响特征数据同步。

为此在数据仓库中新增一个异步消息队列模块写MQ,用于异步写入。和分布式队列相比MQ更轻量,而且MQ我们可以自行维护, 更可控,所以新架构中通过MQ实现实时特征的多IDC数据的同步,替代了分布式队列,保证数据同步不受其他业务影响。

微信万亿数据仓库架构设计与实现
数据仓库架构3.0
运营系统

前面3个版本解决了特征存储分散、读写接口不统一、数据同步、读写性能问题,但是特征的上线依然采用的是配置发布上线的方式,效率依然低效,更重要的是特征缺乏统一的管理,共享困难,难以满足业务的需求,业务常常也有各种疑问:

微信万亿数据仓库架构设计与实现
业务的疑问

为此数据仓库新增运营系统模块,实现了特征申请、特征上线、特征管理&分析、特征值查询/修改、特征数据质量管理等功能

微信万亿数据仓库架构设计与实现
数据仓库架构4.0
  • 特征申请:用户不再需要手动的修改配置文件来新增特征,可直接通过WEB页面申请,填写必要的特征信息,通过通用审批系统进行审批。
  • 特征上线:用户不在需要手动的发布配置上线特征,无论是新增的实时特征还是离线特征,审批通过后将自动化的上线,提升体验和效率。
  • 特征管理:特征管理支持对特征meta信息进行查询和修改,包括特征所属的业务分类(索引)、特征类型、特征负责人、给特征打tag等等,业务可以方便的查询需要特征信息,避免重复的计算,方便各业务共享特征。
微信万亿数据仓库架构设计与实现
特征管理页面
  • 特征分析:追踪特征的原始数据来源、计算过程、数据流路径、最终的存储信息等等, 可以追踪特征完整生产流程。
微信万亿数据仓库架构设计与实现
特征分析页面
  • 特征值查询&修改:运营系统支持在WEB页面查询特征值和修改特征值。
微信万亿数据仓库架构设计与实现
特征值查询页面
  • 特征数据质量管理:保障数据质量, 下一章节详细讲述。

数据质量保障

数据仓库主要通过两个方面来保障数据质量:特征的标准化和数据空跑系统。

特征标准化

特征的标准化是保证数据仓库数据质量的手段之一,标准化是指对数据仓库中的特征进行规范化处理,使得特征能够达到一致性、可重复性等标准,从而提高数据的可靠性和准确性。

对于新增实时/离线特征, 数据仓库制定了的特征规范文档,并按规范文档的要求,特征申请/管理页面必须正确的补充完整特征信息,如特征类型、业务分类等等,后台对每个特征都会进行校验,不符合规范的特征无法录入。

另外数据仓库还提供了接入编程指导文档,并给出完整的C++编程实例,致力于提供标准化的编程最佳实践。

数据空跑系统

离线特征数据来自于业务离线计算在分布式文件系统中生成数据文件,然后将文件上线。历史上曾因为生成的数据文件存在错误,存在错误的文件数据被上线到离线KV,导致策略出现故障。为了保障离线特征数据的质量,数据仓库设计了一套空跑系统,在上线前对数据文件进行检查,避免存在问题的数据上线到现网。

微信万亿数据仓库架构设计与实现
数据空跑架构

数据空跑架构如上图,离线特征数据的上线也纳入到了运营系统的管理中,整个的空跑流程如下:

  1. 业务发起数据上线,运营系统将数据上线到备用的离线KV表,也就是用于空跑的KV表。

  2. 打开空跑开关,按一定的比率采样现网的读请求,旁路到新增的读MQ模块,该模块读空跑表的数据,和当前现网做对比, 分析差异率。这里采用的动态采样, 如果表的PV高则采样率低,PV低则采样率高或者100%采样,避免请求量小的表无法进行空跑,而请求量大的表空跑流量太高又消耗太多资源。

  3. 计算和分析差异率,如果差异率超过了阈值,就自动的拦截数据上线,如果阈值检查通过,就继续后续的检查流程,最终自动上线数据文件到现网离线KV

差异率示例会如下图:详细的展示了具体的差异细节:

微信万亿数据仓库架构设计与实现
空跑结果差异率和差异详情

完整的数据上线流程如下图,空跑差异检测通过后,需要检查数据文件完整性,防止文件被修改或者覆盖,最后数据再上线到现网数据仓库系统,通知业务数据上线成功。如果中间任何一个步骤出错将告警给业务负责人,提醒人工介入处理。

微信万亿数据仓库架构设计与实现
离线特征数据上线完整流程

总结

数据仓库将分散的特征全部集中统一管理,提供统一的访问接口,标准化每个一个特征,建立了统一的规范,并且在此基础保障了数据的质量,夯实了整个安全业务的基础,助力一站式的数据-策略开发,极大的提升了安全对抗的效率,实现了数据价值的最大化。

 

作者:remy文章来源地址https://www.toymoban.com/news/detail-604152.html

到了这里,关于微信万亿数据仓库架构设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据仓库系列:StarRocks 下一代高性能分析数据仓库的架构、数据存储及表设计

    本文是学习StarRocks的读书笔记,让你快速理解下一代高性能分析数据仓库的架构、数据存储及表设计。 StarRocks的架构相对简单。 整个系统只包含两种类型的组件,前端(FE)和后端(BE),StarRocks不依赖任何外部组件,简化了部署和维护。 FE和BE可以在不停机的情况下横向扩展。

    2024年02月16日
    浏览(61)
  • 223页10万字大数据中心总体架构及数据仓库顶层设计解决方案WORD

    提供智慧城市、智能制造、数据治理、信息化等领域的系统框架、总体架构、数据流架构资料,包括数据治理、信息化、精益生产改善知识。 本文文档69页,因篇幅限制,以下仅展示部分资料,需要完整资料,点击右上角红色按钮关注+私信,喜欢文章,欢迎转发评论点赞。本

    2024年01月18日
    浏览(45)
  • 大厂案例 - 腾讯万亿级 Elasticsearch 架构实践

    Elasticsearch(ES)作为首选的开源分布式搜索分析引擎,通过一套系统轻松满足用户的日志实时分析、全文检索、时序数据分析等多种需求,大幅降低大数据时代发掘数据价值的成本。 腾讯在公司内部丰富的场景中大规模使用 ES,同时联合 Elastic 公司在腾讯云上提供内核增强版

    2024年02月14日
    浏览(39)
  • 详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

    最近发现一本好书,读完感觉讲的非常好,首先安利给大家,国内第一本系统讲解数据血缘的书!点赞!近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理、设计、以及在我们大数据场景下的实现方式

    2024年02月05日
    浏览(50)
  • 漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现

    本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理、设计、以及在我们大数据场景下的实现方式。 全文由下面几个部分组成: 先分享一下拉链表的用途、什么是拉链表。 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别。

    2024年04月12日
    浏览(34)
  • JAVA毕业设计100—基于Java+Springboot+Vue的WMS仓库管理系统+移动端微信小程序(源码+数据库+部署视频)

    本系统前后端分离带小程序 本系统分为管理员、用户角色(角色权限可自行分配) 功能列表: 1、 数据管理:物料数据管理、物料Bom管理、物料组管理、物料分类管理、供应商管理、仓库管理、货位管理、车间管理 2、 采购管理:物料标签管理、入库单管理、入库退货管理 3、

    2024年04月10日
    浏览(53)
  • 数据仓库与数据集成架构:数据仓库与数据仓库规范与标准的制定与应用

    数据仓库是一种用于存储和管理大量结构化数据的系统,它的主要目的是为了支持数据分析和报告。数据仓库通常包括一个或多个数据源,这些数据源可以是来自不同的系统或来自不同的数据库。数据仓库的设计和实现需要考虑到数据的质量、一致性、可用性和安全性等方面

    2024年04月09日
    浏览(42)
  • 大数据架构之关系型数据仓库——解读大数据架构(二)

    本文对关系型数据仓库(RDW)进行了简要的介绍说明,包括什么是关系型数据仓库,以及为什么要使用关系型数据仓库,其优缺点有哪些,如何增量更新数据等,最后还讨论了关系型数据仓库是否会消失的问题,以及哪些人会继续使用关系型数据仓库。 关系型数仓(RDW 是集

    2024年04月13日
    浏览(51)
  • 基于Kylin的数据统计分析平台架构设计与实现

    目录 1 前言 2 关键模块 2.1 数据仓库的搭建 2.2 ETL 2.3 Kylin数据分析系统 2.4 数据可视化系统 2.5 报表模块 3 最终成果 4 遇到问题             这是在公司云平台部门做的一个项目,总体包括云上数据统计平台的架构设计和组件开发,在此只做技术分享,不涉及其他用途。该

    2024年02月07日
    浏览(34)
  • 数据仓库【2】:架构

    将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程 构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先 定义好的数据仓库模型,将数据加载到数据仓库中去 ETL 规则的设计和实施约占整个数据仓库搭

    2024年02月04日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包