写点什么

京东 618:商城交易平台的高可用架构之路

2017 年 6 月 17 日

据腾讯科技报道,6 月 18 日零点,京东全民年中购物节拉开了高潮的序幕。第一个小时的销售额超过去年同期的 250%。从凌晨开始的海量订单让 6 月 1 日就拉开序幕的京东年中购物节奏出最强音,大量用户瞬间涌入,峰值订单被不断刷新。为了应对如此大规模的流量增长,京东研发团队几乎全年都在高筑墙、广积粮,一直着力从技术层面为用户提供流畅的交易体验,以保证在峰值交易时期系统的高可用性。在京东整个电商体系中,交易系统占据着其中的半壁江山,购物车、结算、库存、价格等相关的环节都包含在其中,可以说交易系统的高可用能力基本上决定了整个京东商城的高可用能力。在过去的一年时间里,京东的交易系统做了哪些迭代和优化?今年又有哪些创新?整体的交易系统规划是怎么样的?InfoQ 记者带着这些问题采访了京东商城交易平台高级总监王晓钟。

ArchSummit 全球架构师峰会深圳站将于 2017 年 7 月 7 日~8 日在深圳·华侨城洲际酒店召开,京东商城运营研发部总架构师者文明策划了《低延迟系统架构设计》专题,将会为大家分享目前各大互联网企业在低延迟系统架构设计上都有哪些新思路,欢迎关注。

下面是往年京东 618 以及双 11 交易平台相关的文章:

受访嘉宾介绍

王晓钟,京东商城交易平台高级总监,京东交易黄金流程与智慧营销生态系统的掌舵人,带领的产品与研发团队为京东商城提供了核心交易的系统保证。

InfoQ:能否整体介绍下交易平台目前的架构体系?

王晓钟:交易平台负责商品、价格、用户、库存、订单等电商核心基础信息的中心化管理,以及对购物车、结算页、优惠券 / 礼品卡、订单中心等黄金交易流程的管控和平台化服务。交易平台致力于技术改变生活,打造智慧营销的交易平台。为用户提供黄金交易流程;为客户提供智慧营销解决方案包含促销建议、智能库存定位等智慧营销工具;为研发团队提供稳定、可靠的交易服务。

  1. 渠道是交易的流量入口来源,目前主要包含几大部分,PC、APP、微信、手 Q 等。目前 APP 入口已经占据了整体流量的 70% 以上。
  2. 组件完成对现有基础服务的抽象与整合,将现有服务资源以多元化的方式展示给外界,灵活的组织并支持多种协议的交互,最终实现了系统的模块化、服务平台化、功能配置化。组件最大限度的减少外界对内部逻辑的耦合,从而实现对需求快速响应。
  3. 基础服务位于整个黄金流程的最底层,其扮演者交易平台心脏的角色。其中商品服务、价格服务、库存服务、用户服务、购物车等更是核心中的核心。
  4. 中间件、基础设施是基础服务的基石,对业务系统提供高性能,高可用的技术支撑。

InfoQ:过去一年,交易平台在保证底层的基础平台稳固方面做了哪些事情?有哪些点读者是可以参考学习的?

王晓钟:除了我们一直在做的、已经形成常规的工作,比如线上压测、性能优化、扩容、故障切换、限流、降级之外,过去一年,我们在系统维稳方面做了一些精细化的工作。

  1. 核心调用链监控。在黄金交易流程中的各个服务入口点和服务相关依赖、调用方等进行联合监控。当服务性能下降、可用率下降时,可以快速的定位到故障点。把监控和故障解决方案联动起来,比如一键切换、服务降级、限流等,可以快速的发现和解决问题。
  2. 自动切换。对于成熟的切换流程,比如数据库、缓存、服务等节点的客户端,当检测到故障时,可以根据策略自动切换到健康的节点,同时在故障节点恢复后自动切换回来,减少人工操作的错误和耗时,提高系统的可用率。
  3. 异步化编程模式。部分服务通过彻底的异步化改造来提升吞吐量,还是有一些效果。但是由于纯异步化对于现有系统的改造还是挺大的,所以目前还在尝试前行阶段。
  4. 共享资源池。提前准备一些资源共享池,各服务混用,平时设置较低的权重。当某个服务的常规资源组不足时,则增加其在共享池中的权重,这样可以快速的使用资源,而不用临时扩容。
  5. 全链路压测。从入口开始模拟用户的行为进行压测,流量通过依赖传递,从浏览、搜索,到提交订单以及最后的生产,自动覆盖到链路中的所有环节。配合上面提到的核心调用链监控,解决以往只是单服务的压测,覆盖面不全的问题。

