【端午安康,给大家讲个“网络”故事,深刻一下!】

牛马我🐴上周又挨锤了, 网络是不稳定的,博学多知的你可能知道,可能不知道。但假如没亲身经历过,知不知道都不深刻,牛马踩了个网络的坑,深刻了,这里分享下,

一个真相

无论是 移动端的4/5G网络,PC端的宽带有线网络 ,还是 云上的网络,都是不稳定的。

多年来,线上服务都是躲在大公司运维基建的后面,或依托于阿里云等服务厂商的网络架构后面,我习惯性的认为云上的网络是相对可靠的,基本上不会出什么大问题。直到这天,

两次事故

7天内连续2次,类似下面这种,在线ToC业务的 p99屏响突然被拉高,表现为

  • 体感上:ToC的在线服务突然有明显延迟,甚至部分超时,
  • 指标上:所有服务 p99 都在短时间,都被拉升,类似如图表现,

p99表现,图上是个示意,横轴是时间线,纵轴是延迟时间单位是秒。

p99是网络性能统计中的一个指标,表示99%的请求延迟或响应时间小于或等于该值,用于衡量系统在极端情况下的表现。

开始分析

部署上:这些服务各自独立,独立数据库,独立部署,都部署在某个k8s集群上,如下图。

依次排查,全流程,各指标先快速看一眼,

  • k8s 流量入口,无暴涨流量,正常,
  • 业务所在k8s集群,Prometheus监控,服务所在环境cpu/mem/io等正常,
  • 数据库,无大量慢查询,cpu/mem/io/连接数等正常,

整体指标快速一过,无明显异常,线索中断,思考一下,这个时候需要抓一条具体的返回延时大的请求来看下,看下请求具体耗时情况。按照这个思路一抓,还真抓到了,

APM立功

之前服务基建,服务有接入apm工具,这里选用的是elasticsearch - apm工具,会对请求进行抽样抓取,

看具体请求,类似下图这样,发现请求时间变长,有一大部分耗时在开始的某个函数上,这个函数再细看发现和redis的操作有关,redis去拿数据,有时特别慢,甚至超时。

(备注:为了加速查询,业务里使用redis,有个初始的数据会从redis里拿,拿到以后再进行后续流程)

一下范围就缩小了不少,这下好办了 ,再细查,看业务层和redis的相关日志,发现有报错,

罪魁祸首,网络波动

这一查,发现了p99升高的时候,redis连接有断开报错。 原来 业务层的出口(k8s集群的出口) 与 redis之间的连接串走的是公网,公网网络环境复杂,网络一波动,连接短时间内断开,流量就有异常,p99就会被拉升。

而我们这里 Redis 和 业务层 应该是走内网的,所以很快 ,解决方案,

走内网

切换完内网连接串后,p99正常,没有在出现 接口延时 ,指标上涨等问题 ,这个问题本身看起来解决了。但是事后,在想下,这个真的全怪网络波动吗? 甚至说 换成内网就一定没有网络问题吗?

是时候转变思路了

网络本身复杂,涉及软硬件模块众多,甚至与运营商有关,虽然可以说大部分时间,网络都是可靠的,但是这并不绝对。
所以,开发时的思路就要改变了,开发时要假设, 网络是不稳定的 ,针对这种不稳定,有不稳定的开发模式。

三点建议

  • 内网

尽量内网连接,针对这个问题,假设外网99%的时候是正常的,内网就是99.999%的概率是正常的,这里数据也许不准确,但是却说明了 优先使用内网连接的重要性常识性的东西,没注意踩坑了,才真正深刻了。

  • 容错

代码结构优化 , 数据库重连策略 ,连接数,连接间隔,一般默认就OK ,但是有的时候 需要根据你的业务,敏感程度,还是有调整和优化的必要性的,这个要具体问题 具体看。

同时建立好相应的指标,看实际开销和指标 能达多少,做好业务需求和运维成本能接收的均衡即可。

  • 大规模

当业务体量到达一定程度时,上面的提到各种优化,其实并不能解决的。就假如说你在北京的运营商都挂了,区域所在的网络整体都down了,而你的业务又是高敏感的,每分钟都垮垮掉钱,就问你怕不怕?这个时候就不得不提异地容灾了。异地容灾有比较成熟的方案 ,网络上也有比较多介绍的文章,这里就先不再展开。

结语

遇到坑,填上坑,通过填坑,反思一下,对一个真相更深刻,那么就今天 ,深刻了各位 哈哈哈哈哈。最后祝大家端午安康,轻松填坑,快速成长,升职加薪!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/694953.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python报错】已解决ImportError: cannot import name ‘triu’ from ‘scipy.linalg’

成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南 在Python编程中,尤其是在使用scipy这个科学计算库时,可能会遇到ImportError错误,提示无法从scipy.linalg模块中导入名为triu的函数。这个错误通…

深入JVM:线上内存泄漏问题诊断与处理

文章目录 深入JVM:线上内存泄漏问题诊断与处理一、序言二、内存泄漏概念三、内存泄漏环境模拟四、内存泄漏诊断与解决1、步骤一:获取堆内存快照文件(1)获取正在运行程序dump文件(2)获取已终止程序dump文件 …

HP Laptop 14s-fr1xxx原厂oem预装Win11系统ISO镜像下载

惠普星青春版14s-fr1xxx笔记本电脑原装出厂Windows11系统安装包,恢复出厂开箱状态一模一样 链接:https://pan.baidu.com/s/11Qe5XgCmH3emIVEpvoKclg?pwdm1qe 提取码:m1qe 适用型号:14s-fr1xxx 14s-fr0001AU、14s-fr0002AU、…

