`
jinnianshilongnian
  • 浏览: 21502995 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2418423
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3008653
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5639341
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:259897
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1597266
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250209
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5858809
Group-logo
跟我学Nginx+Lua开...
浏览量:701941
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:785137
社区版块
存档分类
最新评论

京东商品详情页碎碎念

 
阅读更多

在之前的两篇文章《构建需求响应式亿级商品详情页》和《京东商品详情页服务闭环实践》已经详细介绍了整个系统的架构设计和实现思路。本篇将介绍下杂七杂八的一些实践:

  • 静态化
  • 突发流量
  • 恶意访问
  • 托底数据
  • 超时时间/重试
  • CDN回源
  • 监控和报警
  • 日志

 

静态化

我个人总结为:数据静态化、页面片段静态化、页面静态化;数据静态化即把相关数据聚合为一个大数据,这样比如获取数据时只需要一次获取即可,好处是减少多次获取带来的性能开销;页面片段静态化即整个大页面按照不同的维度进行分拆,生成一些页面片段,然后通过SSI(服务端包含技术)将多个页面片段合并输出,比如商品详情页可以分为主框架、面包屑、商家信息、商品介绍、规格参数等页面片段,可以存储到磁盘或者分布式文件系统,存储到磁盘需要注意小文件造成的随机读写变多了和一些文件系统对inode数的限制;而页面静态化是把整个大页面生成静态页,缺点是页面一部分变更需要更新整个页面;其中数据静态化最灵活,可以实现数据和模板的分离,模板可以随意变化,适合经常变更的业务。

 

突发流量

对于突发流量,我这边系统的一般解决方案:高效缓存、自动降级、减少回源量;高效缓存可以参考《构建需求响应式亿级商品详情页》和《京东商品详情页服务闭环实践》中的缓存实践;而自动降级也在这两篇文章中讲到了,不再重复。

 

减少回源量可以通过一致性哈希、非阻塞锁、304响应来实现;通过一致性哈希可以将相同的请求打到相同的服务器,提升缓存命中率,而轮训会造成缓存命中率低;非阻塞锁即比如100个人同时请求一个页面时,首先让一个回源到后端系统进行处理,假设超时时间是100ms,如果100ms内返回了内容,则这100个人直接返回这一份内容即可,如果100ms后端系统没能返回,这100个请求会全部打到后端系统,也就是说如果后端系统响应快则回源量减少,否则回源量不会变少。

 

对于304可以通过两种机制实现,一种是业务系统提供变更时间,然后去比对是否变更,如果没有变更则直接返回304,这样只需要对比变更时间即可;另一个是设置一个容忍时间,比如10s,那么10s内的请求都返回304,不调用业务系统。对于秒杀业务设置10s的容忍时间会减少很多回源量,减少突发流量打挂后端业务系统。

 

恶意访问

对于恶意方案可以通过:提升缓存命中率,减少回源量、限流、导流到隔离的分组、N页以后的请求做特殊处理,如降低请求速度。提升缓存命中率或者所有数据都缓存/SSD,这样只要预估好流量,一般就不怕刷;另外可以减少回源量,比如使用多级缓存、爬虫做特殊处理等;对于一些请求还是需要做限流,限流可以按照连接数、请求数、流量、用户进行限流,对于缓存未命中的需要回源查数据库之类的我们需要限流,而查询缓存的请求可以根据实际情况进行限流处理;对于一些恶意的请求可能是通过小区宽带过来的,我们不能完全拒绝掉该IP,可以考虑将这些流量导到隔离的分组,比如进行慢速处理;还有一些列表页相关的应用,可以考虑对N页以后的请求做特殊处理,比如慢速处理或者根据实际调用量返回一些过期缓存数据。

 

托底数据

所谓托底数据即假设正常业务处理失败了,不能返回给用户一个503错误页,可以进行有损降级处理,比如根据场景返回一些快过期或已过期数据;另外可以进行部分有损服务而不是所有。比如请求一个用户推荐时,假设用户推荐没出来我们可以返回默认的推荐数据或者历史的推荐数据。还有如CDN缓存的,可以在出问题时返回历史数据;或者使用html5 localstorage存储;还可以通过两个分离的域名,一个失败后,自动调用另一个拿托底数据。

 

超时时间/重试

对于一个系统来说,超时时间是必须设置的,主要有如TCP连接//写超时时间、连接池超时时间,还有相关的重试时机/次数;对于一个网络服务,需要根据实际情况设置TCP连接//写超时时间,如果不设置很可能会在网络出问题时服务直接挂断,比如我们连接Redis都设置在150ms以内;还有如果使用Nginx,还需要考虑Nginx超时时间、upstream超时时间和业务超时时间,假设Nginx超时时间是5supstream超时时间是6s,而业务的超时时间是8s,那么假设业务处理了7s,那么upstream超时时间到了需要进行下一个upstream的重试,但是Nginx总的超时时间是5s,所以就无法重试了;连接池也需要设置获取连接的等待时间,如果不设置会有很多线程一直在等待,之前写自己实现连接池时,会去发现是否网络错误,如果网络错误就没必要等待连接了,而立即失败即可;还需要考虑服务失败重试时机,比如是立即重试,还是指数式重试;还有重试次数,是一次性重试三次还是指数式等待时间后进行一次次的重试;比如HttpClientDefaultHttpRequestRetryHandler)默认会立即进行三次重试。 

 

CDN回源

对于CDN减少回源的策略有非阻塞锁、爬虫不回源,返回历史数据、版本化等;对于版本化的意思是对于一些内容可以通过版本化机制设置更长的超时时间,而且固定URL顺序,这样相同的URL请求只要版本不变就会更有效的命中CDN数据;版本可以通过推送机制通知相关系统;比如评价数据的版本化,可以每隔几分钟推送变更了版本 的商品更新版本号。

 

监控和报警

对于监控我们一般监控CPU/内存/磁盘、应用实例存活、调用量/响应时间/可用率这些信息,可以根据系统状况设置一些参数的阀值,比如可用率(系统异常)小于80%则告警,这样可以及时发现系统问题并解决。

 

日志

对于日志我们一般需要经常收集记录和查看Nginx日志(访问日志、错误日志)、应用日志(业务日志、异常日志、OOM堆/堆栈日志)、监控日志(调用量、响应时间、可用率)、系统日志。Nginx访问日志可以记录IP、UA、Referer等信息以便发现恶意访问的一些线索,记录request_time、response_time来发现是否存在一些慢速请求;而Nginx错误日志查看是否存在超时或者一些服务出问题了;应用业务日志用来排查业务逻辑是否正确的,而应用异常日志用来发现什么时间、什么位置、哪个类的哪个方法出现了什么问题,以便故障排查,还有如Java应用OOM时的堆/堆栈日志也要存好了;监控日志用来记录服务的一些吞吐量和性能数据;另外需要经常查看系统日志,如之前遇到过应用大量timeout情况,查看dmsg发现存在nf_conntrack: table full, dropping packet,让运维把防火墙关掉即可。

 

其他

为了发现是哪台服务器出现了问题,我们都要在响应响应头记录服务器真实IP,这样出问题后,直接定位到哪台服务器出问题了;对于多机房业务尽量使用智能DNS,即一个机房的服务尽量调用一个机房的服务,减少跨机房调用;在没有进行Docker容器化之前,我们还可以减少跨交换机、跨机柜调用;对于整个系统我们无法保证整个系统不出现脏数据,所以需要提供刷脏数据的接口,以便出现问题时进行数据的更新或删除。

 

 

 

 

4
1
分享到:
评论

相关推荐

    简洁碎碎念轻微博系统 v1.1.rar

    简洁碎碎念轻微博系统V1.1 简洁碎碎念是一个简单的轻微博,在这里您可以记录和分享自己生活中的点滴瞬间。 支持 文字 图片 音乐 链接 视频的发布。 界面清晰简洁。 登陆用户名 密码 admin admin

    分分钟的碎碎念1

    这个问题描述的是一个典型的图论问题,具体来说是一个有向图的最长路径问题。在这个问题中,每个念头被视为图中的一个节点,而因果关系则表示为从一个节点到另一个节点的有向边。我们需要找到这个有向图中最长的路径...

    Hbase运维碎碎念.pptx

    Hbase 运维碎碎念 Hbase 运维碎碎念是 Hbase 运维实践经验的总结,涵盖了 Hbase 的基本概念、JAVA 基础知识、HDFS 和 HBase 的关系、JVM Heap 的管理、GC 机制等多方面的知识。 在 Hbase 运维碎碎念中,我们可以...

    关于抓包的碎碎念1

    关于抓包的碎碎念1

    eoo!碎碎念 简易博客系统 v0.2

    碎碎念 v0.2更新首先把[导入数据库.sql]导入到数据库中.然后修改[conn.php]里面的数据库连接信息。最后上传程序.后台登陆地址为admin 密码:admin更多修改请看下载文件内使用说明.txt。后台有修改密码功能。

    电子工程师碎碎念_90

    电子工程师碎碎念_90知识分享 本资源电子工程师碎碎念_90知识分享涵盖了大量电子工程领域的知识点,包括STM32系列微控制器、AltiumDesigner、LTspice、CubeIDE、电路设计、测量技术、信号处理、 Cache和MPU等方面。...

    eoo!碎碎念(留言日记) v0.2

    碎碎念功能:  集成了ubbeditor编辑器,  后台有添加,修改,删除功能,    这个碎碎念小程序,是我刚学习php写出来的,因为css不好,因此美化不是很好。  由于我是新手,所以代码可供PHP新手参考学习。  eoo!碎碎念...

    简洁碎碎念 轻微博系统 v1.1

    简洁碎碎念轻微博系统简洁碎碎念是一个简单的轻微博,在这里您可以记录和分享自己生活中的点滴瞬间。系统支持文字、图片、音乐、链接、视频的发布,界面清晰简洁。登陆用户名 admin密码 admin注:由于疏忽,导致一...

    我在斯坦福做科研的碎碎念 .rar

    【标题】:“我在斯坦福做科研的碎碎念”揭示了作者在世界顶级学府斯坦福大学进行科研工作的亲身经历和感悟,这是一份珍贵的第一手资料,对于想要了解人工智能领域,尤其是AIGC(人工智能生成内容)、CV(计算机视觉...

    简洁碎碎念轻微博系统 v1.1.zip

    简洁碎碎念轻微博系统V1.1 简洁碎碎念是一个简单的轻微博,在这里您可以记录和分享自己生活中的点滴瞬间。 支持 文字 图片 音乐 链接 视频的发布。 界面清晰简洁。 登陆用户名 密码 admin admin 注:由于疏忽,...

    [京东云发布《游戏白皮书》 全面进军游戏行业]京东进军养猪业.docx

    【京东云发布《游戏白皮书》 全面进军游戏行业】 京东云近期发布了《京东云游戏白皮书》,标志着其正式进入游戏行业。此举旨在利用自身的技术优势和丰富的云计算经验,为游戏企业提供全面的支持和服务。中国游戏...

    第一次学resnet,碎碎念

    ### 第一次学ResNet,碎碎念 #### 研究背景 在开始介绍ResNet之前,我们先简要回顾一下研究背景。2015年的ImageNet Large Scale Visual Recognition Challenge (ILSVRC)竞赛中,ResNet因其卓越的表现而获得了多项...

    我在斯坦福做科研的碎碎念 .pdf

    【标题】:“我在斯坦福做科研的碎碎念——AI领域的实验室文化和代码质量管理.pdf” 【描述】:本文是一位名叫Jazon的AI科研工作者在斯坦福大学进行研究时的经验分享,探讨了实验室文化,特别是周报制度,以及在...

    ASP实例开发源码—简洁碎碎念简单的轻微博系统v1.1.zip

    "简洁碎碎念"轻微博系统是一款基于ASP技术开发的轻微博平台,版本v1.1可能意味着这是一个经过改进和优化的版本,相对于早期版本可能包含了一些修复、增强功能和用户体验的提升。该系统可能注重简洁的界面设计和高效...

    基于ASP的简洁碎碎念简单的轻微博系统v1.1.zip

    【标题】"基于ASP的简洁碎碎念简单的轻微博系统v1.1"是一个轻量级的微博平台,采用经典的ASP(Active Server Pages)技术构建。ASP是微软开发的一种服务器端脚本环境,用于生成动态网页。这个轻微博系统旨在提供一个...

    SAP销售启用发出商品业务配置及操作手册-V1.0.docx

    SAP 销售启用发出商品业务配置及操作手册 本文档旨在介绍 SAP 系统的 SD 模块中的发出商品业务配置及操作手册。发出商品业务是指在销售过程中,企业对成本的记账具有两种不同的记账策略。 首先,企业可以在发出...

    ASP源码—简洁碎碎念简单的轻微博系统v1.1.zip

    总结来说,"ASP源码—简洁碎碎念简单的轻微博系统v1.1.zip"是一个基于ASP技术的轻微博平台源代码,它涵盖了用户管理、内容发布、互动交流等多个核心功能,为学习和研究ASP提供了一个实用的实例。通过深入研究,不仅...

    set.ipynb,个人博客这篇《【Python3】【碎碎念】集合类型,set和frozenset》的代码

    个人博客这篇《【Python3】【碎碎念】集合类型,set和frozenset》的代码

    简洁碎碎念简单的轻微博系统v1.1 -ASP源码.zip

    ASP源码,压缩包解压密码:www.cqlsoft.com

    京东软件开发面试内部推荐.docx

    京东软件开发面试与招聘主要涉及多个职位,包括Android应用开发工程师、iOS开发工程师、Java开发工程师、产品经理、交互设计师(UE)和视觉设计师(UI),以及前端开发工程师。这些职位的任职要求涵盖了广泛的IT技术...

Global site tag (gtag.js) - Google Analytics