【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

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

  • 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:005481
用户头像

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

关注

评论

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

软件测试学习笔记丨Pytest结合数据驱动读取json文件

测试人

软件测试 测试开发

Ableton Live 12 Suite for mac(音乐制作工具) v12.0.1中文激活版

iMac小白

LED芯片寿命试验过程解析

Dylan

屏幕亮度 光热发电 电子 LED display LED显示屏

2024政府工作报告聚焦数字经济,“双象限”评选凸显数字化先锋

信通院IOMM数字化转型团队

数字化转型 数字经济 IOMM 企业数字化转型发展双象限

Java 中 HashMap 详解

小白牙

Java Map集合

OgGame——游戏全球发行的全套解决方案

Ogcloud

云游戏 游戏发行 云游戏发行 游戏云化 游戏发行公司

软件测试学习笔记丨Pytest结合数据驱动读取csv文件

测试人

软件测试

轻播zFuse Pro for Mac(简单小巧的视频播放器) v1.7.38直装版

iMac小白

System Dashboard Pro for Mac(专业系统监视器) v1.10.6激活版

iMac小白

Caffeinated for Mac(系统防睡眠工具) v2.0.5激活版

iMac小白

【AAAI 2024】MuLTI:高效视频与语言理解

阿里云大数据AI技术

人工智能 机器学习 模型训练 大模型

如何通过ETL做数据转换

RestCloud

ETL 数据集成 数据转换

一键制作iOS上架App Store描述文件教程

雪奈椰子

架构实战营 - 模块二作业

满心

架构实战营

兼顾稳定和性价比的跨国企业SD-WAN组网

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

Vue.js 应用实现监控可观测性最佳实践

OpenTiny社区

开源 Vue 前端

云手机为电商提供五大出海优势

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机 跨境云手机

聚道云如何实现薪人薪事与金蝶云无缝对接,破解财务难题?

聚道云软件连接器

案例分享

程序员排查BUG指南

宇文辰皓

bug定位

新一代AI模型Claude 3:有大学生智商,全面超越GPT-4,现已正式登陆 Amazon Bedrock!

伊克罗德信息科技

你在测试金字塔的哪一层(上)

禅道项目管理

软件开发 自动化测试 测试工程师 测试金字塔

iNet Network Scanner for Mac(mac网络扫描工具) v3.1.0永久激活版

iMac小白

Java社招面经分享,别人都是怎么面试蚂蚁的?

阿里、莫言

Java Java面经 Java面试题

全新架构!日志服务 SLS 自研免登录方案发布

阿里巴巴云原生

阿里云 云原生 日志服务 sls

分享一个国内可用的AIGC生成平台|免费创作

京东科技开发者

讲讲鸿蒙开源与技术细节

Geek_2305a8

被快手面试官追着问的真正线上索引失效的问题是如何排查的

派大星

:MySQL 数据库 Java 面试题 互联网大厂面试

Perfectly Clear Workbench for Mac(智能图像清晰修复软件) v4.6.0.2644永久激活版

iMac小白

API接口知识小结

Noah

20年编程,AI编程6个月,关于Copliot辅助编码工具,你想知道的都在这里

京东科技开发者

Room Arranger for Mac(简单易用的室内设计软件) v9.8.3.645中文激活版

iMac小白

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