每次大促都是考验各电商架构的最好时机,然而一般电商大促时,我们可能更关注系统架构如何降级如何限流等经典手段。这次换个视角,中间件在《京东技术解密》一书中被京东喻为大促通天塔,而京东作为中国互联网电商主角之一,我们看看中间件技术如何撑起京东每一场大促的。

\\

2016年12月2日-3日,ArchSummit全球架构师峰会将在北京国际会议中心举行。本次大会设置了《电商专题:系统架构如何应对业务爆发式增长》和《阿里双11技术架构突破》专题来深入解读双11等大促背后的技术故事,其中邀请了京东商城中间件负责人何小锋老师前来分享《京东核心中间件是如何支撑业务快速发展》,我们借此机会采访了何小锋老师,他为我们带来有关中间件的演进思路,希望可以为大家带来启发,如果读者想了解更多京东中间件的技术细节,欢迎报名参加ArchSummit北京站并与何小锋老师进一步交流。

\\

受访嘉宾介绍

\\

何小锋,京东商城中间件负责人,拥有18年的研发经验,喜欢技术,追求卓越。2011年加入京东,目前在京东商城负责中间件技术部门。入职京东后,担任了京东两届架构委员会常委,先后带领团队自主研发高性能的消息平台,落地基于Docker的国内最大的弹性云。在京东期间支持过多次的618和双11大促,见证了京东的技术演进过程,在弹性计算、中间件、大并发分布式系统等方面积累了丰富的实战经验。

\\

InfoQ:您拥有18年的研发经验,能否介绍这段时间自己的程序员经历?是否面临过几次关键选择?

\\

\

何小锋:18年,一直没有脱离Coding,积累了很多的系统架构经验,在2011年加入京东,被京东面临的技术挑战所吸引。整个coding生涯中有过2次关键选择:

\\

  1. \\t

    从传统的电子政务行业转到互联网行业;

    \\t\\t

  2. \\t

    选择了京东,给自己一个挑战发挥的平台。

    \\t\

由于自己很喜欢技术,而且喜欢中间件、高并发分布式和弹性计算这三大领域本身带来的技术挑战,目前这些技术已经是公司的核心支撑系统,是京东抗大流量的关键。

\\

另外这几大领域需要掌握软件、操作系统、硬件和网络等多方面的知识才能更上一层楼,并且有很多需要专研的地方,需要长时间的专注才能做好。

\

\\

InfoQ:中间件技术部门承担了怎样的任务和职责?落地基于Docker的弹性云给部门带来怎样的影响?

\\

\

何小锋:中间件技术部门承担中间件研发和运维支持工作,确保现有系统稳定,持续优化满足业务需求,跟进业界技术发展,孵化新的中间件产品解决业务问题。

\\

目前京东中间件最核心的3大产品如下:

\\

  1. \\t

    JSF,自主研发高性能分布式的RPC微服务框架,是京东服务化、开放化的技术标准;

    \\t\\t

  2. \\t

    JIMDB,自主研发高性能分布式的缓存,基于Docker架构,具有弹性伸缩、快速故障迁移等能力;

    \\t\\t

  3. \\t

    JMQ,自主研发的高性能分布式的消息队列

    \\t\

弹性云落地对中间件研发架构有很大的促进,JIMDB基于Docker实现弹性伸缩能力。另外中间件还要适应容器的环境,如准确获取CPU数量便于控制线程数,避免频繁的线程切换。流量均匀也是后续要改善的方向,容器的规格小,前后申请不一致,物理机硬件配置不一样,造成每个实例的承载能力不一样,需要中间件能自动负载均匀。

\

\\

InfoQ:目前京东微服务框架JSF调用规模在日常和大促时分别处于什么量级,JSF的主要核心部件如何实现高可用?

\\

\

何小锋:JSF日常调用在千亿规模,大促期间会翻2-5倍。

\\

\\

实现高可用方面,以注册中心为例,注册中心以异步持久化到数据库中,通过本地全量缓存来提升性能,节点直接通过事件总线同步,可以做到横向扩容。如果数据库宕机,可以通过缓存继续提供读取服务。

