首页 > 其他分享 >FETCH JSON ERROR IN MIK-SSR-WEB

FETCH JSON ERROR IN MIK-SSR-WEB

时间:2024-04-29 11:22:51浏览次数:16  
标签:WEB MIK 请求 响应 menu Storage SSR GCP Cloud

背景

在日常巡检时发现,MIK-SSR-WEB 的 Grafana 监控中出现 500 的异常响应。

原因分析

1. Grafana监控

在监控面板中发现,503 响应不为 0

 

 

2. Skywalking l链路

在 Skywalking 中过滤错误响应,发现所以异常的 URL 均为 /mik-web-static/map/2c-prd/released-menu/michaels_menu_tree.json

 

在扩大查询范围时发现,此错误持续出现,在业务高峰期时存在响应时间过长的问题。偶发性出现 Socket 超时的问题。

 

3. ELK 日志

在 ELK 日志中发现,异常请求的日志为errorUrl https://storage.googleapis.com/mik-web-static/map/2c-prd/released-menu/michaels_menu_tree.json, status: 500; statusText: Internal Server Error;

 

4. GCP Logging

查询 MIK-WEB-STATIC 中的日志,确实存在 GCP Storage 返回 500 异常响应的日志,但是在日志中未发现具体错误原因。

 

5. GCP Logging 官方文档

由于为查询到具体错误原因,随去查询 GCP 的官方文档,排查错误原因。截取部分信息如下:

Cloud Storage 是一项可扩缩性极强的服务,利用自动扩缩技术来实现极高的请求速率。

负载重新分配时间

当存储桶的 IO 容量即将达到其上限时,Cloud Storage 通常会数分钟检测一次负载,并根据情况将负载重新分配到更多服务器上。因此,如果您存储桶的请求率增长过快,使 Cloud Storage 来不及执行这种重新分配,那么您可能会遇到临时性限制,具体而言,可能出现较长的延迟时间和较高的错误率。 如要避免出现此类延时和错误,请按照下文所述逐渐提高您存储桶的请求率。

 

如果您遇到任何问题(例如,延迟时间延长或错误率增加),请暂停提升操作或暂时降低请求率,以便为 Cloud Storage 提供更多时间来扩缩您的存储桶。在以下情况下,您应该使用指数退避算法重试您的请求

收到响应代码为 408429 的错误。

收到响应代码为 5xx 的错误。

至此,已经确认由于 GCP Logging 限流/限速导致 500 的异常响应。根据官方文档描述,由于 GCP Storage 为一个扩缩容极强的服务,故在扩容阶段未能响应超过限制的请求时将出现 408、429、5XX 的异常响应。

结合 GCP Logging 的时间和 ELK、Skywalking 的的时间线,确认此问题的根本原因是 GCP Storage 存在限流/限速 在扩容阶段响应异常。

改进方案

GCP Storage 文档提示:

通过提升请求速率、选择对象键和分配请求来避免存储桶出现临时性限制的最佳做法。

由于系统面临的突发流量较大,系统无法控制用户行为,所以无法通过逐步提升请求速率的方式进行优化。

为了保持较高的请求速率,请避免使用顺序名称。使用完全随机的对象名称可让您实现负载的最佳分配。如果您想要将序列号或时间戳用作对象名称的一部分,请通过在序列号或时间戳之前添加哈希值来为对象名称引入随机性。

官方建议通过随机名称的方式来实现负载均衡,在后续的优化时可以考虑添加随机前缀的方式来优化性能。

优化建议

  • MIK-SSR-WEB 主动监听 JSON 文件变化,当文件内容发生变化时再重新请求。

  • 将 JSON 文件、JS 文件、图片按功能分配到不同的 Bucket 中来避免限流/限速,同时再同一个 Bucket 中的文件名添加随机前缀实现负载均衡。

参考文档

请求率和访问分配准则  |  Cloud Storage  |  Google Cloud

