BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 李东辉 关注 0 他的粉丝 发布于 2016年11月14日. 估计阅读时间: 11 分钟 | 都知道硅谷人工智能做的好,你知道 硅谷的运维技术 也值得参考吗?QCon上海带你探索其中的奥义

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

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)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT