zuul的性能调优

news/2024/4/29 10:55:21/文章来源:https://blog.csdn.net/L1569850979/article/details/137138405

文章目录

    • zuul的性能调优
      • Zuul参数剖析
      • semaphore(信号量)
      • ribbon
      • hystrix
      • 高并发下常见Zuul异常
      • 熔断
    • zuul 1.x 与2.x的区别与总结

zuul的性能调优

在项目实践中,使用jemeter多线程并发访问微服务中的接口时候,在Zuul层出现异常、超时等,从而导致整个请求失败。经过实践,通过调整Zuul的参数、设计高可用架构等可提升TPS、QPS。

Zuul参数剖析

zuul下的routes节点可配置路由转发规则
设置全局ribbon


ribbon:ReadTimeout: 60000ConnectTimeout: 60000MaxAutoRetriesNextServer: 1MaxAutoRetries: 1  

设置单个路由

zuul:routes:echo:path:/ myusers / **serviceId:myusers-servicestripPrefix:truemyusers-service:ribbon:#负载NIWSServerListClassName:com.netflix.loadbalancer.ConfigurationBasedServerListlistOfServers:http://example1.com,http://example2.comConnectTimeout:1000 ReadTimeout:3000 MaxTotalHttpConnections:500 MaxConnectionsPerHost:100

