当前位置:首页 > 数码 > Spring-Webflux-Boot-虚构线程性能逊色于-深化比较 (springboot)

Spring-Webflux-Boot-虚构线程性能逊色于-深化比较 (springboot)

admin7个月前 (04-15)数码31

早上看到一篇关于SpringBoot虚构线程和Webflux性能对比的文章,感觉还不错。内容较长,抓重点给大家引见一下这篇文章的外围内容,繁难大家极速浏览。

测试场景

作者驳回了一个尽或者贴近事实操作的场景:

测试技术

这里要对比的两个外围技术点是:

不论是Webflux还是虚构线程,这两个都是为了提供程序的高并发才干而生,那么谁更胜一筹呢?上方一同看看详细的测试。

测试环境

运转环境与工具

数据预备

mysql>descusers;+--------+--------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+--------+--------------+------+-----+---------+-------+|email|varchar(255)|NO|PRI|NULL|||first|varchar(255)|YES||NULL|||last|varchar(255)|YES||NULL|||city|varchar(255)|YES||NULL|||county|varchar(255)|YES||NULL|||age|int|YES||NULL||+--------+--------------+------+-----+---------+-------+6rowsinset(0.00sec)

测试代码

带虚构线程的SpringBoot程序

lication.properties性能文件:

server.port=3000spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=falsespring.datasource.username=testuserspring.datasource.pass=testpwdspring.jpa.hibernate.ddl-auto=updatespring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

User实体类(为了让文章让繁复一些,这里DD省略了getter和setter):

@Entity@Table(name="users")publicclassUser{@IdprivateStringemail;privateStringfirst;privateStringlast;privateStringcity;privateStringcounty;privateintage;}

运行主类:

@SpringBootApplicationpublicclassUserApplication{publicstaticvoidmain(String[]args){SpringApplication.run(UserApplication.class,args);}@BeanpublicProtocolHandlerCustomizer<?>protocolHandlerVirtualThreadExecutorCustomizer(){returnprotocolHandler->{protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());};}}

提供CRUD操作的UserRepository:

importorg.springframework.data.repository.CrudRepository;importcom.example.demo.User;publicinterfaceUserRepositoryextendsCrudRepository<User,String>{}

提供API接口的UserController类:

@RestControllerpublicclassUserController{@AutowiredUserRepositoryuserRepository;privateSignatureAlgorithmsa=SignatureAlgorithm.HS256;privateStringjwtSecret=System.getenv("JWT_SECRET");@GetMapping("/")publicUserhandleRequest(@RequestHeader(HttpHeaders.AUTHORIZATION)StringauthHdr){StringjwtString=authHdr.replace("Bearer","");Claimsclaims=Jwts.parser().setSigningKey(jwtSecret.getBytes()).parseClaimsJws(jwtString).getBody();Optional<User>user=userRepository.findById((String)claims.get("email"));returnuser.get();}}

SpringBootWebflux程序

application.properties性能文件:

server.port=3000spring.r2dbc.url=r2dbc:mysql://localhost:3306/testdbspring.r2dbc.username=dbserspring.r2dbc.password=dbpwd

User实体(这里DD也省略了结构函数、getter和setter):

