• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
打工人丶
博客园    首页    新随笔    联系   管理    订阅  订阅

SpringCloud Alibaba-5-并发访问

微服务架构应用设计目的为了应对高并发环境!


1. 什么是并发,并行

并发:指在同一时间段内,多个任务或进程同时执行或交替执行的能力。


并行:指多个任务在同一时间段内同时执行,需要多个处理器或多核处理器来实现。


总的来说,并发更多地强调任务之间的交替执行,而并行更多地强调任务的同时执行。







2. 高并发带来的问题

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

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


什么是服务雪崩:由于服务与服务之间的依赖性,当高并发访问造成故障后,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩效应” 。







3. 利用Jmeter模拟高并发

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


3.1 将Jmeter改成中文

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




3.2 调整代码,以Springcloud Alibaba-4-Feign远程调用为例

server:
  port: 8091
  tomcat:
    threads:
      max: 10 #tomcat的最大并发值修改为10
@RestController
@RequestMapping("/order")
public class OrderController {

	@GetMapping("/test001")
	public String test001(){
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return "模拟高并发";
	}

	@GetMapping("/test002")
	public String test001(){
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return "模拟高并发22222";
	}
}



3.3 使用Jmeter模拟50个线程同时访问test001接口







4. 常见容错方案

为了解决上述情况以及服务雪崩等问题,我们就需要就要做好服务的容错。

容错:保护接口不被其他接口拖累,导致自己也出错。


容错方案:

  • 隔离机制
比如服务A内限制有100个线程, 现在服务A可能会调用服务B、服务C、服务D。

我们在服务A进行远程调用的时候,给不同的服务分配固定的线程,不会把所有线程都分配给某个微服务。
比如:B分配30个线程、C分配30个线程、D分配40个线程。

这样进行资源的隔离,保证即使下游某个服务挂了,也不至于把服务A的线程消耗完。

比如服务B挂了,这时候最多只会占用服务A的30个线程,服务A还有70个线程可以调用服务C和服务D。



  • 超时机制
在上游服务调用下游服务的时候,设置一个最大响应时间,如果超过这个时间,下游未作出反应,就断开请求,释放掉线程。



  • 限流机制
限制系统的输入和输出流量已达到保护系统的目的。为了保证系统的稳固运行,一旦达到的需要限制的阈值,就需要限制流量并采取少量措施以完成限制流量的目的。



  • 熔断机制
当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。

服务熔断一般有三种状态:

1. 熔断关闭状态(Closed)
服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制

2. 熔断开启状态(Open)
后续对该服务接口的调用不再经过网络,直接执行本地的fallback方法

3. 半熔断状态(Half-Open)
尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率。如果成功率达到预期,则说明服务已恢复,进入熔断关闭状态;如果成功率仍旧很低,则重新进入熔断开启状态。

posted @ 2024-03-04 09:41   不将就鸭  阅读(55)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3