随着业务的发展,功能的复杂度也在不断增加,定位故障原因变的困难了起来,很多时候线上发生故障大部分的时间都在定位问题,故障的解决只要有预案就可以很快处理。调用链监控就很重要,可以站在全局的角度,快速的定位问题,和故障预案处理结合可以解决我们的痛点。

随着服务的不断扩容,机器数量的增加,出现问题时,故障修复的速度变慢,自动化的故障切换可以使人工解放出来,处理更重要的事情,可以让大家不用总是在半夜起来处理故障。

InfoQ:目前交易平台的服务是依据什么维度进行划分的?

王晓钟:目前交易平台主要依据业务能力来划分服务的:购物车、结算页、促销、价格、库存、商品、用户等,为 PC,手机,微信等渠道提供高可靠的大中台服务。

这种划分模式好处在于:

  1. 架构稳定,因为业务能力相对稳定和相互独立。
  2. 开发团队是自主的,围绕着交付业务价值而不是技术特性来组织。
  3. 服务之间共同合作,松耦合。

InfoQ:能否分别从业务、系统、基础设施三个层面谈谈你们的监控体系方案?

王晓钟:在京东这样的大规模分布式系统面前,每时每刻服务器可能都宕机,网络随时可能都在抖动,大量接口调用量日均过亿,同时具有流量聚集效应的促销每天都会有好几波,如果没有一套强大的监控体系,我们就像睁眼瞎一样。经过多年的努力,京东目前已经形成多套监控系统,建立了比较完善的监控体系,时刻监视着系统的健康状态,并在发现问题时第一时间进行预警:

1)业务层面的监控,主要是核心业务指标,比如实时订单量,并按渠道、省份、运营商、机房、品类、活动等各个维度进行细分,从而在及时发现核心业务指标变化的同时,能够快速定位、排查问题,并做出应急响应。

2)系统层面的监控,主要是方法或代码块的调用量、成功率以及响应时间。同时,不同语言平台有特定的监控指标,例如 Java 应用,我们也非常关心 JVM GC 情况。这些指标我们会按实例、集群、机房等进行逐级汇总计算。对于响应时间,我们更关心的是 TP99 甚至 TP999 任何一指标低于预设阈值都会触发报警。在采集单一接口性能数据的基础上,我们将请求访问链经过的一系列子调用串起来,包括 RPC 服务之间、访问缓存、访问数据库等等,实现调用链条薄弱环节的快速发现,快速解决。

3)基础设施的监控,主要是网络质量和机器健康度的监控,像常规的带宽、丢包率、重传、连通性,CPU、内存、磁盘等等。在网络方面,除了内网,我们也非常关心公网网络质量,一旦发现运营商或者区域故障,就会做立即出预案响应,7*24 小时确保用户购物体验。

在监控指标完善的同时,我们更多在解决监控自身的延时性。京东自身访问量大,所以在提高监控的延时性同时又不能影响业务自身性能,本身就是就一个挑战。目前我们在业务层面、系统层面都做到了秒级粒度,基础设施方面的重要指标也有了秒级数据。在预警方面,除了传统的邮件、短信,我们集成了京东内部 IM 工具,同时还有手机语音呼叫。

在这么多指标,这么精细的数据面前,传统的监控仪表盘也会让我们再度迷失,因此我们开发了天眼系统进一步将各个监控子系统进行集成,结合前述的调用链,在一个大屏上多个核心主流程的各环节、各调用层次的当前健康状况一览无遗,一旦有故障我们可以在短时间内快速响应并恢复。

InfoQ:对于恶意的流量攻击,京东做了哪些准备工作?准备如何预防?

王晓钟:恶意流量攻击,是每个互联网企业都必须面对的难题。目前我们把流量攻击分为两大类:网络协议层和应用逻辑层。

网络协议层的,主要是 SYNFlood、UDPFlood、DNSFlood、HTTPFlood 这些 4 层或 7 层协议的各种流量攻击,主要以带宽或服务资源消耗为主。目前我们通过京东云平台自研的流量分析和清洗系统能够防御主流的恶意流量攻击。除此之外,信息安全部门也会联合外部力量进行上百 G 的流量攻防演练,确保合作和联动等实战能力。

应用逻辑层的恶意流量的范围和影响则比较广泛。狭义上,恶意流量利用应用系统的软件漏洞,做拒绝服务攻击;广义上,能够利用应用的实现逻辑或规则漏洞,非法实现各种商业利益的,无论流量大小,都属于恶意流量攻击。这一大类型攻击由京东的多个部门配合进行整体防御。

