首页 > 其他分享 >系统存储架构升级分享

系统存储架构升级分享

时间:2024-01-10 09:33:37浏览次数:26  
标签:存储 同步 架构 DB 查询 分享 数据 ES 分布式

一、业务背景

系统业务功能:系统内部进行数据处理及整合, 对外部系统提供结果数据的初始化(写)及查询数据结果服务。

系统网络架构:

 

 

 

 

部署架构对切量上线的影响 - 内部管理系统上线对其他系统的读业务无影响

•分布式缓存可进行单独扩容, 与存储及查询功能升级无关 •通过缓存层的隔离, 系统扩展期间外部系统可保持不变, 只对内部管理系统升级 •内部系统上线/验证时, 除了业务场景1相关的初始化操作, 仍可提供读服务,降低上线影响

 

 

二、本次升级整体实施方案:

 

整体实施方案图例:

 

 

 

(一)、设立目标

商品全量渠道化-切量计划: (总量为当前10倍):

 

 

 

 

目前:

当前数据库常用表均已超过5000W, 其中部分结果表达6000W, 已达到MYSQL数据库表容量峰值, 对于全切量无法支持;

 

目标:

最高支持9亿: 根据切量计划, 全切量后系统约为6.7亿, 保留1/4的冗余, 取8.375亿; 向上取整9亿, 此值冗余量较大, 可满足未来5年数据支持

时间目标: 8月初方案设定, 8月17~8.22上线及验证, 8.24切量计划开始

(二)、当前系统现状

1、资源使用

•当前部署结构

——机房分布,Mysql: 1主4从(机房A 1主, 3从; 机房B只读从)

——机房分布,Doris: 32C, 63个节点, 3副本

•当前应用容器(docker)数量,db最大连接数

——应用容器数量: 62 (Web分组: 25, Worker分组: 31, MQ分组: 6)

——db最大连接数100 (每个容器配置)

•当前业务是否读写分离,读写比例情况

——无读写分离

•各业务场景下,是否可容忍主从延迟?可容忍的延迟时长是多少

——目前业务人员修改操作多数为同步操作, 修改完成后返回操作结果到前端, 从业务方操作+查询结果来说, 无法空忍延迟

——后台任务场景, 对于中间数据处理, 可以容忍主从延迟

•产品层面,系统出现瓶颈压力时,是否接受限流?是否接受数据延迟展示?

——对外服务接口本次不涉及开发, 服务接口不受影响;业务页面访问量少,可接受短时间内的延迟

•团队是否有ES使用经验

——部分了解, 未在项目中使用

 

2、数据库内部使用情况

表内空间, 业务场景等信息 (部分)

表名 当前表记录数 (单位:万) 最大支持条数 (单位:万) 表字段数 是否可拆分出分片键 分片键字段 是否存在不带分片字段的SQL 是否有跨表查询场景 数据记录读写比 是否存在写后立即查询 使用场景 数据是否 可截转 可接受的截转时长 切量后预估量 分布式DB ES 判断条件:是否有复杂查询 ES直接双写 判断条件: 写后立即查询
审批流表 3.5KW 4KW 43 sku 存在 存在 1000/1 存在写后用户手动再查询操作 1、页面创建审批流 2、页面查询审批流 3、页面数据置失效 4、审批平台回调修改   +3亿 UI修改后需重新点击"查询"按钮;
审批流细目表 (历史数据已清理) 800W 4KW 20 增加sku 存在 1000/1 存在写后用户手动再查询操作 1、刷新审批流(删除+增加) 2、查询审核中流程(任务) 审批通过可转冷备   转冷备  
业务数据表1 3.3KW 4KW 15 sku 100/1   1、审批流通过后, 创建 2、数据失效, 删除操作 3、后台工具: 同步缓存(存在复杂+分页查询)   +3亿
业务数据表2 5.9KW 4KW 16 sku 存在 (新增后异常按id删除) 1000/1   1、业务查询/导出维度1数据 2、业务查询维度2数据2 3、后台工具: 同步缓存   +5亿 同步大数据推送数据到缓存, 使用creator字段查询; 多个SKU分页查询
支持数据表(大数据平台计算后推送) 1.2KW 4KW 12 item_sku_id 5/1   1、运维工具: 增加/删除记录 2、清理历史数据(任务) 3、数据查询(显示使用) 4、计算 5、大数据推送数据 按日期推送, 目前保留3天 历史数据无用 doris? 一天3~4KW 删除数据dt
.....                                

 

 

(三)、技术方案选型

1、存储选型:

 