标签:WEB,MIK,请求,响应,menu,Storage,SSR,GCP,Cloud
From: https://www.cnblogs.com/jerry-mengjie/p/18165277

相关文章

  • webapi动态创建后台任务(使用排队的后台任务)
    很多时候我们都会使用后台定时任务,但有些任务不需要定时执行,只需要请求到来时执行一次,比如请求服务器到某个地方同步数据,但请求不需要等数据同步完成再响应。这时候就可以使用排队的后台任务。基本原理是用一个队列保存任务委托,然后用一个后台定时任务依次执行队列中的委托。MSD......
  • Offline web technology for Mobile devices
    一、当前问题1、弱网或断网,当用户进入电梯或无网区,长时间白屏或无法显示页面2、正常网络,从点击app到显示首页文字图片,白屏时间大约7-9秒 二、原因分析1、从技术视角,分析一下网页启动的几个关键耗时阶段 2、没有做离线化技术,而手机端用户进入弱网与无网区......
  • WEBAPI传参及默认首页设置
    开发工具:VS2017创建WEBAPI,1.选择ASP.NETCoreWeb应用程序2.选择如下,HTTPS配置勾选去掉,暂不配置3.“属性”中调试默认界面及launchsettings.json 4.调试以后默认页面 5. ......
  • 帕鲁杯web mylove复现
    题目给了源码和phpinfo()<?phpclassa{publicfunction__get($a){$this->b->love();}}classb{publicfunction__destruct(){$tmp=$this->c->name;}publicfunction__wakeup(){$this->c="......
  • 应急响应-webshell查杀
    简介靶机账号密码rootxjwebshell1.黑客webshell里面的flagflag{xxxxx-xxxx-xxxx-xxxx-xxxx}2.黑客使用的什么工具的shellgithub地址的md5flag{md5}3.黑客隐藏shell的完整路径的md5flag{md5}注:/xxx/xxx/xxx/xxx/xxx.xxx4.黑客免杀马完整路径md5flag步骤#1.1......
  • web开发中特殊字符的对应值与转义字符
    原文链接:https://www.cnblogs.com/greatverve/archive/2011/07/18/web-char.htmlURL中的特殊字符URL中的特殊字符是不能再URL中直接传递的,需要进行编码。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。 例:要传递字符串“this%is#te=st&ok?+/......
  • .net core,.net 6使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问we
    1.使用soapCorenuget包 2.新建接口及实现2.1新建接口 2.2新建实现 2.3新建接收实体 2.4返回实体 3.接口注入使用  4.启动程序,直接访问对应的asmx地址  ......
  • Openwrt GitWeb Configuring(OpenwrtGitweb配置)
    首先安装好git环境,可以在网上参考Linux搭建git服务,我就不叙述了。安装gitwebopkgupdateopkginstallgit-gitweb安装完毕后访问 http://youhost/cgi-bin/gitweb.cgi 正常访问如下图编辑/www/cgi-bin/gitweb.cgi文件找到 $projectroot修改路径为你的gitroot目录,我......
  • new webpack 的 DefinePlugin 与 ProvidePlugin
    一、DefinePluginDefinePlugin允许创建一个在编译时可以配置的全局常量。这可能会对开发模式和生产模式的构建允许不同的行为非常有用。如果在开发构建中,而不在发布构建中执行日志记录,则可以使用全局常量来决定是否记录日志。这就是DefinePlugin的用处,设置它,就可以忘记开发环境......
  • web server apache tomcat11-24-Virtual Hosting and Tomcat
    前言整理这个官方翻译的系列,原因是网上大部分的tomcat版本比较旧,此版本为v11最新的版本。开源项目从零手写实现tomcatminicat别称【嗅虎】心有猛虎,轻嗅蔷薇。系列文章webserverapachetomcat11-01-官方文档入门介绍webserverapachetomcat11-02-setup启动web......