1)信息安全部门会通过开展安全自查和外部合作报告漏洞的方式,由各业务研发部门实施安全漏洞消除,比如 SQL 注入、代码执行、水平越权、信息泄露等。
2)风控部门会通过数据分析,建立各种等级的风险控制模型,形成动态的不同风险等级的账户池,供业务系统使用。
3)业务研发部门则根据业务特性、用户风险等级、系统压力等因素,提供不同策略的限流实现。

InfoQ:以商品的实时价格为例,聊聊你们的读逻辑和写逻辑流程?

王晓钟:京东实时价格面临几大挑战:一是数据量大,几十亿的商品;二是调用量大,日峰值上百亿;三是实时性要求高;最后是业务复杂度高,并不是单一的京东价,不仅要综合计算各类促销规则,还要对 PC、手机、第三方合作渠道以及区域进行差异化运营。这里,我们运用读写分离、异步化策略,选择支撑大并发、高性能的开源组件进行设计,确保可水平扩展、高稳定性。

1)写逻辑流程:当采销在后端调整价格或建立促销时,同步写入 MySQL 数据库,然后通过异步任务更新促销主 Redis 数据,并同时更新价格主 Redis 的过期时间戳,通过 Redis 自身复制机制,将数据传播到从节点。
2)读逻辑流程:当用户在前端浏览商品列表、详情等页面时,异步访问价格实时服务,此时内嵌 Nginx 的 Lua 程序直接读取本地 Redis(从)中的价格数据,无过期则直接返回用户;若过期或不存在,则回源访问价格实时计算服务,即刻返回最新价格给用户。
3)回源写逻辑:价格实时计算服务读取促销主 Redis,在返回最新价格给用户的同时,异步写价格主 Redis 集群,价格主 Redis 同步数据至前置 Nginx 节点的从 Redis 节点。

InfoQ:今年 618 京东的交易平台都做了哪些技术上的改进或者创新,以及未来将会考虑哪些优化和升级方向?

王晓钟:除了上面提到的主要用来维护系统稳定的技术改造之外,今年交易平台也投入了更多的精力在做提升用户体验、提升 GMV 的改进和创新工作。比如利用大数据技术和机器学习模型,来提供千人千价、千人千促的体验。

我们也在尝试利用大数据和机器学习等在系统维稳上做一些工作,比如:

1)SQL 注入和恶意代码执行方面引入了机器学习模型,通过对已有的攻击行为进行学习,训练特征。引入半监督学习,让模型可以通过学习,自动发现新型的攻击。大大提高了攻击的发现效率和新攻击的识别能力。各项指标已经完全超越传统的规则识别。

2)使用有向图模型对恶意攻击进行溯源检测,更加准确快速的进行溯源分析,并且得到了非常好的效果。

下一步,我们会继续尝试在这个方向上做一些创新,比如:

1)在人机行为检测方面进行优化。使用聚类和 nlp 模型对恶意刷单行为进行识别,提高恶意刷单行为的验证级别,从而极大地降低后台接口压力。

2)评论价值评定模型,识别真实评论和刷出来的评论。让评论产生更大的价值。

3)我们将在故障智能预测上进行探索。目前很多监控和预警都是事后的,我们希望能做到事前。通过分析历史性、周期性故障数据,结合当前实时健康度,快速识别出“濒死”的机器、实例,真正做到监控预警智慧化。

2017 年 6 月 17 日 20:307079
用户头像
郭蕾 做有意思的事情!

