1. 首页 > 公司新闻

京东会员系统架构深度解析(2025版)

作者:队长 日期:2024-12-15 14:28:11 点击数:

京东活动系统是一个可在线编辑、实时编辑更新和发布新活动,并对外提供页面访问服务的系统。其高时效性、灵活性等特征,极受青睐,已发展成京东几个重要流量入口之一。近几次大促,系统所承载的pv已经达到数亿级。随着京东业务的高速发展,京东活动系统的压力会越来越大。急需要一个更高效,稳定的系统架构,来支持业务的高速发展。本文主要对活动页面浏览方面的性能,进行探讨。

活动页面浏览性能提升的难点:

1. 活动与活动之间差异很大,不像商品页有固定的模式。每个页面能抽取的公共部分有限,可复用性差。

2. 活动页面内容多样,业务繁多。依赖大量外部业务接口,数据很难做到闭环。外部接口的性能,以及稳定性,严重制约了活动页的渲染速度、稳定性。

经过多年在该系统下的开发实践,提出“页面渲染、浏览异步化”的思想,并以此为指导,对该系统进行架构升级改造。通过近几个月的运行,各方面性能都有显著提升。在分享"新架构"之前,先看看我们现有web系统的架构现状。

以京东活动系统架构的演变为例,这里没有画出具体的业务逻辑,只是简单的描述下架构:

第二步,一般是在消耗性能的地方加缓存,这里对部分查库操作加redis缓存

对页面进行整页redis缓存:由于活动页面内容繁多,渲染一次页面的成本是很高。这里可以考虑把渲染好的活动内容整页缓存起来,下次请求到来时,如果缓存中有值,直接获取缓存返回。

以上是系统应用服务层面架构演进的,简单示意。为了减少应用服务器的压力,可以在应用服务器前面,加cdn和nginx的proxy_caxhe,降低回源率。

整体架构(老)

除了前3步讲的“浏览服务”,老架构还做了其他两个大的优化:“接口服务”、静态服务

访问请求,首先到达浏览服务,把整个页面框架返回给浏览器(有cdn、nginx、redis等各级缓存)。

对于实时数据(如秒杀)、个性化数据(如登陆、个人坐标),采用前端实时接口调用,前端接口服务。

静态服务:静态资源分离,所有静态js、css访问静态服务。

要点:浏览服务、接口服务分离。页面固定不变部分走浏览服务,实时变化、个性化采用前端接口服务实现。

接口服务:分两类,直接读redis缓存、调用外部接口。这里可以对直接读redis的接口采用nginx+lua进行优化( openresty),不做详细讲解。本次分享主要对“浏览服务”架构

在讲新架构之前先看看新老架构下的新能对比

击穿cdn缓存、nginx缓存,回源到应用服务器的流量大约为20%-40%之间,这里的性能对比,只针对回源到应用服务器的部分。

2015双十一,浏览方法tp99如下:(物理机)

Tp99 1000ms左右,且抖动幅度很大,内存使用近70%,cpu 45%左右。

1000ms内没有缓存,有阻塞甚至挂掉的风险。

新架构浏览服务新能

本次2016 618采用新架构支持,浏览tp99如下(分app端活动和pc端活动):

移动活动浏览tp99稳定在8ms, pc活动浏览tp99稳定在15ms左右。全天几乎一条直线,没有性能抖动。

新架构支持,服务器(docker)cpu性能如下

cpu消耗一直平稳在1%,几乎没有抖动。

对比结果:新架构tp99从1000ms降低到 15ms,cpu消耗从45%降低到1%,新架构性能得到质的提升。

why!!!

下面我们就来揭开新架构的面纱。

页面浏览,与页面渲染异步。

再来看之前的浏览服务架构,20%-40%的页面请求会重新渲染页面,渲染需要重新计算、查询、创建对象等导致 cpu、内存消耗增加,tp99性能下降。

如果能保证每次请求都能获取到redis整页缓存,这些性能问题就都不存在了。

即:页面浏览,与页面渲染异步。

理想情况下,如果页面数据变动可以通过手动触发渲染(页面发布新内容)、外部数据变化通过监听mq自动触发渲染。

但是有些外部接口不支持mq、或者无法使用mq,比如活动页面置入的某个商品,这个商品名称变化。

为了解决这个问题,view工程每隔指定时间,向engine发起重新渲染请求-内容放入redis。下一次请求到来时即可获取到新内容。由于活动很多,也不能确定哪些活动在被访问,所以不建议使用timer。通过加一个缓存key来实现,处理逻辑如下:

好处就是,只对有访问的活动定时重新发起渲染。整理架构(不包含业务):

view工程职责:

a.直接从缓存或者硬盘中获取静态html返回,如果没有返回错误页面。(文件系统的存取性能比较低,超过100ms级别,这里没有使用)

