一、背景京东活动系统是一个可在线编辑、实时编辑更新和发布新活动,并对外提供页面访问服务的系统,地址如http://sale.jd.com/***.html。其高时效性、灵活性等特征,极受青睐,已发展成京东几个重要流量入口之一。 近几次大促,系统所承载的 PV 均为数亿以上。随着京东业务的高速发展,京东活动系统的压力会越来越大。急需要一个更高效,稳定的系统架构,来支持业务的高速发展。本文主要对活动页面浏览方面的性能,进行探讨。 活动页面浏览性能提升的难点:
经过多年在该系统下的开发实践,提出“页面渲染与页面浏览异步化”的思想,页面渲染是把渲染好的整页数据放到redis或者硬盘里了,页面浏览是从redis或者硬盘里取静态的页面,并以此为指导,对该系统进行架构升级改造。 通过近几个月的运行,各方面性能都有显著提升。在分享"新架构"之前,先看看我们现有web系统的架构现状。 二、web架构发展与现状* 浏览服务 以京东活动系统架构的演变为例,这里没有画出具体的业务逻辑,只是简单的描述下架构。 我们会在消耗性能的地方加缓存,这里对部分查库操作加redis缓存。 并且对页面进行整页redis缓存:由于活动页面内容繁多,渲染一次页面的成本是很高。这里可以考虑把渲染好的活动内容整页缓存起来,下次请求到来时,如果缓存中有值,直接获取缓存返回。
整体架构(老) 除了“浏览服务”外,老架构还做了其他两个大的优化:“接口服务”、“静态服务”
接口服务分两类,直接读redis缓存和调用外部接口。这里可以对直接读 redis 的接口采用 nginx lua(openresty)进行优化,不做详细讲解。 本次分享主要对“浏览服务”架构。 三、新老架构性能对比在讲新架构之前先看看新老架构下的新能对比。 * 老架构浏览服务性能 击穿cdn缓存、nginx缓存,回源到应用服务器的流量大约为20%-40%之间,这里的性能对比,只针对回源到应用服务器的部分。 浏览方法TP99如下(物理机)
* 新架构浏览服务性能 本次2016 618采用新架构支持,浏览TP99如下(分app端活动和pc端活动) 移动活动浏览TP99稳定在8ms, PC活动浏览TP99 稳定在15ms左右。全天几乎一条直线,没有性能抖动。 新架构支持,服务器(docker)cpu性能如下 cpu消耗一直平稳在1%,几乎没有抖动。 对比结果:新架构TP99从1000ms降低到15ms,cpu消耗从45%降低到1%,新架构性能得到质的提升。 why!!! 下面我们就来揭开新架构的面纱。 四、新架构探索* 页面渲染与页面浏览异步化
如果能保证每次请求都能获取到redis整页缓存,这些性能问题就都不存在了。即:页面渲染与页面浏览异步。 * 直接改造后的问题以及解决方案 理想情况下,如果页面数据变动可以通过 手动触发渲染(页面发布新内容)、外部数据变化通过监听mq 自动触发渲染。 但是有些外部接口不支持mq、或者无法使用mq,比如活动页面置入的某个商品,这个商品名称变化。 为了解决这个问题,view工程每隔指定时间,向engine发起重新渲染请求-最新内容放入redis。下一次请求到来时即可获取到新内容。由于活动很多,也不能确定哪些活动在被访问,所以不建议使用timer。通过加一个缓存key来实现,处理逻辑如下。 好处就是,只对有访问的活动定时重新发起渲染。 五、新架构讲解* 整理架构(不包含业务)
Engine工程的工作就是当页面内容发生变化时,重新渲染页面,并将整页内容放到redis,或者推送到硬盘。 * view工程架构(redis版) View工程的工作,就是根据链接从redis中获取页面内容返回。 * view工程架构 (硬盘版) 两个版本对比 Redis版
硬盘版
解决方案
* Openresty 硬盘版 现在通过nginx lua(OpenResty)做应用服务,所具有的高并发处理能力、高性能、高稳定性已经越来越受青睐。通过上述讲解,view工程没有任何业务逻辑。可以很轻易的就可以用lua实现,从redis或者硬盘获取页面,实现更高效的web服务。 通过测试对比,view工程读本地硬盘的速度,比读redis还要快(同一个页面,读redis是15ms,硬盘是8ms)。所以终极版架构我选择用硬盘,redis做备份,硬盘读不到时在读redis。
优点:
缺点:
六、总结无论是redis版、硬盘版、openresty 硬盘版,基础都是页面渲染与页面浏览异步化。 优势:
结束语从事开发已有近10载,一直就像寄生虫一样吸取着网络上的资源。前段时间受“张开涛”大神所托,对活动系统新架构做了一次简单整理分享给大家,希望能给大家带来一丝帮助。第一次在网上做分享,难免有些没有考虑周全的地方,以后会慢慢的多分享一些自己的心得,大家一起成长。最后再来点心灵鸡汤。。。 GOPS 一直伴你左右
GOPS2017深圳站 GOPS在2016年从深圳出发,当时门票提前几周收盘,一年之后承载着运维人的期望,GOPS再次来到了深圳。
点击“阅读原文”抢早鸟价哦~ 本文转载于微信公众号: 高效运维(greatops),更多微信文章请扫描关注公众号: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|