复杂查询(原因: 前端业务访问存在多表关联场景(2张千万级别表关联查询), 随着表容量变大, 关联查询性能下降, 已无法满足业务高效需求)

复杂查询决策因素:

    分布式DB(mysql) es doris TiDB
决策指标 产品定位 数据库 (OLTP) 搜索引擎 数据库 (OLAP) 数据库(OLTP+80%OLAP)
优势 1、高并发、高吞吐量事务处理 2、稳定性 3、数据实时(写后即读) 1、全文索引 2、复杂结构化查询 高并发查询分析 1、兼具事务处理+数据分析 2、自动拓展 3、数据实时(写后即读)
劣势 1、大量数据分析 2、手动拓展 1、事务处理 2、实时(写后即读) 1、事务处理 2、实时(写后即读) 高并发、高吞吐量事务处理
可靠性 高(多机房) 高(多机房) 低(共享集群) 低(单机房)
拓展性 库维度:平台管理 表维度:应用控制 平台管理   库维度:平台管理 表维度:应用控制
数据一致性 最终一致性 最终一致性   强一致性
运维支持 DBA 分公司运维 无专业运维团队 分公司DBA
总结 复杂业务查询慢 无法支持大数据量跨表查询、多维度复杂查询及全局排序 单表使用分片字段查询性能快 复杂业务查询性能高 部署结构为共享集群,(特别是)写性能受外部影响大 部署架构为单机房,无法满足0级系统可靠性要求
 
  架构目标        
结论 海量存储及高并发写 ✅ 大数据量存储,基于分库字段单表查询性能高, 单库事务处理

 

2、数据同步方案

A-准实时同步方案:

方案描述:使用DRC平台配置化完成分布式DB到ES的准实时数据同步 (注: DRC为公司内部通用数据同步平台, 可在多个数据源之间进行数据同步)

优势

 

 

B-双写强一致方案:

方案描述:双写分布式DB与ES, 保证数据一致性

优势

 

 

 

 

数据同步方案选择建议:

 

 

数据同步难点及解决方案:

问题:

•双表联合查询场景无法直接使用DRC平台同步, 需另开发相应的同步模块jar包, 嵌入DRC任务, 或放弃使用DRC, 直接使用代码同步, 都存在开发时间长问题 •ES索引空间占用多, 冗余记录条数多, , 查询结果需排重, 查询复杂

难点:流程表与流程细目节点表涉及联合查询, 两表都存在单表增删改的操作; 导致同步到ES的数据模型复杂、同步困难

 

 

 

 

解决方案:(数据库表增加冗余字段, 冗余字段专用于ES查询)

在DB的流程表增加待审人员, 已审人员字段, 字段的值使用空格分隔, 使用ES的分词功能, 同时ES可直接使用DRC工具直接同步此表数据, 减少同步的开发时间

方案成本: 增加/修改流程细目时同步修改流程表新增字段; 开发刷新历史数据工具

 

 

 

 

 

(四)、分阶段开发及上线实施步骤

1、系统业务改造-表字段增加(8月10日)

1) 业务表新增分库字段

部分业务表缺少分库字段,无法直接分片。针对业务表新增sku分片字段, 同时对现有逻辑改造增加SKU条件,以提升查询效率;

2) ES相关查询冗余字段的增加 (刷数据)

 

 

2、分布式DB分库数据同步+验证(8月11日)

1) 完成分布式DB分片库+ ES初始化;

2) 配置DRC完成原单库到分布式DB分片库的全量+增量数据同步;

3) 配置DRC完成分布式DB分片库到ES的全量+增量数据同步;

4) 通过检验工具,定期比对分布式DB单片、分布式DB分片及ES间的数据一致性。

 

 

 

 

3、读流量切换+验证 (8月17日)

1) 新增AOP切面, 通过DUCC配置(erp白名单, 全量读, 结果对比等维度配置),将读请求逐步切量到新应用集群

2) 待产品、业务侧完成验证后,切换全部读流量至新应用集群(注: 新应用集群使用数据库只读帐号)

 

 

 

 

4、写流量切换(8.21)

1) 2) 3) 停止原系统分组,确保原单库不再存有写流量,同时协调DBA对原库执行禁写(关闭worker, 暂停MQ消费)

4) 等待并确保原库数据均同步至目的库后,再次通过手动+自动方式校验新老两个数据库的数据一致性

5) 新系统分组切换为读写帐号, 进行部署

7) 研发及测试人员对新系统分组功能使用测试商品进行功能验证, 无问题后交由业务人员验证(切换静态运维页面)

8) 启动worker及接入MQ

 

 

 

 

5、上线后效果

