当前位置: 首页 > 科技观察

京东虚拟商城多维点单系统架构设计

时间:2023-03-14 09:18:12 科技观察

白居易初到长安时,结识了大学士顾况。老人说:“长安米贵,大处不易。”吹生之时”,不禁感叹“有句话叫人,人世难得”。京东平台是虚拟旗下基础平台群开发的公共基础服务平台平台,支持复杂的非标商品模型和海量个性化订单数据,提供结构化定制、发布、推广、虚拟资产支付、结算、退款以及订单聚合、流转、统计、展示等丰富的解决方案,大大降低了交易复杂度针对电商行业非标产品的业务拓展,本期我们将介绍京东平台的重要产品之一——虚拟订单中心。虚拟订单中心定位于订单数据的聚合、变更和状态维护,目前聚合了大量的手机充值、加油卡、机票和酒店、景区门票、火车票、点卡页游等虚拟商品和部分非虚拟商品的订单明细数据,同时为京东主站订单中心提供订单展示,并提供订单数据对接风控、营销等业务方的分析应用。虚拟订单中心的核心功能主要围绕数据搬运工(Hamal)产品展开。Hamal是京东开发的一款MySQL数据库binlog监控产品。预备知识1-Binlogbinlog是mysql数据库在启用Row模式时提供的二进制日志。它以binlogEvent的形式记录SQL语句和已经发生或可能发生变化的数据(事务)。类似于oracle数据库的归档日志,可用于查看数据库变更历史、数据库增量备份和时间点恢复、Mysql复制等。预备知识2——同步监控原理简单来说就是模拟mysql的主从复制过程。首先伪造slave,向master库发送COM_REGISTER_SLAVE命令注册客户端,这样master就会发送binlogEvent;然后发送COM_BINLOG_DUMP命令,并指定binlog文件和Position信息,就可以从Master库中得到包含详细数据的binlogEvent二进制流。binlogEvent包括所有数据库事件类型(DDL、DML、TCL、授权等)、库表信息、字段信息、行数据。剩下的工作就是对协议进行过滤、解析、反序列化,得到想要的订单数据。COM_BINLOG_DUMP命令格式如下:-COM_BINLOG_DUMP-4bytebinlog-pos-2byteflags(BINLOG_DUMP_NON_BLOCKseesql/mysql_priv.h)-4byteslave-server-id-nul-termbinlognameDML的binlogEvent类型如下:enumLog_event_type{/*......*/WRITE_ROWS_EVENT=23,UPDATE_ROWS_EVENT=24,DELETE_ROWS_EVENT=25,INCIDENT_EVENT=26,HEARTBEAT_LOG_EVENT=27,/*......*/};虚拟订单中心的主要结构如下:Hamal是虚拟订单中心数据管道的入口,它的首要任务是保证数据库数据变化的准确消费,所以binlog和后面的消费记录-up异常消费的处理机制必须精心设计。健壮性和高可用Hamal使用zookeeper集群管理来监控实例和记录binlog消费位置信息。对于目标库,多个Hamal实例在启动时抢占库的映射节点获取监控权限,未被选中的实例以热备份的形式监控zk对应节点的binlog位置信息,并在启动时快速通过服务不可用或已关闭。抢占中继监控服务和binlog信息;Hamal还支持同时监控目标库的多个目标从库,并支持binlog的幂等消费,防止目标库单节点宕机。多重防灾机制保障了服务的72小时高可用和数据的完备性。目前每天提供稳定的数千万条记录监控,从未弃单过。快速消费Hamal采用了类似于TCP滑动窗口的binlogEvent消费的Get和ACK机制:每次接收到一批binlog记录,并行解析数据变化,发送JMQ消息后确认消费(ACK),使用窗口长度作为binlogPosition的增长速度。Hamal通过自产自销的MQ消息,持续驱动订单数据的后续业务处理。后续处理包括数据变更去重、DML过滤、存储等,还可以为风控、营销、订单交易等系统提供个性化的数据订阅服务。这样就可以解耦binlog消费环节,加速消费,同步监控服务和业务逻辑可以隔离。读写分离Hamal采集的订单数据转化为订单模型后继续流向虚拟订单中心的三重存储介质:传统的Mysql数据库作为原始数据的第一级存储,ES和缓存系统用于数据索引和分析,实现读写分离。对于存储订单数据,DAO模块也使用了消息队列解耦。订单数据入库后,将订单数据以自产自销JMQ的形式推送到ES和缓存系统,减轻存储过程,降低多级存储之间的耦合。能够平衡集群负载。多级搜索作为数据管道出口,订单网关系统(GW)提供可定制的模板数据或消息数据订阅、数据分页查询、订单搜索统计等服务,是应用中的关键环节的对接数据。网关系统实现了非常完整和强大的多级平滑搜索过程。当顺序查找超时或失败时,立即跳转至下层查找,降级查找的结果回溯至上层数据源;如果虚拟订单中心检索失败,搜索将登陆产品线数据库进行最后的搜索。如果搜索成功,则将订单回溯到订单中心各级入库。如果查找失败,则订单号一定是错误的;当虚拟订单服务完全不可用时,网关搜索将直接降级到原产线生产数据库拉取订单数据。多级检索方案,保证最完整的用户体验!如今,经过两次技术版本演进和多次618、双十一促销测试,虚拟订单中心已接入30+虚拟服务,稳定承载虚拟平台京东核心订单数据,累计订单数据近10亿条,以及不断挑战新高。正逐渐成为虚拟商品等非标商品融入京东电商主系统的重要渠道。【本文为专栏作者“张凯涛”原创文章,作者微信公众号:凯涛博客(kaitao-1234567)】点此阅读更多本作者好文