交易日均千万订单的存储架构设计与实践

2023-10-27

一、订单系统概述

1.1 业务范围

服务业务线:快递、快运、中小件、大件、冷链、国际、B2B合同物流、CLPS、京喜、三入三出(采购入、退货入、调拨入、销售出、退供出、调拨出)等

1.2 订单中心价值

1、解耦(提升系统稳定性

原系统:交易与生产耦合在一起,业务新增需求,涉及个上下游多个系统。ECLP、外单、运单、终端系统等。多条业务线的逻辑耦合在一起,单一业务条线的需求改动,涉及原系统中其他业务线的关联改造。

新系统:交易与生产运营解耦:交易相关的需求在订单的域内解决;生产侧的需求,在生产域内解决,减少上下游的相互影响。

业务条线接耦:不同业务线,业务流程不同,单一业务条线的需求改动,只在具体的流程中做迭代更新,不影响其他业务线。提升整个流程和业务的稳定性。

2、提升新业务接入速度

订单中心向前台提供可复用的标准能力,提升新业务的导入速度。

订单中心将原系统中的大应用,拆分、抽象为多个小的应用组合,并支持不同场景下按需编排业务流程。新业务通过对中台公共标准能力的复用,可快速接入订单中心,避免相同功能的重复建设。

3、提供全局化统一数据模型

原系统:订单分属于多个系统,外单、ECLP、大件系统,有多套数据库,业务语义不统一,不便于数据化建设。

新系统:订单中心统一定义订单的标准数据模型,让不同业务的数据,沉淀在同一系统,减少订单域相关功能的重复建设,避免资源浪费,打破部门壁垒。使得数据和流程可以集中得以管理和优化,为集团经营分析、预测京东未来的创新空间,提供订单域的标准数据。

二、架构介绍

2.1 整体架构设计

通过技术中台架构升级项目,将交易体系以新的接入-交易-履约-执行四层架构进行重新搭建。其中交易订单负责物流与客户之间产生物流服务契约的单据流量收口,同时承载向下游OFC(订单履约层)分发的职责。

2.2 实时数据层架构设计

2.2.1 系统交互图

系统交互如下:

订单中心的标准接口在上层做了单据收口,同时我们在数据层也做了统一的收口。

业务架构与数据解耦,分布式数据库、缓存、一致性等高可用、高性能设计从业务架构范畴剥离,使业务架构聚焦在业务自身。

持久化系统:用于支撑接单、订单修改、订单取消、订单删除等数据持久化。

搜索系统:提供订单详情查询、订单列表查询、订单状态流水查询、判断是否百川订单等服务。

中继系统:数据枢纽,通过消费消息队列将订单数据写入Elasticsearch、HBase、MySQL。

数据对账系统:用于对比多套存储中间件的数据是否一致,以保障数据最终一致性。

数据同步系统:将订单列表查询所需的查询条件和列表展示字段从老系统同步至订单中心,用于解决因切量过程中订单数据存在于新老系统中而分页困难的问题。

2.2.2 技术架构图

  • 【读写分离架构】采用读写分离架构模式(CQRS),将订单读写流量分离,以提高查询性能和可扩展性,同时达到读、写解耦。
  • 【缓存】使用分布式缓存Redis缓存热门订单数据以及与订单相关的信息提高并发和响应速度减少对HBase的访问,同时,通过主、备、临时3套高性能缓存以提升系统容灾能力。
  • 【消息队列】使用消息队列JMQ实现异步处理订单提升系统吞吐量,同时流量削峰减轻直接请求ES、HBase、数据库的压力。将不同业务场景(如下单、回传)使用不同的Topic进行隔离,可以更好地管理和维护;将不同业务使用不同的Topic隔离,可以实现消息的并行处理和水平扩展,提高系统的吞吐量和性能。
  • 【复杂查询】使用搜索引擎Elasticsearch解决订单复杂查询,先通过Elasticsearch获取订单号,然后根据订单号查询分布式缓存Redis+列式数据库HBase。
  • 【低成本持久化存储】采用HBase列式数据库以支持海量数据规模的存储和极强的扩展能力。
  • 【数据一致性】通过强事务、最终一致、幂等、补偿、分布式锁、版本号等实现
  • 【多租户架构】系统中采用多租户数据模型,将租户的数据分离存储,以确保数据的隔离性和安全性。根据不同租户的需求动态扩展系统的容量和资源,可以支持系统的水平扩展。通过共享基础设施和资源,多租户架构实现了更高的资源利用率和降低成本。

2.3 设计优势

2.3.1 高可用

  • 应用服务器、MySQL、Redis、HBase、JMQ等均跨机房部署;ES单机房部署,搭建ES主备双机房集群
  • 隔离、限流、熔断、削峰、监控

2.3.2 高性能

  • 高性能缓存
  • 异步化

2.3.3 海量数据处理

  • 分库分表
  • 冷热分离
  • 列式存储(HBase)

2.3.4 数据安全

敏感信息加密存储,Log、Redis、ES、MySQL、HBase等均采用加密存储,“谁存储谁加密,谁使用谁解密”。

三、订单数据模型

3.1 PDM模型

在订单模型设计上,基于统一业务属性、抽象通用模型、归纳共性实体的原则,将订单模型主要分成了订单的主档信息、订单的货品信息、订单的物流服务信息、订单的营销信息、订单的财务信息、订单的客户渠道信息、订单的收发货信息、订单的操作信息、订单的扩展信息等几类

3.2 模型扩展性

3.2.1 标准模型扩展性设计

订单中存在几十上百个标识字段,若每次都采用新增字段形式,订单业务属性、数据模型会大量膨胀,腐蚀模型,同时开发效率较低,故采用KV形式承接和存储。将标识划分到各个业务域中,如订单标识、货品标识、营销标识等。

3.2.2 个性化业务模型扩展性

针对个性化业务,提供了一套可配置的数据库字段管理方案,通过开箱即用的一些设置,订单在提交、修改、查询时,可以根据业务身份+业务类型+业务字段找到不同的数据模型以及数据扩展编码,即找到存储到哪张表哪个字段。在每张表都预留N个扩展属性,同一个扩展属性,不同的业务身份+业务类型表示不同的含义,以此实现扩展存储。

四、未来及挑战

4.1 订单个性化查询

个性化查询需求增多,如模糊查询、根据查询条件实时聚合等需求,若ES索引都放在同一个集群中,会影响整体集群稳定性,但拆分后该业务数据无法与其他业务一块查询展示。

4.2 单元化架构

当前接单持久化TP99是47ms,在非跨机房情况下TP99是20ms,从数据来看,跨机房对性能影响很大。

单元化,可以让同一个用户的相关请求,只在一个机房内完成所有业务「闭环」,不再出现「跨机房」访问。单元化的部署方式,可以让每个机房部署在任意地区,随时扩展新机房。通过单元化,持续加强订单平台的基座稳固。

4.3 硬件成本控制

订单日均单量不断上升,数据量越来越大,随之而来是硬件成本的增加,如何控制硬件成本增加,是当下及未来的一项挑战。我们计划通过数据归档、冷热温数据分层等方式来降低数据存储成本。

文章来源:交易日均千万订单的存储架构设计与实践-京东云开发者社区

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交易日均千万订单的存储架构设计与实践 的相关文章

  • 数据库设计中常见表结构的设计技巧

    一 树型关系的数据表 不少程序员在进行数据库设计的时候都遇到过树型关系的数据 例如常见的类别表 即一个大类 下面有若干个子类 某些子类又有子类这样的情况 当类别不确定 用户希望可以在任意类别下添加新的子类 或者删除某个类别和其下的所有子类
  • 怎样的架构设计才是真正的数据仓库架构

    在各个网站和论坛 一说到数据仓库 基本都想到了 ETL DW OLAP 一说到数据仓库设计 就是按照行业规范和客户需求调研 设计主题 然后设计对应的 事实表 维表 但是 这就是真正的数据仓库总体设计么 关于上面说的主题设计 以及前端展现 这
  • 中台战略下的保险订单销售模式设计

    作者在 保险趋势分析与保险中台数字化转型 文章里提到了保险业务系统中台化后保险商品化和订单化的销售模式 本文主要通过购物车 订单中心 微前端以及产品通道等技术手段 对保险企业实施中台战略后的保险订单化销售模式进行设计 形成可实施的方案 微前
  • 组件(component)技术介绍

    转自 http blog csdn net touzani article details 1619472 组件 component 技术是各种软件重用方法中最重要的一种方法 也是分布式计算和Web服务的基础 网络应用中的软件组件 又被称为
  • 吴博:京东应用架构设计与治理

    吴博 京东应用架构设计与治理 经过十年的业务快速发展 京东信息系统复杂度越来越高 一般电商系统只需关心 进销存 中的 销 京东系统需要管理采购 进 销售 销 和库存 存 三个环节 系统做水平垂直拆分后 需要解决系统间如何解藕 如何保证高效通
  • 架构设计(数据层)

    架构设计 数据层 关系数据库 关系数据库 需要事先定义表 读写数据时 表中字段不可动态变更 表中的每个行记录代表一个关系 1 海贼王 20 2 瓜田李下 20 表与表之间也可建立关联关系 一对一 一对多 多对一 多对多 关系型数据库进行读写
  • 以太坊微支付通道原理与实现

    以太坊微支付通道原理与实现 线上直接转账需要一定的费用 如果存在大量小额交易的情况下 费用会变的难以承受 因而以太坊引入了微交易支付通道来解决这个问题 以太坊提供了一个票据支付方案 主要依赖于智能合约实现的一对多的账单系统 该账单系统大致上
  • 大型网站架构核心要素之扩展性:可扩展架构

    前言 续上节大型网站架构核心要素性能之后 我们今天要讲的是第四个要素 扩展性 什么叫扩展性呢 简单的说就是在对现有系统影响最小的情况下 系统功能可持续扩展及提升的能力 讲扩展性之前 我先讲下扩展性和伸缩性的区别 因为这两个点经常有人会混淆
  • 一图看懂架构划分原则:技术划分 OR 领域划分?

    架构划分原则 技术划分 描述 按技术用途组织系统组件 典型示例 分层 多层 架构 组件按技术层组织 用户界面 与用户直接交互的部分 业务规则和核心处理 逻辑和算法 与数据库交互 数据存取和查询 数据库层 数据存储和管理 优点 当大部分更改与
  • 【转】那些年使用过MapReduce的论文

    MapReduce is a programming model for processing large data sets with a parallel distributed algorithm on a cluster It s
  • Access、SQLite、HSQLDB、Sybase、MySQL、DB4O比较

    本文转自 http blog sina com cn s blog 465bc6c90100eums html 一 Access 数据类型有些另类 而且密码太容易被攻破 性能不高 只能用在Windows程序上 一般说来 单个表不超过10万少
  • 设计模式SOLID

    一 单一职责原则 一个类或者一个模块只完成一个功能 class UserInfo userId username email telephone 二 开闭原则 对扩展开放 对修改关闭 class Alert void check error
  • 腾讯高性能RPC开发框架Tars实现服务治理(微服务)

    Github https github com Tencent Tars 1 介绍 Tars是基于名字服务使用Tars协议的高性能RPC开发框架 同时配套一体化的服务治理平台 帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用
  • 阿里巴巴 cola设计架构

    https github com alibaba COLA
  • 思考:如何保证服务稳定性?

    最近一直在忙618大促的全链路压测 稳定性保障相关工作 结果618还未开始 生产环境就出了几次生产故障 且大多都是和系统稳定性 性能相关的bad case 生产全链路压测终于告一段落 抽出时间将个人收集的稳定性相关资料整理review了一遍
  • 软件构架、架构和框架的区别

    软件框架 Software Framework 介绍 面向某领域 包括业务领域 如ERP 和计算领域 如GUI 的 可复用的 半成品 软件 它实现了该领域的共性部分 并提供一系列定义良好的可变点以保证灵活性和可扩展性 可以说 软件框架是领域
  • Weblogic 12c 集群部署和session复制

    在上一篇Weblogic12c集群搭建的基础上 这一篇介绍Weblogic12c集群应用的部署和session复制 1 启动服务 首先在weblogic12c控制台 启动受托管服务server1 server2 server3 2 将要部署
  • 量化交易框架开发实践(一)

    量化交易平台指支持通过对数据进行多维度的定量分析 结合发现的特征定制策略 并能够基于历史数据对策略进行回测 最后支持实盘买卖的交易平台 从业务流上看 量化交易可以分解成 行情获取 gt 数据清洗 gt 指标计算 gt 策略开发 gt 策略回
  • 系统架构设计说明书

    目录 修订历史 文档审批信息 1 简介 1 1 目的 1 2 面向读者 1 3 文档组织 1 4 设计限定 1 5 术语说明 1 6 参考文献 2 项目建设目标和预期成果 2 1 建设目标 2 2 主要预期成果 3 系统非功能需求分析 3
  • 从架构师的角度看服务器端架构点滴

    任何服务器端的架构设计 都是性能 一致性和成本三者的权衡 从我在目前的大规模互联网视频公司的负责APP服务器端的角度来讲 我主要关注以下几个点 业务 可靠性 性能 可维护性 一 业务 框架上保证业务的快速迭代 在性能要求不高的情况下 同步架

随机推荐

  • 在Ubuntu上使用protobuf(C++)

    一 protobuf的下载和解压 protobuf提供了一些发布的版本 可以从里面下载指定语言的压缩包 例如 wget https github com protocolbuffers protobuf releases download
  • python从入门到放弃篇34(selenium库开启万花筒写轮眼)开启无界面模式,爬取豆瓣名著

    今天 突然发现 selenium库不开万花筒的话 有点脑热 因为 每爬一页就打开一个网页 除非我是撕裂者3990X的CPU 64核 128线的 但是 我的CPU不是 所以 怕到时候打开页面太多 直接卡机废了 我就去搜了开启万花筒模式 这样就
  • 【Python学习】Day-004 Day-005 if分支结构、三目运算符、for循环、while循环、循环关键字

    文章目录 1 分支结构 1 1 程序执行过程 1 2 if单分支结构 1 3 if双分支结构 1 4 if多分支结构 1 4 if嵌套结构 1 5 三目运算符 2 for循环 3 range函数 4 while循环 5 for循环和whil
  • 浏览器无法访问某个网站,其他网站都正常

    昨天在写完代码后 准备推送到远端配置的 Gitee 码云仓库 怎么也推不上去 一直报连接不到 然后在浏览器里试了下访问https gitee com 好吧 直接访问不到 但是访问其他网站都没有问题 当时和朋友连着语音 说到这个事情 他说应该
  • 小知识·Git常用命令

    1 强制推送 慎用 除非你认为其他冲突等可以丢弃 或者不是很重要 git push force 2 创建文件等小命令 touch a 创建一个a文件 echo 1234 gt gt a 把1234这个内容放入a文件 cat a 打开a文件
  • el-tree树设置懒加载以及设置默认勾选

    当需要对element ui组件懒加载进行拓展功能 如添加查看更多或者其他图标进行加载 可使用下面的方法进行调整使用 加载tree树时 要求能够通过点击查看更多进行懒加载 且可进行勾选复选框获取数据 由于界面存在多个Tree树 故命名多个r
  • 5. 一线大厂高并发缓存架构实战与性能优化

    分布式缓存技术Redis 1 冷热数据分离 2 缓存设计 2 1 缓存击穿 失效 2 2 缓存穿透 2 3 缓存雪崩 3 大V直播带货导致线上商品系统崩溃原因分析 4 突发性热点缓存重建导致系统压力暴增问题 5 缓存数据库双写不一致问题 6
  • 解类魔方算法(以C和JAVA为基础)

    这是15年前 环球科学杂志上的一篇文章 作者写了一个类似简单魔方的小游戏 M12 这是游戏说明 给大家翻译一下 游戏由两个按键控制 一个是 INVERT 另一个是 MERGE INVERT 英文的意思是 反向 能将 1 2 3 4 12 排
  • vscode 解决正在下载程序包“C/C++ language components (Linux / x86_64)” 失败引起的符号找不到问题

    1 问题 vscode ssh远程查看代码时 大纲无法罗列函数列表 根本原因是远程c c 插件没有安装成功 错误信息如下 正在下载程序包 C C language components Linux x86 64 失败 正在重试 失败 正在重
  • 前台-vue3使用animate.css

    cnpm install animate css save main ts import animated from animate css app use router use animated as any mount app 页面使用
  • BES固件烧录说明

    BES固件烧录说明 准备工具 烧录前准备 烧录步骤 单线烧录 单线升级的硬件要求 单线升级的软件要求 单线升级工具界面 单线升级步骤 详细演示了BES各芯片平台固件烧录的方法 包含串口烧录和单线烧录升级 适用于目前发布的BES2300系列
  • react + ts 配置项目路劲别名(import的时候使用@符号报错)

    前言 项目开发的过程中 tsx 页面中 import 引入项目的时候 ts 文件报错 找不到模块 xxx xxx 或其相对应的类型声明 其原因主要是因为目前 ts 对 指向 src 的目录的提示是不支持的 vite默认也不支持 所以需要手动
  • 小程序优惠券内圆角

  • Java技术——Java中的static关键字解析

    0 前言 static是Java中的重要的一个点 也是面试的时候经常被问到的点 如果理解不够很容易给面试官语言基础不扎实的印象 本文从static方法 static内部类 static变量 以及static代码块四个角度分别解析static
  • NRF24L01模块----6通道通讯测试

    一 MCU与NRF24L01通讯 采用SPI通讯协议 速率最大为10M 与普通SPI元器件稍有不同的是 多了一个CE引脚 用来开启接收 发送 以及使器件进入待机模式 具体看IC DATASHEET说明 写寄存器指令格式为 1 SPI写寄存器
  • elementui 自定义loading动画加载层

    elementui 自定义loading动画加载层 main js中添加 import Loading from element ui 自定义加载层 Vue prototype openLoading function wer const
  • YOLOV8-网络结构

    代码下载链接 https download csdn net download weixin 40723264 88011324 一 整体网络 本文结合YOLOv5网络进行讲解 通过与YOLOv5网络进行比较 进一步理解YOLOv8 尽快上
  • Go语言学习笔记——jwt跨域鉴权

    文章目录 Golang jwt跨域鉴权 jwt介绍 JWT 到底是什么 JWT 和 OAuth 选择签名方法 签名方法和密钥类型 安装jwt 简单使用 生成JWT 解析jwt 测试 生成token并解析token jwt在项目中的使用 第一
  • Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解

    Java学习 时间类 Period类与Duration类 LocalDate类与Instant类 用法详解 前言 java 8 中引入的两个与日期相关的新类 Period 和 Duration 两个类看表示时间量或两个日期之间的差 两者之间
  • 交易日均千万订单的存储架构设计与实践

    一 订单系统概述 1 1 业务范围 服务业务线 快递 快运 中小件 大件 冷链 国际 B2B合同物流 CLPS 京喜 三入三出 采购入 退货入 调拨入 销售出 退供出 调拨出 等 1 2 订单中心价值 1 解耦 提升系统稳定性 原系统 交易