京东话费充值业务线的订单量‘水涨船高 ’,同时对系统的各项运行指标要求更高,老的系统架构不足以支撑新的业务量,需要对系统进行升级。升级方案从以下几个层面进行。

1、应用层面

引入缓存

在应用层和数据库层增加缓存层,热点数据放入缓存。如系统中常用的开关、白名单等数据,读取频率高写入频率低,针对这部分数据就可以在JimDB(Redis)中存储一份,JimDB (Redis)会把高频数据存储在内存中,读写性能很高。数据写入缓存时设置一个有效期,更新数据库成功后,异步更新缓存数据。如果实时性要求不高,也可以等缓存失效后,主动更新缓存。引入缓存层,降低数据库压力,提升系统响应速度。

编写并发处理程序

多任务并发处理,充分利用CPU资源。无依赖关系的多条任务可以并行处理,提高系统处理能力。如结算任务,每笔订单之间的结算操作没有依赖关系,可以同时执行多条结算任务

系统结构优化

读写分离

实时性要求不高的数据读取从库,降低主库压力。如对账功能,读取的是前一天的订单数据,这些数据就没必要从主库中读取。关于技术实现上,Spring框架本身有提供,实现其抽象类AbstractRoutingDataSource即可。

变化频率低的页面静态化

充值应用中有很多卡片页,如QQ页卡等,页面上的数据变化的只有广告位。这种类型的页面就可以静态化,定时更新页面,推送到存储介质上,nginx配置location,直接读取页面,降低后端服务的压力。

数据库层面

当业务量发展到一定程度后,数据库就会成为系统的瓶颈。话费充值应用包含企业订单业务和普通用户订单业务,正是由于其业务的特殊性,采用了垂直+水平分库方案。根据业务类型进行垂直切分,不同业务类型订单数据独立存储,同一种业务类型在水平上由多个库保存。垂直+水平的分库方案能够最大限度的降低不同业务类型订单数据之间的相互影响,提高数据读写并发量。普通用户订单业务,根据账户PIN进行hash打散可以均匀的分布到每个库中,sharding规则就是hash(pin)值,同时这个hash(pin)值还做为本地订单号的前缀,这样就可以通过账户PIN和本地订单号两个维度中任一维度都可以路由到数据库。创建ERP订单成功后,把本地订单号和ERP订单的映射关系保存到JmiDB中,对于只有ERP订单号的业务流程,可以通过映射关系找到本地订单号,有了本地订单号也就可以路由到数据库了。而企业订单业务,每个企业账户的订单量不均,差别能达到三个数量级,如果再根据账户PIN进行hash打散分布到每个书库中的订单就会不均匀,不能使用这种sharding规则。根据本地订单号进行hash,然后再作为本地订单号的前缀。创建ERP订单成功后,同样需要保存本地订单号和ERP订单号的映射关系到JmiDB中,以保证在后续的业务流程中,能够根据ERP订单号路由到数据库。拆分完成后,有的业务场景需要聚合查询数据,如订单管理。如果没有聚合数据,就需要在应用中,开发人员自行考虑聚合。通用的聚合方案是从每个库中查询一页数据,在内存中根据条件排序,返回一页数据,如果需要翻页的话,逻辑更为复杂。话费充值应用采用了第三方存储,把每个分库中的订单数据聚合到ElasticSearch中,查询聚合数据的场景读取ElasticSearch。模拟MySQL slave的交互协议,解析数据库的增量BinLog,同步分库的数据到ElasticSearch中。由于数据库主从同步存在延迟的风险,需要准备一个降级方案。在话费充值应用中,数据库写订单成功后,插入一条任务记录,通过任务模型立即同步数据到ElasticSearch中。保证数据同步的实时性。

