浅谈订单重构之路

简介: 浅谈订单重构之路

前言

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


背景

  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通信。



相关文章
|
存储 缓存 NoSQL
数据库实体与关系模型
【5月更文挑战第16天】本文介绍了数据库模型和UML关系,UML包括依赖、关联(聚合、组合)、泛化和实现4类关系。UML有13种图,分为结构图、行为图和交互图。数据库的基本数据模型包括外模式(用户视图)、概念模式(全局逻辑结构)和内模式(物理存储)。数据模型三要素是数据结构、操作和约束条件。简单易用的缓存数据模型适用于需求灵活、高性能、大数据量且不要求强一致性的场景。
376 5
数据库实体与关系模型
|
运维 关系型数据库 OLAP
阿里云百炼 x AnalyticDB向量引擎, 搭积木式轻松开发专属大模型应用
对大模型应用跃跃欲试,但奈何技术栈复杂难以下手?已经进行试水,但缺乏调优手段无法保障召回率和问答准确度?自行搭建大模型、向量检索引擎、服务API等基础组件难以运维?大模型种类繁多,但缺乏行业模型和应用模板?阿里云百炼 x AnalyticDB向量引擎推出一站式企业专属大模型开发和应用平台,像搭积木一样轻松完成企业专属大模型应用的开发,提供应用API,可一键接入企业自己的业务应用对外提供服务。
2502 2
|
消息中间件 缓存 监控
订单系统的优化
订单系统的优化
|
存储 SQL 关系型数据库
如何设计可落地的重构技术方案——理论篇
如何设计可落地的重构技术方案——理论篇
468 0
|
11月前
|
存储 开发工具 数据安全/隐私保护
git报错The project you were looking for could not be found 解决方式
git报错The project you were looking for could not be found 解决方式
2979 1
|
边缘计算 缓存 自动驾驶
5G如何实现更高的数据速率?涉及哪些技术?
5G如何实现更高的数据速率?涉及哪些技术?
458 0
|
消息中间件 存储 缓存
消息队列之推还是拉,RocketMQ 和 Kafka 是如何做的?(上)
消息队列之推还是拉,RocketMQ 和 Kafka 是如何做的?(上)
消息队列之推还是拉,RocketMQ 和 Kafka 是如何做的?(上)
|
JSON 安全 API
实战指南:使用PHP构建高性能API接口服务端
构建RESTful API的简要指南:使用PHP和Laravel,先安装Laravel并配置数据库,接着在`api.php`中定义资源路由,创建`PostController`处理CRUD操作,定义`Post`模型与数据库交互。使用Postman测试API功能,如创建文章。别忘了关注安全性、错误处理和性能优化。
362 2
|
存储 NoSQL 算法
线上真实排队系统重构案例分享——实战篇
线上真实排队系统重构案例分享——实战篇
804 0
|
存储 缓存 人工智能
解码 LangChain | LangChain + GPTCache =兼具低成本与高性能的 LLM
GPTCache 是一个用于存储 LLM 响应的语义缓存层。它可以为 LLM 相关应用构建相似语义缓存,当相似的问题请求多次出现时,可以直接从缓存中获取,在减少请求响应时间的同时也降低了 LLM 的使用成本。
681 0