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

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中。保证数据同步的实时性。

转载于:https://www.cnblogs.com/mm20/p/11051180.html

《京东话费充值系统架构演进实践》--阅读相关推荐

  1. 阅读《SentiLARE: Sentiment-Aware Language Representation Learning with Linguistic Knowledge》

    SentiLARE: Sentiment-Aware Language Representation Learning with Linguistic Knowledge Abstract 现有的预训 ...

  2. Align before Fuse: Vision and Language Representation Learning with Momentum Distillation

    ALBEF:Align before Fuse: Vision and Language Representation Learning with Momentum Distillation 论文链接 ...

  3. # 互信息最大化[视角统一]:Align before Fuse: Vision Language Representation Learning with Momentum Distillation

    互信息最大化[视角统一]:Align before Fuse: Vision and Language Representation Learning with Momentum Distillati ...

  4. 【论文模型讲解】VideoBERT: A Joint Model for Video and Language Representation Learning

    文章目录 前言 0 摘要 1 Introduction 2 相关工作 3 模型 3.1 BERT 3.2 VideoBERT 4 实验与分析 4.1 数据集 4.2 视频和语言预处理 4.3 模型预训 ...

  5. [论文学习]TDN: An Integrated Representation Learning Model of Knowledge Graphs

    [论文学习以及翻译]TDN: An Integrated Representation Learning Model of Knowledge Graphs 文章主要内容 摘要 前言 相关工作 基于T ...

  6. Kaiming He论文阅读笔记三——Simple Siamese Representation Learning

    Kaiming He大神在2021年发表的Exploring Simple Siamese Representation Learning,截至目前已经有963的引用,今天我们就一起来阅读一下这篇自监 ...

  7. [论文阅读] iCaRL: Incremental Classifier and Representation Learning

    论文地址:https://openaccess.thecvf.com/content_cvpr_2017/html/Rebuffi_iCaRL_Incremental_Classifier_CVPR_ ...

  8. 自然语言处理学习——论文分享——A Mutual Information Maximization Perspective of Language Representation Learning

    资料放在前面:https://blog.csdn.net/Arnetminer/article/details/105840669 文章的贡献如下: (1)提出了一个基于最大化MI的理论框架来理解词表 ...

  9. CVPR 2020 《12-in-1: Multi-Task Vision and Language Representation Learning》论文笔记

    目录 简介 动机 贡献 方法 实验 简介 本文是在NIPS 2019 ViLBERT上的拓展. 论文链接 动机 本文修改了ViLBERT的预训练过程,有两个小修改:1. 对regions进行mask时 ...

  10. 论文阅读Unsupervised Corpus Aware Language Model Pre-training for Dense Passage Retrieval

    密集文本检索的无监督语料库感知语言模型预训练 ACL2022 论文链接 摘要 最近的研究证明了使用微调语言模型(LM)进行密集检索的有效性.然而,密集检索器很难训练,通常需要经过精心设计的微调管道才能 ...

最新文章

  1. A Famous Music Composer
  2. AgilePoint商业流程管理平台
  3. 关于自己写博客的重要性
  4. AttributeMap类详解
  5. 时间管理领域的三八原则
  6. VMware vSphere 功能特性比较 vsphere 6.5/6.7/7.0
  7. python逐行输出_python逐行输出
  8. 52. Element item() 方法
  9. 蓝桥杯代码测评使用指南
  10. 微信小程序图片固定宽度,高度自适应处理方法及相关API介绍
  11. IEEE1588工业以太网交换机
  12. 2022苏州微软前端社招面经
  13. 《东周列国志》第三十八回 周襄王避乱居郑 晋文公守信降原
  14. java计算两个时间为天数_java计算两个时间相差天数的方法汇总
  15. 郑厂长系列故事——排兵布阵 状态压缩DP
  16. 软件设计师教程(九)计算机系统知识-软件工程基础知识
  17. Oracle 11G启动自动内存管理AMM
  18. 分享以下内容到高校bbs或者科研论坛
  19. 平顶山学院微信缴学费使用说明
  20. 学php设计需要什么基础知识,学习seo需要哪些基础知识

热门文章

  1. 对接钉钉API语音功能相关文档
  2. 用proteus来看二极管的单向导电性
  3. Android 仿微信全局字体大小调整
  4. JS--历史搜索记录的实现
  5. 2020年最全各省市矢量数据下载(含城市道路、铁路、高速、省道、县道、乡道等+河流水系网+建筑轮廓+铁路网等shp矢量数据+矢量量边界+wgs84坐标
  6. Vim插件管理:Pathogen安装
  7. Calculate Tangent Space是怎么计算切线的
  8. 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程!
  9. Day3 算法基本要素
  10. con排插与单片机相连_单片机与8255芯片连接详解