浅谈订单重构之路

简介: 浅谈订单重构之路

前言

最近负责了订单重构项目,从技术方案设计,到最终落地,项目圆满完成。虽然重构项目做了很多次,每次都是在挑战极限,在时间紧任务重的情况下,有条不紊的推进。最终提测质量高,平滑上线,此文章特此记录一下。


背景

  1. 1.原订单单库单表,数据量大,已到达性能瓶颈,且无法水平扩容。
  2. 2.订单增长迅速,重构迫在眉睫。

目标

  1. 1.订单分库分表,方便后期水平扩展
  2. 2.订单流程改造,并且平滑过渡到新流程


重构方案

注: 所谓重构方案,一定是基于特定场景的,没有统一方案,但核心思想是一样的。

场景: 网约车场景,下单量大,但是大部分订单会派不上司机取消。

方案: 增加派前订单表,派前订单表分库分表, 派上司机后,订单进入派后表(老表)

此方案优势: 不影响派后订单流程(例如,司机端流程,计费流程),压力集中在派前表,同时派前表数据无需长时间保留(例如7天归档)。派前订单表数据量极小,查询写入效率高。



分库分表方案:



灰度方案

按流量灰度,分为5个阶段,平滑过渡到新流程

一阶段 二阶段 三阶段 四阶段 五阶段
1/100000 1‰ 10% 50% 100%


时间安排


调研&方案设计: 4天

开发人力: 4人7个工作日

测试人力: 6人3个工作日

灰度时间: 2周

注: 虽然时间紧,任务重,该有的流程不能忽视


重构收益

本次重构如期上线,并且测试阶段bug极少,可以说超预期。

  1. 1.在数据库资源不变情况下,下单接口性能提升N倍(N>4)。
  2. 2.重构后下单接口RT<50ms, 基础服务(dubbo服务)下单接口 RT < 5ms。
  3. 3.订单分库分表,分了256张表,8个库,目前在一个数据库集群,最多支持8个数据库集群水平扩展。

4)订单架构分层,分为业务层和数据层,订单内部通信改为RPC通信。



相关文章
|
8天前
|
消息中间件 存储 缓存
如果对方没做幂等!记一次生产订单重复的反思
公司旧系统中发现一个严重bug:用户支付一年服务费,系统却将有效期增加了两年。经分析,原因是消息队列(MQ)向第三方服务发送了两次消息,且该接口未实现幂等性控制。此问题可能导致财务损失和信誉受损。解决方案包括:生产者端通过请求频率限制、幂等键等防重措施;消费者端利用缓存和数据库确保幂等性;消息队列层配置去重功能、TTL和死信队列等。
17 0
|
4月前
|
编解码
重构支付宝商家账单问题之在重构过程中,替换老账单如何操作
重构支付宝商家账单问题之在重构过程中,替换老账单如何操作
|
4月前
|
存储 运维 搜索推荐
重构支付宝商家账单问题之重构支付宝商家账单的目标是什么,如何实现
重构支付宝商家账单问题之重构支付宝商家账单的目标是什么,如何实现
|
供应链 NoSQL Redis
库存预占架构升级方案设计 - 交易库存中心
伴随物流行业的迅猛发展,一体化供应链模式的落地,对系统吞吐、系统稳定发出巨大挑战,库存作为供应链的重中之重表现更为明显。近三年数据可以看出:
249 0
|
7月前
|
JSON API 数据格式
1688一件采购实现指南:含代码实现采购流程
1688是中国最大的B2B电子商务平台之一,提供了丰富的商品信息和采购服务。一键采购是1688平台的一项便捷功能,可以帮助用户快速完成采购流程,提高采购效率。本文将详细介绍如何使用1688一键采购功能,并通过代码示例演示如何实现一键采购的自动化操作。
|
存储 监控 供应链
聊聊「订单」业务的设计与实现
订单业务一直都是系统研发中的核心模块,订单的产生过程,与系统中的很多模块都会高度关联,比如账户体系、支付中心、运营管理等,即便单看订单本身,也足够的复杂;
11730 3
聊聊「订单」业务的设计与实现
|
存储 前端开发 NoSQL
开发小技巧系列 - 如何防止重复生成订单
如何防止重复生成订单,数据幂等性的处理
200 0
|
前端开发 微服务
微服务项目:尚融宝(59)(核心业务流程:提现和还款(2))
微服务项目:尚融宝(59)(核心业务流程:提现和还款(2))
微服务项目:尚融宝(59)(核心业务流程:提现和还款(2))
|
前端开发 决策智能 微服务
微服务项目:尚融宝(58)(核心业务流程:提现和还款(1))
微服务项目:尚融宝(58)(核心业务流程:提现和还款(1))
微服务项目:尚融宝(58)(核心业务流程:提现和还款(1))
|
消息中间件 存储 数据库
回退库存流程分析|学习笔记
快速学习回退库存流程分析
174 0
回退库存流程分析|学习笔记