发布了 210 篇内容, 共 108.7 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
  • 蘑菇街 11.11:流量超过预期,系统曾被冲垮

    据官方数据显示,蘑菇街双十一交易额已突破一亿元,并提前完成了此前的预定目标。蘑菇街今年第一次自己做交易,虽说总的交易量只有天猫几分钟的量,但峰值时期系统的压力同样不小,并且他们也才刚刚开始。那蘑菇街是怎么准备这场战争的?相应做了哪些预案?带着这些问题,InfoQ专门采访了蘑菇街的CTO岳旭强。

  • 京东大促的另一个战场——揭秘亿级流量背后的技术基石

    本期内容推荐:互联网时代大型线上活动的实现早已经离不开云与 AI,京东智联云联合 InfoQ 发布迷你书《京东大促的另一个战场——揭秘亿级流量背后的技术基石》正是面向开发者的一份学习指南,通过京东智联云大促备战攻略、技术实践与技术赋能,带你了解在大型线上活动中如何利用 DevOps 快速定位和解决问题、安全防御体系建设、数据存储与分析的选择、AI 赋能等层面的技术实践能力。

  • 携程在线风控系统架构

    本文转载自技术琐话公众号

  • 京东 618:从演习、监控到预案,京东无线全面备战

    在京东上季度的财报中,无线端(包括移动端和微信等其他无线平台)占比已经超过72%,这也给京东无线业务部带来了巨大的压力。今年,京东618主会场首次全面采用个性化策略,同时,618期间的一系列促销活动,预计将为后端带来超出日常20倍左右的流量洪峰,这都给无线业务部带来了更大的挑战。为了迎接挑战,防止突发情况的发生,无线技术团队从演习、监控到预案,制定了全方位的备战计划。

  • 如何设计一个小而美的秒杀系统?

    优化方案中最重要的目标是保障关键流程在应对大量请求时稳定运行,这需要很高的系统可用性。所以,业务流程和数据流程要尽量精简,减少容易出错的环节。此外,缓存、DB、网络、容器环境,任何一个部分都要假设可能会短时出现故障,要有处理预案。

  • 电商大促特辑: 揭秘京东历经多年的"618"架构核心

    "618"作为京东一年最重要的大促之一,每年6月18日京东将遭遇记录历史级别的流量挑战。如何成功保障交易平台高并发高性能已经成为包括京东在内的众多电商念念不忘的念想,而京东作为国内电商领军企业之一,在架构积累上成就了如何领先的技术底蕴?

  • 应用性能管理:用户的使用体验应该如何监控?

    如果说搭建的系统是骨架,那么具体监控的数据就是灵魂,因为数据是监控的主题内容,系统只是呈现数据的载体。

    2019 年 12 月 4 日

  • 专访阿里云高级专家赵林:从 0 到 1,中间件的研发运维之路

    互联网时代,大多数企业都面临着IT构架转型的阵痛。电商老大阿里曾更早地面临这样的问题,2008年为了改变现状,阿里逐渐开始研发中间件产品,中间件产品不仅为当初的阿里分布式系统奠定了重要基础,并且从未曾停止过优化升级;如今,中间件已经成为阿里云进入企业级市场的重要武器。中间件对阿里云起着什么样的作用又为什么如此重要?InfoQ就中间件的技术实现对阿里中间件高级产品专家赵林进行了采访。

  • 第 27 讲 | 弄懂数字货币交易平台(一)

    如果没有数字货币交易所,就没有今天繁荣的数字货币市场,区块链技术也不会这样被广为人知。

    2018 年 5 月 25 日

  • 京东电商云三步走战略:开发者是当前重点

    8月22日,京东在其云计算研发基地召开了沟通会,京东集团技术副总裁兼首席科学家何刚详细介绍了京东云战略的具体内容,京东目标是以“京东宙斯”、“京东云鼎”、“京东云擎”、“京东云汇”四大解决方案为核心的技术体系构建完整的电商云服务链条,而开发者以及服务提供商将会是京东下一步的主推方向。

  • 支付宝 CTO 李静明:双 11 是对我们的一次大考

    双11是一个疯狂的日子,不仅仅是消费者和电商行业的盛宴,也是技术领域的一次挑战。第一分钟13.6万笔交易,单日交易额达到191亿,为了支撑如此庞大的交易,支付宝背后的团队功不可没,在11月11号下午双11还未完全落幕之前,InfoQ就来到在支付宝大楼采访了支付宝的CTO李静明,听他谈支付宝为这次双11所做的准备以及现场指挥等情况。

  • 从建设到治理,从系统到团队,谈高可用架构之道

    何为高可用架构,如何高可用架构,一百家互联网企业可能摸索出数千种探索道路并给出数万种答案,但符合自身企业技术环境发展的答案可能有且只有一种,如何从海量实践中提炼出值得借鉴学习的高可用架构之道,相信是不少一线技术管理者需要深思熟虑的问题。

  • 独家揭秘“生鲜独角兽”——美菜的技术体系

    5年时间,从一家小创业公司发展成“独角兽”,美菜的技术体系是如何搭建的?

  • 数据服务难道就是对外提供个 API 吗?

    数据服务到底长什么样子呢? 是不是只对外提供一个API? 真的有这么简单吗?

    2020 年 4 月 24 日

  • 架构师特刊:进击的 618

    每一次的电商大促,都是外行看热闹(剁手),内行看门道(技术)。在这国人购买力飞速升级的时代,每一轮爆棚流量背后,都有着那改变世界的技术作支撑。今年的 618,京东是怎么玩的?InfoQ 为你揭秘!

  • 如何监控微服务调用?

    在讲述如何监控微服务调用前,首先你要搞清楚三个问题:监控的对象是什么?具体监控哪些指标?从哪些维度进行监控?

    2018 年 9 月 6 日

  • 京东 618:六年历程步步为营,京东商城的安全保卫战

    电商网站在为广大用户提供网购便利的同时,在安全方面也不可以掉以轻心。那么作为一家高流量的电商,京东是怎样做安全防护的?在618备战期间又需要特别注意哪些事项?京东安全的现状和未来是怎样的?

  • 服务高可用:保证核心链路稳定性的流控和熔断机制

    今天我们来聊一聊流控的算法、全局流控及自动熔断机制。

    2019 年 9 月 23 日

  • 京东物流仓储数据分发平台架构实践及挑战

    演讲嘉宾十年以上互联网、金融、军工行业的研发、架构经验,丰富的分布式高并发系统架构设计经验,擅长系统架构设计、技术组件研发、数据库优化、UI组件封装、idea插件开发等。在代码生成、高效编码方面有很多实战经验。拥有多篇技术类国家发明专利。目前负责基础技术组件的研发和架构设计工作。内容介绍京东物流网络在全球拥有 550+ 个仓储中心,这些仓储中心的高效生产背后是仓储系统和仓储数据分发平台。数据分发平台是仓储系统之上的一个“数据网关”,是连接仓储系统和京东商城、物流开放平台的纽带,主要负责商品、商家、订单等数据的下发和仓储各生产环节的状态回传,是整个仓储系统中最为关键的一环。随着业务规模的快速增长,数据分发平台在并发性能、可用性、低延时等方面面临着更高的要求和技术挑战。本议题主要介绍数据分发平台近几年来所经历的架构演进过程、挑战及踩过的坑。在整个数据分发过程中,如何做到精确路由?如何实现分发管道的快速切换?如何监控业务异常数据?在仓储中心和 IDC 之间网络延时和闪断的条件下,如何设计出对网络有较高容忍度的架构?这些都会在议题中逐一介绍。

    2019 年 7 月 25 日

