写点什么

CRM 重构项目

作者:Mars
  • 2022 年 2 月 16 日
  • 本文字数:869 字

    阅读完需:约 3 分钟

CRM重构项目

业务背景

老 CRM 现状:

1、开发语言:C#

2、存储系统:SqlServer,数据量:10 亿+

3、使用年限 10+,性能慢

重构目标

1、开发语言:Java 技术体系

2、存储系统:Mysql

3、性能指标:1s 内

4、数据平稳迁移不丢失


技术选型

SpringCloud、Mysql、Redis、ES、RabbitMQ、Kafka

redis 使用场景

1、管理者角色可见数据范围较大,事先缓存管理者能看到的下属销售顾问的 id 集合(List 数据结构)。

2、销售顾问每日签到统计(Set 数据结构)。

ES 和 Kafka 使用场景

1、业务场景存在多表 join,在数据量较大而且无索引可用时满足不了性能指标,通过 Canal 同步 Mysql 数据,经过 Kakfa 到 ES 中,提供检索功能。

RabbitMQ 使用场景

1、接收跨系统的消息保存本地 Mysql(比如订单系统的消息 MQ 入库本地)

技术架构


项目难点

1、新系统 和 老系统 有共存期(6 个月),这期间涉及数据怎么保持唯一性?

2、新系统产生增量数据,老系统下线时候数据怎么迁移到新系统问题?

3、老系统下线时数据迁移方案?

4、订单数据量大(5000w),怎么存储和检索问题?

5、列表检索涉及 5、6 张表的 join 查询(每张表数据几百万至少千万),怎么检索?


解决方案

1、新系统增量数据采用双写机制,同步一份到老系统中,新老系统通过特殊字段 uuid 关联以达到区分数据的来源。老系统增量数据不写入新系统。业务上涉及校验唯一性的需要在 2 边库中校验(新系统多数据源 Mysql+SqlServer)。


2、由于老系统 Sqlserver 的数据采用自增主键,Mysql 同样采用自增主键。设计之初通过设计 Mysql 的所有表的自增主键从 5000w 开始,预留了足够 id 空间给老系统数据迁移到 Mysql 中。


3、SQLServer -> Mysql ,迁移方案采用 Kettle ETL 迁移方案(迁移中会涉及到部分简单逻辑清洗)。


4、订单采用分表支持,一个全局的 OrderRoute 表,全量订单号+分表序号(id, order_no, table_no,table_start_time)。由于订单有明显的时间序列特性且业务上场景基本是按订单号检索,所以分表机制采用时间维度划分。有涉及的复杂检索走搜索引擎 ES。


5、根据业务检索所需字段,逻辑上将 5、6 张表中的字段关联抽取组合成宽表索引字段,通过 Canal 同步将 Mysql 数据变更近实时的同步到 ES 以提供业务上 join 检索功能。


用户头像

Mars

关注

还未添加个人签名 2018.04.26 加入

还未添加个人简介

评论

发布
暂无评论
CRM重构项目