• 京东话费充值系统架构演讲读后感


    阅读文章:京东话费充值系统架构演讲

    文章网址:https://mp.weixin.qq.com/s?__biz=MzUyMTAxMjIwNg==&mid=2247483681&idx=1&sn=8830b04a829566a548399a8030b557b8&chksm=f9e0d7a0ce975eb6955f5922d6cfee7417b4efc8255251899cb08d8598b3aee33f23a2d4dfb2&scene=21#wechat_redirect

    一、应用层面

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

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

    系统结构优化:核心生成流程异步处理,接收用户订单和给用户充值两个流程异步化处理,提高系统处理能力。对用户来说,用户付款成功,等待充值即可。系统可通过worker触发充值动作,设置合理的重试次数,间隔一定的时间进行重试。在到达最终状态前,给用户显示中间状态。拆解大应用,使其微服务化。从功能上进行微服务化以后,应用拆解为PC端、Server端、MQ消息处理端、后台管理端、worker端等五个应用,应用之间功能独立,依赖公司的RPC框架(JSF)和消息框架(JMQ)进行通信。单个应用的内聚性更高,应用之间的耦合度更低。

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

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

    二、数据库层面

    模拟MySQL slave的交互协议,解析数据库的增量BinLog,同步分库的数据到ElasticSearch中。由于数据库主从同步存在延迟的风险,需要准备一个降级方案。在话费充值应用中,数据库写订单成功后,插入一条任务记录,通过任务模型立即同步数据到ElasticSearch中。保证数据同步的实时性。

    三、应用部署

    在JVM内部隔离分为信号量隔离和线程池隔离,Netflix Hystrix插件提供了完美的支持。JD-Peer(多机房公网出口路由系统)中使用了Hystrix对每一个商家进行了隔离。话费充值应用对接了几十个商家,通过JD-Peer系统跟商家进行交互。

  • 相关阅读:
    自我介绍+软工5问
    第一天
    asp.net中使用CKEditor
    没有为扩展名“.html”注册的生成提供程序。.net urlwrite 重写 伪静态 IIs 配置
    局域网内,无法访问SQL2000的解决方法
    企业网站如何做SEO优化
    GridView结合Dropdownlist和Checkbox
    GridView实现删除时弹出确认对话框
    WebResource
    Tech tips(回发、显示名称、DataView过滤前10条记录)
  • 原文地址:https://www.cnblogs.com/lijing925/p/11047072.html
Copyright © 2020-2023  润新知