如上面的配置,HTTP请求中满足 /myusers/** 规则转发到myuser-service服务。结合ribbon,可支持myusers-service多实例的动态负载。实际项目中可集成eureka或者consul等自动获取listOfServers(多实例服务hosts列表)。

semaphore(信号量)

在spring cloud Zuul中有2种对路由的隔离机制,其默认的是信号量(semaphore)对路由做隔离,默认值是100,当一个路由请求的信号量高于100就返回500。

zuul:semaphore:max-semaphores: 5000 #设置全部路由最大信号量routes:orchestration:service-id: orchestration
resource-manager:service-id: resource-managersemaphore:max-semaphores: 5000 #针对单个服务的路由设置最大信号量

设置信号量,可在Zuul节点下对所有路由统一设置信号量(semaphore)大小,在实际项目中推荐为每个服务设置不同的信号量(semaphore)。

ribbon

SpringCloud中ribbon提供负载均衡能力,实际项目中后端不同服务都是多实例,因此从Zuul路由到某个服务也需要支持负载均衡。

zuul:ribbon:OkToRetryOnAllOperations:true     #全部请求开启重试机制ReadTimeout: 6000                 #请求处理超时时间ConnectTimeout: 6000              #请求连接超时时间MaxTotalHttpConnections: 1000     #最大http连接数MaxConnectionsPerHost: 100        #每个host最大连接数MaxAutoRetries: 10                #最大重试次数MaxAutoRetriesNextServer: 10      #切换实例的重试次数eureka:enabled: true

在高并发或者后端服务由于网络等原因,导致请求某一瞬间发生故障,也许后端服务只是暂时不可达或者响应比较慢。通过调整响应时间以及重试次数提高请求成功率。

hystrix

hystrix(熔断),当通过服务网关(基于Zuul实现)调用后端服务时候,难免会出现网络、响应超时等情况。通过hystrix可断掉与后端服务的连接,防止拖垮网关服务器。也可以通过hystrix实现服务降级,当发生异常时候,通过fallback处理熔断(比如:返回一些用户能看懂的错误提示等)。

hystrix:threadpool:default:coreSize: 1000   #线程池数量command:default:execution:isolation:thread:timeoutInMilliseconds: 60000  #发生熔断的超时时间strategy: SEMAPHORE   #隔离策略semaphore:max-semaphores: 2000 #信号量大小

高并发下常见Zuul异常

在高并发下,针对不同的系统架构、业务场景。需要自己调整Zuul各组件参数来满足性能需求。我们在使用jemeter进行并发测试,发现Zuul(服务网关)层出现了一些异常信息,解决了这些异常信息,QPS,TPS都提高了不少。

  • 无法获取信号量(semaphore异常)

spring cloud zuul : could not acquire a semaphore for execution and no fallback
available.
无法获取信号量,系统默认每个路由的信号量为100,当后端一个实例且并发大于100就会经常出现这个异常信息

调优配置:

zuul:semaphore:max-semaphores: 5000 #可根据系统需要支持的并发数适当增加信号量的大小
  • 超时

异常信息:

connect time out…
当并发访问时,有些服务所在主机响应可能会比较慢,或者某些业务本身比较耗时(比如上传一个大文件的接口)。如果在Zuul层设置的超时时间小于足业务的耗时, 会导致正常的业务请求失败。

调优配置:

ribbon:ReadTimeout: 6000                 #请求处理超时时间ConnectTimeout: 6000              #请求连接时间根据业务可适当调大超时时间

熔断

异常信息:

short-circuited and no fallback available
并发访问时,后端某些服务发生熔断

调优配置:

hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 60000  #发生熔断的超时时间调整熔断超时时间,熔断时间太短,些耗时的业务部不能work熔断时太长,Zuul服务器可能会被拖垮。所以根据具体业务找到一个合适值。
ribbon:OkToRetryOnAllOperations:true     #全部请求开启重试机制ReadTimeout: 6000                 #请求处理超时时间ConnectTimeout: 6000              #请求连接超时时间MaxAutoRetries: 10                #最大重试次数调整重试次数,实际项目中由于网络或者资源不够,偶尔会出现后端服务不能访问,一次访问失败不能代表后端服务就挂了。因此开启重试机制,调整重试次数。在一定时间内,重试几次都失败,我们才认为后端服务挂了。

zuul 1.x 与2.x的区别与总结

1、1.x 同步阻塞,编程模型简单,社区成熟,通过调整参数能满足生产性能需求
2、2.x 异步非阻塞,相对编程模型复杂,刚出来也许还有些坑(bug),追求更好性能可以尝试

当高并发情况下,服务网关服务器(Zuul)可通过以下方法提高支持并发的能力。
1、调整Zuul组件参数
2、支持Zuul高可用,多实例
3、选择异步、非阻塞版本

转载:https://mp.weixin.qq.com/s/7S9zPM5lBDtOwtNJ5JOZyQ
https://blog.csdn.net/zhangzijiejiayou/article/details/101070379/

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

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

相关文章

广和通发布基于高通高算力芯片的具身智能机器人开发平台Fibot

3月29日,为助力机器人厂商客户快速复现及验证斯坦福Mobile ALOHA机器人的相关算法,广和通发布具身智能机器人开发平台Fibot。作为首款国产Mobile ALOHA机器人的升级配置版本,开发平台采用全向轮底盘设计、可拆卸式训练臂结构,赋予…

ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.19.1

一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理,它完全符合 Java Message Service (JMS) 2.0 规范,并支持多种通信协议,包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foun…

PDF转成二维码分享

在制作电子产品册之前,你需要思考以下几个问题:你的电子产品册是面向什么人群的?是宣传册、使用手册还是产品介绍册?明确目标与定位有助于我们更好地规划产品册的内容和风格。 一、收集素材与整理信息 在开始制作之前&#xff0c…

AI 异构计算机设计方案:902-基于6U VPX 高带宽PCIe的GPU AI 异构计算机

基于6U VPX 高带宽PCIe的GPU AI 异构计算机 一、产品概述 基于6U 6槽 VPX 高带宽PCIe的GPU AI 异构计算机以PCIe总线为架构,通过高带宽的PCIe互联,实现主控计算板、GPU AI板卡,FPGA接口板,存储板的PCIe高带宽互联访问&…

是德科技安捷伦 E5052B信号源分析仪

181/2461/8938产品概述: Keysight E5052B(安捷伦)信号源分析仪,10 MHz 至 7 GHz,具有许多增强的性能特性。它在表征 VCO 或其他类型的高频信号源以及高速数据通信系统中的时钟抖动评估方面提供了世界上最高的测量吞吐…

SpringBoot中的异步多线程使用及避坑指南

处理请求时需要考虑到系统的性能和响应速度。特别是在处理大量请求或者需要进行耗时操作时,采用异步多线程处理是一种常见的解决方案。Spring Boot提供了Async注解来支持异步方法调用,结合合适的线程池配置,可以很容易地实现异步多线程处理&a…

SQL Server 实验二:数据库视图的创建和使用

目录 第一关 相关知识 什么是表 操作数据表 创建数据表 插入数据 修改表结构 删除数据表 编程要求 第一关实验代码: 第二关 相关知识 视图是什么 视图的优缺点 视图的优点 视图的缺点 操作视图 创建视图 通过视图向基本表中插入数据 通过视图修改基本表的…

是德科技KEYSIGHT E5071C网络分析仪

181/2461/8938产品概述: Keysight E5071C(安捷伦)网络分析仪提供同类产品中最高的射频性能和最快的速度,并具有宽频率范围和多功能功能。E5071C 是制造和研发工程师评估频率范围高达 20 GHz 的射频元件和电路的理想解决方案。 有…

阿里云2024年优惠券(代金券)领取方法汇总

随着云计算技术的不断发展,阿里云作为国内领先的云服务提供商,为广大用户提供了高效、稳定的云服务。为了回馈用户,阿里云会定期发放各种优惠券,帮助用户节省上云成本。本文将为大家汇总阿里云2024年优惠券的领取方法,…

几种Yolo图像标注工具

Yolo可以识别的标注为txt 1.LabelImg 最常用,但经常莫名其妙地闪退,稳定性差 2.Yolo_Label 我都打算自己写程序了,网上找到了这个工具,看来早有人无法忍受现存的标记工具,自己动手写了个标注工具,比Label…

安防监控视频汇聚平台EasyCVR在银河麒麟V10系统中的启动异常及解决方法

安防监控视频平台EasyCVR具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台兼容性强,支持Windows系…

钡铼技术R40工业路由器赋能智慧电网实现远程智能采集数据

在当今的智能化时代,智慧电网作为能源互联网的重要基础设施,其建设和升级离不开先进的通信技术和设备的支持。钡铼技术R40工业路由器凭借其强大的数据传输能力、稳定可靠的性能以及卓越的环境适应性,在赋能智慧电网实现远程智能采集数据方面发…

1. Java概述

文章目录 1.Java语言概述1.1 Java介绍1.1.1 软件开发概述1.1.2 计算机语言1.1.3 Java 简史1.1.4 Java 技术体系平台1.1.5 Java在各领域的应用1.1.6 Java语言特点1.1.7 Java核心机制一-Java虚拟机1.1.8 Java核心机制二-垃圾回收1.1.9 Java开发工具 1.2 Java环境搭建1.2.1 JDK、J…

ElasticSearch理论指导

引子 本文致力于ElasticSearch理论体系构建,从基本概念和术语讲起,具体阐述了倒排索引和TransLog,接着讲了ElasticSearch的增删改查的流程和原理,最后讲了讲集群的选举和脑裂问题。 前言 大碗宽面-Kafka一本道万事通&#xff0…

设计模式-设配器模式

目录 🎊1.适配器模式介绍 🎃2.适配器类型 🎏3.接口适配器 🎐4.类的适配器 🎎5.优缺点 1.适配器模式介绍 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设…

自动化测试 —— Pytest fixture及conftest详解

前言 fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在,类似u…

2-HDFS常用命令及上传下载流程

HDFS NameNode 安全模式(safemode) 当NameNode被重启的时候,自动进入安全模式 在安全模式中,NameNode首先会触发edits_inprogress文件的滚动。滚动完成之后,更新fsimage文件 更新完成之后,NameNode会将fsimage文件中的元数据加…

利用云手机技术,开拓海外社交市场

近年来,随着科技的不断进步,云手机技术逐渐在海外社交营销领域崭露头角。其灵活性、成本效益和全球性特征使其成为海外社交营销的利器。那么,究竟云手机在海外社交营销中扮演了怎样的角色呢? 首先,云手机技术能够消除地…

腾讯云4核8G服务器价格,12M带宽一年646元,送3个月

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…

Eclipse的基本使用讲解(建项目,建包,建类,写代码(基本语法))新手入门必备

目录 一.介绍eclipse 二.操作Eclipse 1.选择工作空间 2.建项目,建包,建类 1.建项目(两种) 2.建包 3.建类 三.写代码(基本语法) 1.代码操作 2.代码规范 3.代码注释 一.介绍eclipse Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其…