zoukankan      html  css  js  c++  java
  • 《京东虚拟业务多维订单系统架构设计》阅读笔记

      同主站常规实物订单中心一样,京米虚拟订单中心定位于订单数据的汇聚、变更及状态维护等,目前已经聚合了手机充值、加油卡、机票酒店、景点门票火车票、点卡页游等大量虚拟商品和部分非虚拟商品的订单详情数据,同时为京东主站订单中心提供订单展示,对接风控、营销等业务方提供订单数据分析应用等。虚拟订单中心的核心功能主要围绕数据搬运工(Hamal)产品运行, Hamal 是京米依托开源项目研发的 MySQL 数据库 binlog 监听产品,在保证高可用的前提下实现了高指标的监听转换过程。

    虚拟订单中心的主要架构:

      Hamal 作为虚拟订单中心数据管道的入口,其首要的任务是保证数据库数据变动的精准消费,因此必须谨慎设计 binlog 的消费记录和异常消费后续处理机制等。健壮性和高可用 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亿,并不断挑战新高,正逐渐成为虚拟商品以及其他非标准商品融入京东电商主体系的重要通道。

    阅读原文:

    https://mp.weixin.qq.com/s?__biz=MzU1MzE2NzIzMg==&mid=2247486428&idx=1&sn=382f9d307073839f7900df7168916cf1&chksm=fbf7bb33cc80322599a586248c4bf92880374dcb8c48249c91b03170230112492b3ec628206e&scene=21#wechat_redirect

  • 相关阅读:
    xpath爬顶点页面信息
    urllib与urllib的区别
    爬虫代理IP
    前端js框架汇总
    scrapy的基本安装步骤
    Python+requests 爬取网站遇到中文乱码怎么办?
    爬虫笔记课后习题1
    至此记录点滴、、
    c++封装的发邮件类CSendMail
    Socket创建失败:10093错误
  • 原文地址:https://www.cnblogs.com/iCheny/p/11056529.html
Copyright © 2011-2022 走看看