\\

另外每个机房都会部署若干节点,客户端通过目录服务优先拿到本机房的注册中心节点列表,后续通过定时更新注册中心列表。

\\

当服务有变化的时候,注册中心回调客户端,推送变化给客户端,客户端会在内存中缓存一份服务地址,在本地会存储一些备份文件。如果注册中心连接不上,客户端可以依赖本地缓存继续调用。

\\

监控中心提供的是JSF服务,数据直接通过ES存储。

\\

实现高可用过程中为了深挖单实例性能,我们做了优化序列化协议,传输数据进行压缩,并且通过RingBuffer进行组提交,采用NIO/EPOLL,优化线程模型,提升并发能力。

\

\\

InfoQ:JSF目前是否还存在瓶颈?

\\

\

何小锋:JSF到目前已经很成熟,性能、稳定性和易用性都很高。

\\

JSF提供了强大的服务治理功能,包括常见的分组、上下线、黑白名单、路由等,也做到了例如动态分组、同机房优先、配置下发、调用限流、授权调用等等功能,并且开放了部分服务治理API,供开发者自行调用。

\\

JSF未来会持续在治理和监控上进行改进,完善分布式跟踪,便于快速定位问题。另外HTTP网关会通过支持HTTP/2协议来优化性能。

\

\\

InfoQ:目前京东消息中间件从开源软件的JQ、ActiveMQ发展到自研的JMQ,能否简述这段演进过程?基于怎样的判断和背景会开始对下一代的筹备?

\\

\

何小锋:JQ严格意义上来说还算不上一个消息中间件,它基于数据库实现,当时的用户也比较少。

\\

随着公司SOA化工作开展,迫切需要成熟的高可用消息中间件来支持,我们采用开源的ActiveMQ来作为第一代分布式消息平台。在其基础上做了一系列的平台化改造,包括应用治理、监控报警、分布式客户端、归档、重试、存储复制,我们对这些功能也进行了优化和更新。

\\

随着业务量的快速增长,它的性能成了很大的瓶颈,存储逻辑复杂,消息积压后对性能影响很大,已经很难进行优化。通过积累的研发和运营经验,我们决定自助研发JMQ。JMQ在存储、网络通信、消息处理、数据复制等方面进行了很大的优化改进。另外在升级的过程中,考虑了兼容性,例如JMQ兼容AMQ客户端协议,做到了平滑过渡。

\\

为什么没有一步到位?每一代消息中间件都是基于业务的发展需要的,京东这些年发展之快,业务又有其不确定性,所以我们在这过程中也是不断的探索,不断的重构。

\\

至于何时开始下一代消息中间件的筹备,我们会主要基于高可用、性能和自动化运维瓶颈等方面考量。JMQ我们目前正在做兼容Kafka协议,大幅提升自动化运维能力,减少备战工作。

\

\\

InfoQ:以您的判断来看,互联网企业是否会逐渐摆脱开源软件的依赖,走向自主研发以获得彻底的掌控力?

\\

\

何小锋:这个是根据业务发展的需要的,成熟稳定的开源系统还会持续支撑,满足不了需求的开源软件会逐步被自研替换。我的建议是控制好收益,加强内外交流,最后要回馈开源社区。

\

\\

InfoQ:JMQ在大促时能处理多少的写入、投递高峰?后端消费不稳定的情况下如何保证消息投放稳定?

\\

\

何小锋:JMQ在大促时单个分片同步复制和刷到磁盘,能达到写入1K消息,TPS可以超过4万每秒。针对日志等场景,通过配置异步复制和刷盘还可以大幅度提升性能。我们预计整个平台,双11当天消息投递量会达到千亿规模。

\\

消费者采用拉模型,处理速度完全由消费者控制,如果处理速度慢,消息会保留在服务端,保留时间为2天。由于大促的需要,每个系统都会进行大流量压测军演,不会存在2天都消费不了的消息。

\\

JMQ的存储模型,消息积压在服务端,对写入和消费性能没有影响。积压了会给用户进行报警,如果存储空间不够了,会停用当前实例的写入,进行扩容。

