Code Ease Code Ease
  • 个人博客网站 (opens new window)
  • 好用的工具网站 (opens new window)
  • Java核心基础
  • 框架的艺术
  • 分布式与微服务
  • 开发经验大全
  • 设计模式
  • 版本新特性
数据库系列
大数据+AI
  • xxl-job
运维与Linux
  • 基于SpringBoot和BootStrap的论坛网址
  • 基于VuePress的个人博客网站
  • 基于SpringBoot开发的小功能
  • 做一个自己的IDEA插件
程序人生
关于我
  • 分类
  • 标签
  • 归档

神秘的鱼仔

你会累是因为你在走上坡路
  • 个人博客网站 (opens new window)
  • 好用的工具网站 (opens new window)
  • Java核心基础
  • 框架的艺术
  • 分布式与微服务
  • 开发经验大全
  • 设计模式
  • 版本新特性
数据库系列
大数据+AI
  • xxl-job
运维与Linux
  • 基于SpringBoot和BootStrap的论坛网址
  • 基于VuePress的个人博客网站
  • 基于SpringBoot开发的小功能
  • 做一个自己的IDEA插件
程序人生
关于我
  • 分类
  • 标签
  • 归档
服务器
  • Java核心基础

  • 框架的艺术

  • 分布式与微服务

  • 开发经验大全

    • 如何用Java写一个规范的http接口?
    • 一个成熟的Java项目如何优雅地处理异常
    • 项目经理最近感觉系统慢了,想知道整个系统每个方法的执行时间
    • 财务说账单上少了一分钱,老板看到代码气疯了
    • 浅析五种最常用的Java加密算法,以后可以直接拿来用了
    • 你真的会用idea进行debug吗?idea实用debug教程
    • 还不知道项目中怎么写日志?slf4j+log4j帮你搞定!
    • 如何在工作中快速上手Git
    • 号称"最强API文档工具"的Swagger到底厉害在哪
    • 分享工作一年后收藏的超好用Idea插件,工作效率直接翻倍
    • 怎样才能写出规范的好代码?
    • 如何上传自己的jar包到maven中央仓库(2021最新版)
    • 使用Optional更优雅地处理非空判断
    • 查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了
      • (一)概述
      • (二)事情回顾
      • (三)知识储备
      • (四)问题分析
      • (五)解决思路
      • (六)总结
    • 线上报了内存溢出异常,又不完全是内存溢出
  • 版本新特性

  • Java
  • 开发经验大全
CodeEase
2023-10-25
目录

查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了

作者:鱼仔
博客首页: codeease.top (opens new window)
公众号:Java鱼仔

# (一)概述

今天是国考出准考证的时间,刚好女朋友也要报名了这次考试,作为合格的男朋友当然是要在第一时间将准考证信息下载下来。结果到了半夜12点之后,整个官网一直处于无法连接、502、503、接口报错等各种问题。到了凌晨1点才把准考证下载下来。作为程序员自然要好好分析下这一个小时官网究竟发生了什么事情。

# (二)事情回顾

再12点准点网站开放的时候,已经很明显能感觉到页面的响应速度变得特别慢,接着出现了第一条错误信息:服务器繁忙,请您稍后再试:

随着几次刷新之后,进到了第一个系统页面,这里原本应该可以获取到的考试信息显示无法获取:

随着几次刷新后,页面也不见了,直接弹出nginx的502网关错误

接着还是nginx的报错,503 Service Temporarily Unavailable

最后就是在502和503之间来回跳跃,偶尔出来一次页面,整整一个小时。

# (三)知识储备

首先复习一下所有状态码表达。Http状态码是表示Http响应状态的数字代码,由三位数字组成,第一个数字代表了响应的总体状态。

1XX:指定客户端应相应的某些动作,代表请求已被接受,需要继续处理。一般来讲很少出现该响应。

2XX:代表请求成功被服务器接收,并响应。

3XX:代表需要客户端采取进一步的操作才能完成请求,这些状态码用来重定向。

4XX:表示客户端请求错误。代表了客户端看起来可能发生了错误,妨碍了服务器的处理。最常见的404状态码。

5XX:代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。

其中502表示作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

503表示由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。

# (四)问题分析

以今年国考的规模来看,12点准时进入网页的人是过万的,因此大流量是打垮系统的主要原因。其实经历过以前的12306抢票或者学校抢课的朋友们肯定都太熟悉这种感觉了,基本上系统一开放就是半死的状态。

首先进入网站之后最先出现的是“服务器繁忙,请您稍后尝试”这条报错,说明此时的请求已经从客户端经过nginx打到了服务器端。而服务器端是做了访问量的限流,因此返回了服务器繁忙这条信息。因为当时也没看接口响应的情况,大概猜测是如此。

接着出现了未获取到考试信息这种报错,这种情况很有可能是已经进入了接口内部,但是接口在查询后台数据库时由于并发量太大导致超时等原因无法匹配到数据库信息。

接着报错变成了502 Bad Gateway。很明显此时的报错已经从应用来到了Nginx代理机器上。最开始Nginx还能把请求反向代理给应用服务器,而随着程序执行时间超过了Nginx设定的等待时间,越来越多的请求被堵塞在Nginx上,直接导致502的产生。

然后就是503 Service Temporarily Unavailable,服务暂时不可用,说明此时请求带给nginx和服务器的压力已经达到了服务器负载的上限。当然也有可能是Nginx上做了单ip访问次数限制,这点只是猜测。

# (五)解决思路

这种大流量、高并发下解决系统卡死的最有效方案就是加资源,做降级,利用缓存,极致优化请求。以淘宝双十一为例,每年双十一是真正做到了将性能压榨到极限。淘宝在阿里云的支撑下实现了资源的可扩展性,因此到了双十一的时候首先要做的就是大量加服务器资源,既然一台服务器撑不住,那就五台、十台、一百台。

第二点是降级,将部分暂时可暂停的服务全部降级,你可以发现双十一高峰期的时候,阿里的很多功能是没法使用的,这些服务已经全部被暂时降级了。

第三点是利用缓存,参加双十一的商品信息在双十一之前的一段时间内是无法再修改的,原因就是这些数据将被合理地放进缓存中,并被提前预热。

第四点是机制优化缓存,这点主要是从代码层面,将耗时、多余的接口全部优化掉,做到不会产生无用的请求出来。

# (六)总结

当然,我能理解为什么抢课或者报名这种每年都会发生的系统卡顿现象不修复的原因,这些官网不会为了一次的高并发现象而提前准备百倍的服务器资源,毕竟用了一次之后这些资源就浪费了。再加上这些系统可能已经迭代了十几年,没人敢动里面的代码。但技术方面如果实现不了可以从产品角度缓解压力,比如以抢课为例,既然同一时间抢课服务器顶不住,那就规定年级,让每个年级在不同的时间点抢课。这样一下子服务器压力就变成了原来的1/4。

今天就聊到这里,我是鱼仔,我们下期再见。

上次更新: 2025/02/18, 11:30:08
使用Optional更优雅地处理非空判断
线上报了内存溢出异常,又不完全是内存溢出

← 使用Optional更优雅地处理非空判断 线上报了内存溢出异常,又不完全是内存溢出→

最近更新
01
AI大模型部署指南
02-18
02
半个月了,DeepSeek为什么还是服务不可用
02-13
03
Python3.9及3.10安装文档
01-23
更多文章>
Theme by Vdoing | Copyright © 2023-2025 备案图标 浙公网安备33021202002405 | 浙ICP备2023040452号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式