publicclassUser{@IdprivateStringemail;privateStringfirst;privateStringlast;privateStringcity;privateStringcounty;privateintage;//省略了结构函数、getter、setter}

运行主类:

@EnableWebFlux@SpringBootApplicationpublicclassUserApplication{publicstaticvoidmain(String[]args){SpringApplication.run(UserApplication.class,args);}}

提供CRUD操作的UserRepository:

publicinterfaceUserRepositoryextendsR2dbcRepository<User,String>{}

提供依据id查用户的业务类UserService:

@ServicepublicclassUserService{@AutowiredUserRepositoryuserRepository;publicMono<User>findById(Stringid){returnuserRepository.findById(id);}}

提供API接口的UserController类:

@RestController@RequestMapping("/")publicclassUserController{@AutowiredUserServiceuserService;privateSignatureAlgorithmsa=SignatureAlgorithm.HS256;privateStringjwtSecret=System.getenv("JWT_SECRET");@GetMapping("/")@ResponseStatus(HttpStatus.OK)publicMono<User>getUserById(@RequestHeader(HttpHeaders.AUTHORIZATION)StringauthHdr){StringjwtString=authHdr.replace("Bearer","");Claimsclaims=Jwts.parser().setSigningKey(jwtSecret.getBytes()).parseClaimsJws(jwtString).getBody();returnuserService.findById((String)claims.get("email"));}}

测试结果

接上去是重头戏了,作者对两个技术打算都做了500w个恳求的测试,评价的不同并发衔接级别蕴含:50、100、300。

详细结果如下三张图:

50并发衔接

100并发衔接

300并发衔接

最后,作者得出论断:SpringBootWebflux要更优于带虚构线程的SpringBoot。

仿佛引入了虚构线程还不如曾经在用的Webflux?不知道大家能否有做过相关调研呢?假设有的话,欢迎在留言区一同聊聊~咱们创立了一个高品质的技术交换群,与低劣的人在一同,自己也会低劣起来,连忙点击加群,享用一同生长的快乐。


我的ide新建springboot项目怎么和网上的都不一样

选第一个没错的,第二个reactive web是 webflux 除了出现在教程中,其他使用者都是一些大公司的小团队或者小作坊团队在用,这个技术目前还比较新,目前很少有人使用,不过webflux带来的好处太多了估计很快就能大规模应用了吧

SpringCloud Alibaba组件

一.组件组成

二. 各个组件的介绍

2.1. Gateway

GateWay是在spring生态系统上构建的API网关服务,它是基于springboot2,spring5,和project Reactor等技术

springboot

2.1.2 作用:

2.1.3优势 性能方面比zuul要好,因为gateway是基于webFlux框架实现(底层是Reactor模式的netty)

2.1.4特点

2.1.5为什么选择gateway?

3.三大核心概念 路由:是构建网关的基本模块,他由id,目标url,一系列的断言和过滤器组成,如果断言为true则匹配该路由. 断言: 过滤: 过滤请求用的

4.工作流程 路由转发+ 过滤器链

二: config 分布式配置中心 1. 产生背景: 微服务项目中会根据业务来拆分成一个个子服务,而每个服务都会有自己的配置文件为了统一管理,所以configserver应运而生了. 2.概念: springcloud config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为 各个不同的微服务 应用的所有环境提供一个 中心化的外部配置 .

3.作用: 1. 为了集中式和动态的管理配置信息 2.运行期间动态调整配置不在需要在每个服务器上部署的机器上编写配置文件,服务会向配置中心统一拉取配置信息 3.动态加载配置信息,服务不用重启就可以感知配置的变化并应用配置 4.把配置信息以rs风格接口的形式暴露(post或curl命令) ps: 其实就相当于项目里的公共模块,一个意思

那我们如何使用它呢? 一. 首先config分为客户端和服务端. 二. 服务端其实就是我们常说的 分布式配置中心 ,它是一个独立的微服务应用, 可以用来连接配置服务器并为客户端提供获取配置信息,加密,解密信息等接口. 三. 而客户端是通过指定的配置中心来管理应用资源,这样有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理来访问配置内容. 四.分布式配置动态刷新问题 实现步骤: 里添加actuator监控 暴露监控端点 3. 启动类上加 @RefreshScope -XPOST(每次修改后必须执行这个,否则客户端还是读取不到最新的配置信息) 五.如果有多个客户端,难道每个微服务都要执行一次post命令? 可不可以只改一处,让其他的地方都生效 三. Bus 消息总线 1.概念 springcloudBus 是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了java的时间处理机制和消息中间件的功能

五 1.概念 nacos是一个更易于构建云原生应用的动态服务发现, 配置管理和服务管理平台. 2. 各个配置中心对比

六 . Sentinel 1.概念 把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性. 七. Seata 1. 概念 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案.

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: SpringBoot

“Spring-Webflux-Boot-虚构线程性能逊色于-深化比较 (springboot)” 的相关文章

概念-Spring-AOP-实现原理和应用-中的 (概念股股票)

概念-Spring-AOP-实现原理和应用-中的 (概念股股票)

什么是AOP? AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,其主要目的是将横切关注点(cross-cutting concern)从主要业务...

如何在Spring名目中顺利性能MP-MyBatis (如何在springer上下载文献)

如何在Spring名目中顺利性能MP-MyBatis (如何在springer上下载文献)

在Spring名目中集成MP,须要启动以下性能: 1.引入依赖:在名目标pom.xml文件中参与MP相关依赖,例如:```xml<dependency><groupId&g...

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

SpringBeanDefinition元信息定义形式 BeanDefinition是一个蕴含Bean元数据的对象。它形容了如何创立Bean实例、Bean属性的值以及Bean之间的依赖相关。...

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

简介 Spring 事务传播性是指在 Spring 环境中,当多个包含事务的方法嵌套调用时,每个事务方法如何处理事务上下文中的提交或回滚行为。 传播性行为 Spring 中定义了 7 种事...

极致便当与卓越容错-Topic-Spring-重试-成功-运用-Kafka (极致餐是什么意思)

极致便当与卓越容错-Topic-Spring-重试-成功-运用-Kafka (极致餐是什么意思)

概述 Kafka的弱小性能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条信息的值。可以智能或手动参与该值。假设咱们因为失误而不可处置信息并想重试,咱们可以选用...

Security权限控制框架入门指南-Spring (security)

Security权限控制框架入门指南-Spring (security)

在罕用的后盾治理系统中,通常都会有访问权限控制的需求,用于限度不同人员关于接口的访问才干,假设用户不具有指定的权限,则不能访问某些接口。 本文将用waynboot-mall名目举例,给大家引...

Boot-Spring-与-3.0-加速应用性能的完美融合-GraalVM (bootstrap)

Boot-Spring-与-3.0-加速应用性能的完美融合-GraalVM (bootstrap)

在 2023 年,SpringBoot 3.0 的发布标志着 Spring 框架对 GraalVM 的全面支持。此支持对 Spring 技术栈来说是一项重大补充。 GraalVM 概述...

6-Spring-提供的四种弱小工具-远程接口调用神器 (6sp日常使用还能用多久)

6-Spring-提供的四种弱小工具-远程接口调用神器 (6sp日常使用还能用多久)

1.引见 Spring6是一个十分弱小的框架,它提供了许多工具和接口来简化远程接口调用。其中,WebClient、RestTemplate、HTTPInterface和RestClient是...