随着转转业务规模快速增长,系统拓扑结构越来越复杂,加上二手交易玩法也非常多(如C2C、C2B、B2B、B2C、C2B2C等),在这种复杂系统架构和业务场景下,无法避免会出现RPC调用失败,消息漏发,线上Bug,业务新老规则冲突等因素引发数据异常,导致用户客诉,以及公司产生损失。当时公司没有一个统一的数据校验治理方案,行业也无相关开源系统,导致业务数据治理这块一直都是一个没有深入治理的领域。基于以上背景,转转业务规则校验平台(简称ZZBCP:ZZ Business Check Platform)孕育而生,此系统帮助业务系统实时校验线上的每一笔单据数据,填补了业务数据质量治理领域的空白。


下图是系统执行规则流程图,触发事件源(trigger msg)驱动规则执行(实时或者延时执行),目标事件数据源(Target msg-可以不配置目标数据源,则通过RPC方式获取需要校验的目标数据源)是被校验的数据内容。

T1时刻,系统收到触发消息后,命中规则且延时到T3时刻进行数据校验动作。T2时刻,收到目标消息,则将目标消息处理后,暂存到Codis中,等到T3时刻对目标消息进行校验,然后根据校验结果执行后续流程。

当前支持订阅MQ和Binlog消息(Redis/ES暂时不支持)。该模块将触发事件和目标事件的数据,统一转化成ZZBCP系统标准的数据格式,方便后续规则执行引擎统一进行处理。当前对binlog消费使用的Kafaka,将MySql, TiDB的binlog通过CDC中间件(Canal, Maxwell)推送到Kafka消息中间件。

延时队列中的规则到期后,会执行数据组装操作,从redis中查询数据(目标数据源),将数据按系统定义的格式组装好,交给规则执行引擎执行。

当前我们支持两种规则执行引擎:


该模块主要是根据规则执行引擎返回的结果,判断是否需要进行后续的告警操作,异常数据的收集,以及否需要进行重试执行校验动作。


对于以下特殊场景的数据异常,如果可以自动化触发数据修复,则可以使用此功能进行一个数据修复。当前我们的内部财务对账系统,就使用了此功能对异常数据进行自动修复。鉴于时刻对线上数据的敬畏之心,此功能具体修复逻辑,建议控制在业务所属领域內,ZZBCP平台只是一个触发修复的入口。
系统会将所有的规则信息上报到转转的监控系统(Prometheus- 转转进行了二次开发),对一些经常关注的指标进行统计上报。如规则命中统计,执行规则校验通过,执行校验未通过次数等。

后台配置提供了事件注册注册,报警相关配置和灰度以及手动执行规则等功能。方便业务快速的配置和测试自己的规则校验逻辑。


参考资料
https://www.infoq.cn/article/j*6vp2pbuggcrzbhcaog
https://tool.lu/en_US/deck/sw/detail?slide=8
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我已经在mountainlion上成功安装了rbenv和rubybuild。运行rbenvinstall1.9.3-p392结束于:校验和不匹配:ruby-1.9.3-p392.tar.gz(文件已损坏)预期f689a7b61379f83cbbed3c7077d83859,得到1cfc2ff433dbe80f8ff1a9dba2fd5636它正在下载的文件看起来没问题,如果我使用curl手动下载文件,我会得到同样不正确的校验和。有没有人遇到过这个?他们是如何解决的? 最佳答案 tl:博士;使用浏览器从http://ftp.rub
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,