上线后系统运行正常, 8.23至今已结转商品 2.6亿; 目前系统支持商品场维度数据3.16亿; 最大DB表数据已有2.84亿; ES数据4356W;

前后对比: erp:xxx; 此erp帐号数据29w 原查询9s,新查询1s;

四、总结

好的建议:

•全面、清晰的系统现状盘点:可以降低复杂度、提高质量 •清晰的上线计划:指导人员合理分工、缩短上线时间、降低上线难度

 

 

 

未解决问题:

目前分布式DB分布式事务支持比较弱, 无法保证跨分库时多条记录在一个事务中修改的正确性, 需要提交后进行读取后再验证确保数据正确保存

业务人员名下商品数据百万时, 查询时间仍然效长, 查询性能将持续优化

作者:京东零售 王凯

来源:京东云开发者社区 转载请注明来源

标签:存储,同步,架构,DB,查询,分享,数据,ES,分布式
From: https://www.cnblogs.com/Jcloud/p/17955806

相关文章

  • 【Django开发】美多商城项目第2篇:Django用户注册和登录开发(附代码,已分享)
    本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django+Jinja2模板引擎+Vue.js实现前后端逻辑,Nginx服务器(反向代理)Nginx服务器(静态首页、商品详情页、uwsgi......
  • 【机器学习】常见算法详解第2篇:K近邻算法各种距离度量(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻辑回归,决策树算法,集成学习,聚......
  • Linux常用命令分享
    $命令行提示符粗体表示命令斜体表示参数  filename,file1,file2都是文件名。有时文件名有后缀,比如file.zip  command命令名  dir文件夹名  string字符串  username用户名  groupname组名  regex正则表达式  path路径  d......
  • 微服务架构服务间调用如何规范
    目前微服务架构应用非常普遍,我们在获得其带来的优势的同时,需要思考是否解决了其带来的问题。在以往学习SpringBoot的过程中,就遇到关于Service循环依赖的问题。微服务架构中服务间相互依赖的问题仍然十分普遍,针对这个问题,我咨询过公司的架构师,他们的回答是无法解决/避免。显然上述......
  • 2024年1月深圳CPDA数据分析师认证高效备考成功经验分享
    CPDA数据分析师认证是大数据方面的认证,助力数据分析人员打下扎实的数据分析基础知识功底,为入门数据分析保驾护航。帮助数据分析人员掌握系统化的数据分析思维和方法论,提升工作效率和决策能力,遇到问题能够举一反三,为大部分决策难题提供解决方案。帮助数据分析人员掌握几种通用的数据......
  • 2024年1月杭州/武汉/深圳PMP®项目管理认证备考成功经验分享
    PMP®认证是ProjectManagementInstitute在全球范围内推出的针对评价个人项目管理知识能力的资格认证体系。国内众多企业已把PMP®认证定为项目经理人必须取得的重要资质。 【PMP®认证收益】1、能力的提升(领导力,执行力,创新能力,竞争力)。2、社会认可度高。3、工作效率提升。4、缩......
  • ARM64和X64架构之间的区别
    ARM64和X64架构之间的区别ARM64(也称为Aarch64)是一种64位的处理器架构,源自英国ARM公司设计的RISC(精简指令集计算机)架构。这种架构以其低功耗、高性能以及广泛应用于移动设备如智能手机和平板电脑而知名。近年来,由于其性能提升和能效优势,ARM64也开始在服务器和某些个人电脑平台上得到......
  • 系统存储架构升级分享
    一、业务背景系统业务功能:系统内部进行数据处理及整合,对外部系统提供结果数据的初始化(写)及查询数据结果服务。系统网络架构:部署架构对切量上线的影响\-内部管理系统上线对其他系统的读业务无影响分布式缓存可进行单独扩容,与存储及查询功能升级无关通过缓存层的隔离,系统......
  • iMessage群发功能常见源代码分享!
    随着智能手机的普及,即时通讯软件已经成为我们日常生活中不可或缺的一部分,其中,iMessage作为苹果公司开发的即时通讯软件,因其便捷、高效的特点受到了广大用户的喜爱。而在开发iMessage的群发软件时,我们需要注意一些常见的问题和实现方式,本文将为大家分享一些关于iMessage的群发软件开......
  • 苹果IOS如何支持微信小程序分享
    各位同学们好!我是咕噜铁蛋!,我们经常需要与读者分享有关移动应用的使用方法和技巧。微信小程序是一种便捷的应用形式,可以在微信内部直接使用,而无需下载和安装。本文铁蛋讲详细介绍iOS苹果支持微信小程序类型分享的使用方法,帮助你更好地了解和利用这一功能,拓展你的内容传播渠道。一.什......