高并发带来的问题|学习笔记

简介: 快速学习高并发带来的问题

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段高并发带来的问题】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/684/detail/11868


高并发带来的问题

 

一、高并发带来的问题

1. 了解服务容错之前,需要清楚当前代码出现的问题

2. 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,

但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。

图示讲解上述情况:

假设 A 服务里有两个方法,分别是 a1 和 a2,再假设 B 服务也有两个方法,分别是b1和b2,A 服务中的 a1 方法是需要调动 B 服务中的 b1 方法的

设计模型如下:

 image.png

当一个请求从外部进来,要访问A服务的a1方法时,a1方法就会调用B 服务,到此时出现了问题,由于B服务的自身原因或者网络原因,B 服务没有反应,请求遇到堵塞,线程无法释放,

如图所示:

image.png

大量请求进来,高并发情况出现了,大量请求进来都访问 a1方法,进而大量的请求会被堵塞,即大量的线程都会占用,如图所示:

image.png

对于外部中间件,线程数量具有一定的限制,以 tomact 为例,官方推荐最大线程在200—400之间,如果超过这个数值,tomact 就无法访问,假设是用 tomact 做的中间件,请求一直往a1上发,当发到400的时候,即占了400个线程,

如图所示:

image.png

现在选择访问a2方法,不访问a1方法,此时a2方法不调用错误的B服务,a2也已经无法访问,其中原因是a2无法从Tomact 中拿到线程了,即A服务中所有方法都不能进行访问,整个A服务在这瘫痪了。

3.模拟一个高并发的场景

⑴编写 java 代码

@RestController

@slf4j

public class OrderController2 {

@Autowired

Private Orderservice orderservice;

@Autowired

Private Orderservice orderservice;

用代码形式复述这个情况,首先找到订单微服务,找到 Order Controller,复制里面的代码,即20行@RestContronller 之后的代码,新建Order Controller2

把代码粘贴到新建的里面,现在做些调整,把名字改成Order Controller2,把15行和16行的public class OrderController2 删除

其次整理格式,在最后面加上},把不需要的东西删除,如下单后的 fegin 。

现模拟异常,第一个模拟中在31行中写上

Thread.sleep(millis:2001);把异常找出,在32行写上//模拟调用商品微服务需要2s的时间,接着在50行写上//为了不产生大量的额垃圾数据,暂时不保存订单入库,注意在20行最前面加上//,代码到这里完成

由于Tomact 线程过大,不便于模拟

⑵修改配置文件中tomcat的并发数,即在第4行调整成 max-threads:10,代码到此修改完毕,如下所示:

Server:

Port:8091

Tomcat:max-threads:  10  #tomcatd 的最大并发值修改为10,默认是200

接着启动微服务,选择 OrderApplication ,进而进行访问,得出代码没有问题.

现有订单微服务和商品微服务,缺少a2方法,打开Order Controller2,在最后打上如下代码:

//测试高并发

@RequestMapping("/order/message")

Public String message()  {

Return "测试高并发";

}

重新启动 Order Controller2,接着访问/order/message

⑶接下来使用压测工具,对请求进行压力测试

下载地址 https://jmeter.apache.org/.

需要下载安装包,通过访问可以获得最新安装包

①第一步:修改配置,并启动软件

进入bin目录,修改 jmeter.properties 文件中的语言支持为 language=zh_CN,然后点击 jmeter.bat 启动软件。

image.png

②第二步:添加线程组

image.png

③第三步:配置线程并发数

image.png

④第四步:添加 Http 取样

image.png

⑷访问 message 方法观察效果

添加察看结果树,可查看发送之后的结果

点击启动按钮,发送请求

image.png

⑸结论:

此时会发现,由于 order 方法囤积了大量请求,导致 message方法的访问出现了问题,这就是服务雪崩的雏形。

相关文章
|
5月前
|
消息中间件 缓存 监控
直呼内行!阿里大佬离职带出内网专属“高并发系统设计”学习笔记
我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。
|
消息中间件 缓存 监控
直呼内行!阿里大佬离职带出内网专属“高并发系统设计”学习笔记
我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。
|
SQL 缓存 NoSQL
课时4: Spring Boot2.5实战高并发缓存 Redis 与安全机制|学习笔记(三)
快速学习课时4: Spring Boot2.5实战高并发缓存 Redis 与安全机制
课时4: Spring Boot2.5实战高并发缓存 Redis 与安全机制|学习笔记(三)
|
存储 缓存 NoSQL
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
快速学习 Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
|
SQL 监控 AliSQL
MySQL 高并发场景实战|学习笔记(二)
快速学习 MySQL 高并发场景实战
230 0
MySQL 高并发场景实战|学习笔记(二)
|
SQL 缓存 运维
MySQL 高并发场景实战|学习笔记(一)
快速学习 MySQL 高并发场景实战
239 0
MySQL 高并发场景实战|学习笔记(一)
|
SQL 缓存 监控
MySQL 高并发场景实战|学习笔记
快速学习 MySQL 高并发场景实战。
276 0
MySQL 高并发场景实战|学习笔记
|
消息中间件 存储 缓存
Redis 的高并发实战:抢购系统 | 学习笔记
快速学习 Redis 的高并发实战:抢购系统
366 0
Redis 的高并发实战:抢购系统 | 学习笔记
|
缓存 NoSQL 算法
高并发分布式缓存 Redis6.0(二)|学习笔记
快速学习高并发分布式缓存 Redis6.0(二)
|
存储 缓存 NoSQL
高并发下限流(学习笔记)
为了解决高并发下,服务的可用,缓存,降级,限流。
高并发下限流(学习笔记)
下一篇
无影云桌面