\

\\

InfoQ:能否谈谈在大促期间中间件团队所做的工作?在接下来的大促会做哪些准备和调整?以前的大促遇到过哪些问题以及应对方案?

\\

\

何小锋:中间件会成立专门的项目来推荐大促的备战工作,主要包括如下几块工作

\\

  1. \\t

    系统梳理工作:整理现有部署架构,核心客户,每日巡检;

    \\t\\t

  2. \\t

    部署扩容:资源评估、核心客户扩容、容灾部署;

    \\t\\t

  3. \\t

    应急预案:整理和评估应急预案;

    \\t\\t

  4. \\t

    压测演练:模拟故障演练,性能压测;

    \\t\\t

  5. \\t

    对发现的问题就改进优化

    \\t\\t

  6. \\t

    24小时值班监控

    \\t\

每次大促发现的问题都会作为后续研发改进的需求,例如AMQ性能不好,后续自研JMQ。

\\

面对以后的大促,我们会大幅提升自动化运维来满足大促的需求,包括弹性扩容,更丰富的监控报警,更迅速可控的故障切换、自动化容灾、核心客户物理隔离等等。

\\

另外随着业务的发展,如何更好地支持业务海量数据缓存需求,我们也在规划新版的JIMDB。

\

\\

InfoQ:能否简单概述自动扩容缩容中数据迁移的技术原理?中间件实现快速故障切换和弹性伸缩能力的难点在哪里,最后如何解决的?

\\

\

何小锋:JIMDB提供基于Docker的弹性伸缩能力。目前JIMDB一个分片有2G内存数据,当需要迁移时,节点会先把已有的数据按照一定的规则全量复制一份到新的shard上,在全量复制过程中会有增量的数据产生,这部分数据另外保存一份到指定的缓冲区中,当全量复制完成后马上同步缓冲区中的数据,当缓存区中需要同步的数据比较少时,会阻塞待分裂节点的写入直到增量数据也同步完成。

\\

快速故障切换和弹性伸缩能力的难点主要如下:

\\

1.准确及时的故障定位,包括软件宕机、网络、硬件等方面的故障。我们通过Agent秒级采集监控数据,对新出现的故障通过录入关键词来自动学习,宕机/网络不通则采用多个决策者投票决定。

\\

2.资源的合理调度,包括容灾,确保资源调度均匀、并发控制,核心业务做到隔离,相关的具体实践有:

\\

  • \\t

    应用接入的时候要完善信息,能识别是否是核心业务,是否需要隔离,业务的吞吐量需求等等;

    \\t\\t

  • \\t

    通过资源标签来匹配满足业务的资源;

    \\t\\t

  • \\t

    通过识别机房、机架信息来满足容灾的需求;

    \\t\\t

  • \\t

    通过资源乐观锁来实现对相同资源的并发控制;

    \\t\

\\

InfoQ:感谢何小锋老师接受我们的采访,期待您在ArchSummit全球架构师峰会分享的《京东核心中间件是如何支撑业务快速发展》。

\\


感谢冬雨对本文的审校。

\\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们。