VMware Fusion 如何增加linux硬盘空间并成功挂载

文章目录 0. 前言1. 增加硬盘空间2. 硬盘分区2.1 查看硬盘2.2 分区2.3 格式化2.4 挂载 3. 参考 0. 前言 如果发现虚拟机分配的硬盘不足,需要增加硬盘空间。本文教给大家如何增加硬盘空间并成功挂载。 查看当前硬盘使用情况: df -h可以看到&#xff0c…

sqli-labs 靶场 less-7 第七关详解:OUTFILE注入与配置

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。Less 7 SQLI DUMB SERIES-7判断注入点 进入页面中,并输入数据查看结果。 发现空数据提…

求宇文玥在水下的浮力和赵丽颖捞他的时间

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 2024年汉东省在达康书记的带领下率先实现高考试点改革。为让更多的考生能提升对他们的理解和记忆,把电视剧的场景融入考试题目中。确保学生看一遍就懂,想…

debian12安装时分区方案

一、初次尝试 一共设置了4个分区,其中根目录/分区46G,swap分区10G(电脑内存为6G),/boot分区200M,/home分区55G。系统安装之后的实际占有情况为: 二、调整后情况 一共设置了4个分区&#xff0c…

基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析

原文链接:基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606139&idx4&snf94ec30bfb5fa7ac0320403d49db3b66&chksmfa821e9ccdf5978a44a9ba96f6e04a121c0bbf63beea0940b385011c0b…

Spring运维之boo项目表现层测试匹配响应执行状态响应体JSON和响应头

匹配响应执行状态 我们创建了测试环境 而且发送了虚拟的请求 我们接下来要进行验证 验证请求和预期值是否匹配 MVC结果匹配器 匹配上了 匹配失败 package com.example.demo;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Auto…

【网络教程】Iptables官方教程-学习笔记7-简单理解IPTABLES规则的作用流程

前面学习了IPTABLES的所有功能介绍后,一个Linux设备里的IPTABLES规则集是如何运行的,这里简单做个介绍。 在Linux设备里输入"iptables -nvl",得到该设备的所有防火墙规则,得到的结果中可以看到这个设备防火墙里所有的链以及链里的…

2024年CKA模拟系统制作 | step-by-step | 1、基础环境准备

目录 一、软件环境 二、虚拟网络环境准备 1、编辑虚拟网络 2、网络设置 三、新建虚拟主机 1、新建目录 2、新建虚拟主机 四、系统安装 1、装载系统镜像 2、开启虚拟机 3、选择语言 4、键盘选择 5、网络配置 6、代理设置 7、设置软件源 8、存储设置 9、名称设置 …

计算机网络 —— 网络层 (路由协议)

计算机网络 —— 网络层 (路由协议) 什么是路由协议内部网关协议RIP关键特性 OSPF主要特点 外部网关协议BGP关键特性 我们今天来看路由协议: 什么是路由协议 路由协议是网络设备(主要是路由器)用来决定数据包在网络中…

【爬虫实战项目一】Python爬取豆瓣电影榜单数据

目录 一、环境准备 二、编写代码 2.1 分页分析 2.2 编码 一、环境准备 安装requests和lxml pip install requests pip install lxml 二、编写代码 2.1 分页分析 编写代码前我们先看看榜单的url 我们假如要爬取五页的数据,那么五个url分别是: htt…

工业互联网数字中台建设方案(ppt原件)

工业互联网数字中台解决方案旨在为企业提供全面、高效的数据驱动能力。该方案主要包括以下几个核心部分: 数据中台:作为核心,数据中台负责汇聚、整合、提纯和加工各类工业数据,实现数据资产的标准化、模型化和模块化。通过提供API…

cmake使用make和Ninja构建对比

前提 make和Ninja是两个常见的构建工具,在网上查阅了一些资料,说是Ninja比make构建速度要快很多。但是具体不知道快多少,所以趁着这次编译clang的机会,分享下它们在时间方面差多少。 步骤 下载llvm 参考llvm官网,这…

linux系统的网络工具和命令非常多,应该如何学习可以快速提高?

目录 一、linux的网络命令有多少? (一)网络配置 (二)网络监控 (三)网络诊断 (四)网络通信 (五)网络文件传输 (六)网…

java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程

java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程 家政上门服务系统的优势 服务质量更稳定:由专业的家政人员提供服务,经过严格的培训和筛选。 价格更透明:采用套餐式收费&…

Valgo,类型安全,表达能⼒强的go验证器

valgo 是一个为 Go 语言设计的类型安全、表达性强且可扩展的验证库。该库的特点包括: github.com/cohesivestack/valgo 类型安全:利用 Go 语言的泛型特性(从 Go 1.18 版本开始支持),确保验证逻辑的类型安全。表达性&a…

UFS协议入门-分层结构

写在前面:本文参考UFS jedec3.1,本文思维导图如下 1. 分层概述 UFS协议分为3层,从上至下分别是:应用层(UAP),传输层(UTP),互联层(UIC),具体结构如下图所示。 2.1 应用层 在应用层(UAP)中,包括:UFS指令集(UCS),设备管理器(Device Manager),任务管理器(Task Manager…

线性代数|机器学习-P10最小二乘法的四种方案

文章目录 1. 概述2. SVD奇异值分解3. 最小二乘法方程解4. 最小二乘法图像解释5. Gram-Schmidt 1. 概述 当我们需要根据一堆数据点去拟合出一条近似的直线的时候,就会用到 最小二乘法 .根据矩阵A的情况,有如下四种方法 在r n m 时,SVD奇异…