发现更多内容

第七周总结

_

极客大学架构师训练营 第七周总结

寻找性能更优秀的动态 Getter 和 Setter 方案

newbe36524

C# dotnet

AI会取代人类劳动吗?

脑极体

Netty源码解析 -- PoolSubpage实现原理

binecy

Netty 内存管理 源码阅读

Newbe.ObjectVisitor 样例 1

newbe36524

C# dotnet

寻找性能更优秀的不可变小字典

newbe36524

C# dotnet

Fedora32安装MySQL8

ilovealt

MySQL Linux

性能压测

橘子皮嚼着不脆

简单工厂模式

猴子胖胖

golang 设计模式

第三周作业

晴空万里

架构师训练营第七周作业

月殇

极客大学架构师训练营

架构师训练营 2 期 - 第三周总结

Geek_no_one

极客大学架构师训练营

架构师训练营第二期 Week 3 作业

bigxiang

极客大学架构师训练营

架构师训练营第七周总结

月殇

极客大学架构师训练营

架构师训练营 第三周作业

文江

极客时间架构 1 期:第 7 周 性能优化(一) - 命题作业

Null

Newbe.ObjectVisitor 0.2.10 发布,更花里胡哨

newbe36524

C# dotnet

架构师训练营 1 期第 7 周:性能优化(一)- 作业

灵霄

极客大学架构师训练营

架构师训练营第 1 期 week7

张建亮

极客大学架构师训练营

第三周学习总结

晴空万里

架构2期 - 第三周作业(2)

浮生一梦

极客大学架构师训练营 第三周总结 2组

你不好奇 CPU 是如何执行任务的吗?

小林coding

Linux cpu 操作系统 计算机基础

极客时间架构 1 期:第7周 性能优化(一) - 学习总结

Null

第3周作业-设计模式

Rocky·Chen

架构师训练营 2 期 - 第 3 周命题作业

Geek_no_one

极客大学架构师训练营

架构师训练营第 7 周课后练习

叶纪想

极客大学架构师训练营

第三周设计模式总结

leo

极客大学架构师训练营

异步并发分布式编程框架Akka

天天向上

极客大学架构师训练营

Architecture Phase1 Week7:Summarize

phylony-lu

极客大学架构师训练营

week07学习总结

追风

架构师一期

架构师训练营week07作业

FG佳

极客大学架构师训练营 week07

京东618:商城交易平台的高可用架构之路-InfoQ