如何应对大促?看京东核心中间件团队的高可用实践指南相关推荐

  1. 京东OLAP亿级查询高可用实践

    OLAP(On-Line Analytical Processing)是联机分析处理,它主要用于支持企业决策和经营管理,是许多报表.商业智能和分析系统的底层支撑组件,支持从海量数据中快速获取数据指标. ...

  2. 如何应对大促流量洪峰?揭秘京东技术人的备战手册

    又是一年11.11,大促备战也如期而至,但今年11.11前的大长假给我们备战的准备带来了很大挑战.如何在时间紧.任务重的情况下快速让团队进入状态?如何梳理繁杂的系统风险点.准备资源?作为京东大促的技术 ...

  3. 京东618技术解析之高可用多中心交易平台

    京东618技术解析之高可用多中心交易平台 分流是应对互联网业务流量峰值时保证系统高可用的常规方法,但涉及交易系统的分流是很难的.京东在备战2015年618时就开始了多中心交易的改造,让用户就近访问交易 ...

  4. 618大促:手机品牌“神仙打架”,高端市场“谁主沉浮”?

    持续近一个月的"618",告一段落. 尽管今年的618没有那么火热,但还是有不少用户会选择在这个时间段来消费一波,其中购买电子产品就能感受到实实在在的优惠.一位从事电商运营的朋友表 ...

  5. vba 根据分辨率 调整窗口显示比例_2020 如何选择适合自己的显示器?小白选购电脑显示器必看,附各类型显示器高性价比选购指南分析...

    2020如何选择适合自己的显示器?小白选购电脑显示器必看,可能是全网最完整显示器参数科普与选购分析. 说到显示器的选购,你的反应是什么?价格.尺寸.分辨率,我相信大部分小白最关心的就是这三个问题.这是 ...

  6. 大搜车:云上多地域高可用消息系统的构建

    汽车产业互联网平台大搜车由姚军红创立于2012年12月,先后获得阿里巴巴集团.蚂蚁金服.晨兴资本.华平投资.春华资本等机构超过12亿美元融资.2017年12月,大搜车列入由硅谷全球数据研究机构Pitc ...

  7. 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析

    秒杀购物商城业务服务-分布式架构介绍 基于MySQL数据库集群技术实现服务的高可用 基于Tomcat的集群负载机制实现Tomcat服务器的高可用 基于Nginx负载均衡机制实现负载均衡(介绍和配置) ...

  8. 入门学习Nginx代理服务器?就看这篇Nginx进阶学习最佳配置实践指南

    前置基础知识学习 1.Nginx基础安装与配置详细 https://blog.weiyigeek.top/2019/9-1-121.html 2.Nginx进阶学习之最佳配置实践指南 https:// ...

  9. 从618大促看直播风口,电商玩家如何走得更远

    疫情肆虐,推动众多企业转型云端,也让直播带货蔚然成风.腾讯云云直播是如何助力你的电商生意一飞冲天呢?本周五10:30-12:30,聚焦电商行业最新趋势,全面介绍腾讯云云直播能力. 扫描或长按识别小程序 ...

最新文章

  1. Android MarsDaemon实现进程及Service常驻
  2. LeetCode Linked List Cycle II
  3. numpy.tile 阵列
  4. Linux自定义命令
  5. Linux 操作命令 more
  6. WebSocket In ASP.NET Core(二)
  7. 2018.09.15 vijos1053Easy sssp(最短路)
  8. 批量网站IP地址查询-BlueCatTools 最新版下载地址
  9. 如何快速学从零开始学习3d建模?
  10. SQOOP的安装配置_Linux伊甸园开源社区-24小时滚动更新开源资讯,全年无休!
  11. 不用花钱,免费查看CAD图纸的好用看图软件
  12. FC经典游戏600合集for mac(小霸王游戏) 中文版
  13. 如何安装perl模块
  14. 隋政军---将木屋烧烤打造成中国领先的烧烤品牌
  15. Effective C++中文版
  16. 海外看病大火,盛诺一家获中信里昂千万美金级C轮融资
  17. 全新荣耀手表GS 3正式发布,8通道心率AI引擎精准高效管理健康生活
  18. 单点登录常见解决方式和阿里云短信服务
  19. U转串口时,鼠标乱动,解决办法
  20. android 让手机震动,Android手机震动的设置步骤

热门文章

  1. Xshell7连接VirtualBox虚拟机
  2. 实验一:贝叶斯网络及其应用
  3. 软件工程结对项目- 最长英语单词链
  4. 将罗马数字转换成普通的阿拉伯数字
  5. gogs 服务开机自启动
  6. 集成OpenLDAP与Kerberos实现统一认证(一):整合后台数据库
  7. AE2019安装Optical Flare插件没有显示的问题
  8. 2023 hnust 湖南科技大学 大三下 人工智能导论课程 期中考试复习笔记
  9. http无状态还是web应用无状态
  10. 双11买的开发板,仪器,学电子的男生被优惠哭了。