话费充值折扣数据库_《京东话费充值系统架构演进实践》--阅读相关推荐

  1. 百度直播的海量用户实时消息系统架构演进实践

    1.引言 一套完整的直播系统核心功能有两个: 1)实时音视频的推拉流: 2)直播间消息流的收发(包括聊天消息.弹幕.指令等). 本文主要分享的是百度直播的消息系统的架构设计实践和演进过程. 实际上:直 ...

  2. 直播系统聊天技术(四):百度直播的海量用户实时消息系统架构演进实践

    本文原题"百度直播消息服务架构实践",由百度APP消息中台团队原创分享于"百度Geek说"公众号,为了让文章内容更通俗易懂,本次已做排版优化和内容重新划分,原文 ...

  3. 美团配送系统架构演进实践

    写在前面 美团配送自成立以来,业务经历了多次跨越式的发展.业务的飞速增长,对系统的整体架构和基础设施提出了越来越高的要求,同时也不断驱动着技术团队深刻理解业务.准确定位领域模型.高效支撑系统扩展.如何 ...

  4. 直播系统定制开发——海量用户实时消息系统架构演进实践

    1.引言 一套完整的直播系统定制开发核心功能有两个: 1)实时音视频的推拉流: 2)直播间消息流的收发(包括聊天消息.弹幕.指令等). 本文主要分享的是百度直播的消息系统的架构设计实践和演进过程. * ...

  5. 京东到家搜索系统架构演进

    目录 一. 前言 二. 搜索系统架构演进 2.1 到家搜索系统1.0 基于LBS搜索召回场景 建立"可用"的搜索系统 小结 2.2 到家搜索系统2.0 重构召回 排序模型小试牛刀 ...

  6. 去哪儿网支付系统架构演进

    作者简介:吕博,去哪儿网金融事业部研发工程师,毕业于吉林大学,2012年加入去哪儿网. 致力于支付平台研发和支付环节的基础服务建设. 正文 去哪儿支付系统自 2011 年搭建以来,在五年的时间里逐渐从 ...

  7. 《去哪儿网支付系统架构演进全历程》阅读有感

    <去哪儿网支付系统架构演进全历程>阅读有感 支付系统1.0 新的业务系统初建时,业务逻辑相对简单,业务量也比较小,为了能够快速实现功能,发布上线,大多数团队都会把所有的逻辑都耦合在一个系统 ...

  8. 去哪儿网支付系统架构演进(下篇)

    上篇给大家介绍了去哪儿支付系统架构演进的服务化拆分(点击阅读原文可查看上篇内容),接下来介绍一下在服务化拆分过程中遇到的一些问题与挑战,拆分过程中的DB处理.异步化,监控&报警等内容. 2.2 ...

  9. Apache Ranger、业务背景、现状与需求、大数据安全组件介绍与对别、系统架构及实践、ranger admin、UserSync、plugin、权限模型、权限实现等

    26.2.1业务背景 26.2.1.1现状&&需求 26.2.2大数据安全组件介绍与对比 26.2.2.2 Apache Sentry 26.2.2.3 Apache Ranger 2 ...

最新文章

  1. 二分法:查找区间search for a range
  2. html5展示json数据库,显示数据在html5从数据库使用javascript和json
  3. Springmvc ajax请求400
  4. 运动估计算法的程序实现_偷天换日,逼真的天空置换算法
  5. 使用 WorkManager 管理后台和前台工作
  6. 一致性哈希算法原理分析及实现
  7. tf.layers.dropout
  8. 嵌套矩形——DAG上的动态规划
  9. 【JS 逆向百例】某空气质量监测平台无限 debugger 以及数据动态加密分析
  10. HIVE ORC 报错ClassCastException
  11. LinuxC高级编程——进程
  12. ZBrush中Tool工具的保存
  13. springboot 多线程_从零开始到架构,800页Java+并发+容器+多线程+高并发+Spring+SpringBoot源码...
  14. 扇贝有道180909每日一句
  15. java读取配置文件的详细写法,Properties配置文件读取相关java知识
  16. iPhone Xs上手体验,原来用绿联的转接线就能边充电边听歌
  17. 如何快速打开.pos
  18. VOC数据集提取自己需要的类
  19. git stage 暂存_git学习小计(二):常用命令、index暂存区
  20. 计算机所有以太网适配的ip,以太网没有有效的ip配置怎么办

热门文章

  1. IMP811REUS/T小秘密
  2. java点击按钮发出声音_java – 按下按钮时播放声音-android
  3. android按钮添加音效,Android------Button 添加声音效果(两种方式)
  4. zabbix学习资料收集
  5. 位移运算(左移,右移)
  6. CSS3伪类选择器:nth-child(n)及:nth-of-type(n)使用区别探究总结
  7. GTX960M安装Anaconda+cuda9.0+cudnn v7.6.5+tensorflow-gpu1.8.0
  8. 用公司邮箱发错邮件怎么弄?邮件可以撤回吗?
  9. matlab绘制图形hold on_MATLAB中hold on和figure的区别?画三维图为什么一定要meshgrid?...
  10. SD卡 (SD miniSD microSD SDIO)知识详解