b.根据缓存key2是否过期,判断是否向engine重新发起渲染。(如果,你的项目外面接口都支持mq,这个功能就不需要了)

engine工程职责:渲染活动页面,把结果放到硬盘、redis。

publish工程、mq职责:页面发生变化,向engine重新发起渲染。具体的页面逻辑,这里不做讲解。

Engine工程的工作就是当页面内容发生变化时,重新渲染页面,并将整页内容放到redis,或者推送到硬盘。

View工程的工作,就是根据链接从redis中获取页面内容返回。

3.view工程架构(硬盘版)

两个版本对比:

a.Redis版:优点:接入简单、性能好,尤其是在大量页面情况下,没有性能抖动。单个docker tps达到700。缺点:严重依赖京东redis服务,如果redis服务出现问题,所有页面都无法访问。

b.硬盘版:优点:不依赖任何其他外部服务,只要应用服务不挂、网络正常就可以对外稳定服务。在页面数量不大的情况下,性能优越。单个docker tps达到2000。缺点:在页面数据量大的情况下(系统的所有活动页有xx个G左右),磁盘io消耗增加(这里采用的java io,如果采用nginx+lua,io消耗应该会控制在10%以内)。

解决方案:a.对所有页面访问和存储采用url hash方式,所有页面均匀分配到各个应用服务器上。b.采用nginx+lua利用nginx的异步io,代替java io。

现在通过nginx+lua做应用服务,所具有的高并发处理能力、高性能、高稳定性已经越来越受青睐。通过上述讲解,view工程没有任何业务逻辑。可以很轻易的就可以用lua实现,从redis或者硬盘获取页面,实现更高效的web服务。如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java进阶qun:694549689,里面有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的可以加。

通过测试对比,view工程读本地硬盘的速度,比读redis还要快(同一个页面,读redis是15ms,硬盘是8ms)。所以终极版架构我选择用硬盘,redis做备份,硬盘读不到时在读redis。这里前置机的url hash是自己实现的逻辑,engine工程采用同样的规则推送到view服务器硬盘即可,具体逻辑这里不细讲。后面有时间再单独做一次分享。

优点:具备硬盘版的全部优点,同时去掉tomcat,直接利用nginx高并发能力,以及io处理能力。各项性能、以及稳定性达到最优。缺点:1、硬盘坏掉,影响访问。2.方法监控,以及日志打印,需使用lua脚本重写。

从事开发工作近十年,一直在网络上吸取着各种资源,像海绵一样不断充实自我。不久前,受张开涛大神之托,我对活动系统的新架构进行了梳理并分享给大家,希望能为大家带来一些启示和帮助。作为一个初涉分享的萌新,或许还有诸多未周全之处,但我将不断努力,分享更多的心得与大家一起成长。在这里,也为大家奉上一碗心灵鸡汤。

说到京东架构,它指的是京东平台的整体架构体系,由众多相互关联的系统和子系统构成。这些组成部分共同构建了一个稳定、可靠、高效的架构体系,为京东的飞速发展提供了强有力的支撑。京东架构采用的是分布式系统架构,具备了出色的可伸缩性、可扩展性、高并发性和高可用性。

京东架构的特点主要体现在以下几个方面:采用分布式系统架构,具备优良的可伸缩性、可扩展性、高并发性和高可用性;遵循高度模块化、松耦合、服务化的设计理念;深入应用云计算、大数据等前沿技术,不断提高架构的优化程度及系统效率;重视安全性和可靠性,采用多层次的安全防护机制,确保用户数据的安全,相较于传统架构更具优势。

京东架构是如何推动电商行业发展的呢?京东架构的高效稳定直接推动了京东电商的迅猛发展,同时也为整个电商行业带来了深刻的变革。凭借优秀的技术架构,京东得以迅速应对业务发展、节点上线、新技术方向等方面的挑战。京东架构的不断创新和优化,推动了电商行业的技术进步,为用户带来更优质的购物体验,让购物变得更加便捷快速。

关于京东的组织架构,具体分为几大板块:

1. 京东商城:作为京东的核心板块,下设四个事业部,包括3C事业部、家电事业部、消费品事业部以及家居事业部。

2. 京东金融:成立于2013年,经过A轮融资后,总估值超过460亿人民币。预计在3年内实现独立上市。

3. 海外事业部:成立于2014年4月,2015年6月海外平台上线,开始大规模全球出口业务——全球售。京东还在印度设立了分公司。

4. 京东到家:成立于2015年4月,原名拍到家,主要负责圈占生活服务O2O市场,目前主打生鲜及超市产品的配送服务。

5. 京东智能:原NSNG子公司于2015年01月19日改名为“京东智能”,主要业务包括“智能云平台”以及著名的JD+京东智能产品,例如JD+奶茶馆等。


随便看看