硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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

  • 2016-11-13
  • 本文字数:3804 字

    阅读完需:约 12 分钟

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

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

受访嘉宾介绍

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

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

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

  1. 从传统的电子政务行业转到互联网行业;
  2. 选择了京东,给自己一个挑战发挥的平台。

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

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

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

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

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

  1. JSF,自主研发高性能分布式的 RPC 微服务框架,是京东服务化、开放化的技术标准;
  2. JIMDB,自主研发高性能分布式的缓存,基于 Docker 架构,具有弹性伸缩、快速故障迁移等能力;
  3. JMQ,自主研发的高性能分布式的消息队列

弹性云落地对中间件研发架构有很大的促进,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. 系统梳理工作:整理现有部署架构,核心客户,每日巡检;
  2. 部署扩容:资源评估、核心客户扩容、容灾部署;
  3. 应急预案:整理和评估应急预案;
  4. 压测演练:模拟故障演练,性能压测;
  5. 对发现的问题就改进优化
  6. 24 小时值班监控

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

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

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

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

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

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

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

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

  • 应用接入的时候要完善信息,能识别是否是核心业务,是否需要隔离,业务的吞吐量需求等等 ;
  • 通过资源标签来匹配满足业务的资源 ;
  • 通过识别机房、机架信息来满足容灾的需求 ;
  • 通过资源乐观锁来实现对相同资源的并发控制 ;

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


感谢冬雨对本文的审校。

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

2016-11-13 18:006124
用户头像

发布了 26 篇内容, 共 10.7 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

openEuler 亮相全球顶级开源盛会 OSSUMMIT 2023,持续推动智能化未来的实现

openEuler

Linux 开源 openEuler 资讯

上升到人生法则的贝叶斯理论

小魏写代码

活动报名 | Modern Data Stack Meetup 北京首站启动!与三大开源社区共同探索现代数据栈的最佳实践

tapdata

数据采集 数据集成 Tapdata 现代数据栈 云数仓

数智赋能,提质增效 | 用友流程制造行业解决方案全新发布!

用友BIP

流程制造

Mobpush上线跨时区推送功能,助力中国开发者应用出海

MobTech袤博科技

智能推送 跨时区 app运营 应用出海

大连英歌石科技公司与华为云签署盘古大模型大连实验室框架合作协议

新消费日报

OpenHarmony创新赛 | 您有一份创新激励奖待领取 请查收!

OpenHarmony开发者

OpenHarmony

HarmonyOS创作激励计划启动:助力技术创作突破边界

HarmonyOS开发者

HarmonyOS

开源框架中的责任链模式实践

vivo互联网技术

dubbo 设计模式 sentinel 责任链

华为云CodeArts Check代码检查服务用户声音反馈集锦(6)

软件开发 华为云 代码检查

亮相华为全联接大会,用友荣获“华为云技术领航最佳实践伙伴”奖项

用友BIP

华为云

喜讯!云起无垠获评软件供应链安全技能竞赛“团队优秀奖”

云起无垠

乙烯裂解工艺可视化2D组态系统

2D3D前端可视化开发

物联网 组态软件 工业组态 乙烯裂解工艺 乙烯裂解组态图

DAPP区块链公链代币智能合约质押挖矿系统开发

l8l259l3365

中移链交易模块介绍

BSN研习社

openEuler与Linaro携手参加OSSUMMIT 2023

openEuler

Linux 开源 openEuler 资讯

文心一言 VS 讯飞星火 VS chatgpt (97)-- 算法导论9.3 3题

福大大架构师每日一题

福大大架构师每日一题

灞桥论“健” 共话康养 灞桥康养论坛取得圆满成功

联营汇聚

三步实现BERT模型迁移部署到昇腾

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号9月PK榜

供应链和物流的跨链代币开发 数字货币开发

区块链软件开发推广运营

数字藏品开发 dapp开发 区块链开发 链游开发 NFT开发

站群服务器提升多网站管理效率的不二之选

一只扑棱蛾子

站群服务器

一文给你讲清楚BeanFactory 和 FactoryBean 的关联与区别

华为云开发者联盟

spring 开发 华为云 华为云开发者联盟 企业号9月PK榜

浅入深出的微前端MicroApp | 京东云技术团队

京东科技开发者

前端 React 微前端 企业号9月PK榜

CocoaPods 在iOS开发中养活了这么多项目,它到底是个啥? | 京东云技术团队

京东科技开发者

ios CocoaPods 移动开发 企业号9月PK榜

企业诊断屋:二手车交易平台APP如何用AB测试赋能业务

字节跳动数据平台

大数据 ab测试 对比实验 数字化增长 企业号9月PK榜

搜索技术领域的“奥林匹克”,飞桨支持“第二届百度搜索创新大赛”正式启动!

飞桨PaddlePaddle

百度 飞桨 AI Studio

小项目想当大Boss? 你该读读《孙子兵法》 | 京东云技术团队

京东科技开发者

项目管理 项目经理 企业号9月PK榜

新生产力范式,重塑工作效率

百度开发者中心

人工智能 ChatGPT 生成式AI

如何应对大促?看京东核心中间件团队的高可用实践指南_架构_李东辉_InfoQ精选文章