WebFlux

  • 是一个类似于spring mvc的框架,优点是异步非阻塞。默认采用netty作为服务器。充分利用了多核cpu的硬件资源提高并发数
    • WebFlux 并不能使接口的响应时间缩短,它仅仅能够提升吞吐量和伸缩性。
    • webflux也可以使用 Spring MVC 注解,如 @Controller, 方便我们在两个 Web 框架中自由转换,也使用 Tomcat, Jetty等java应用服务器
    • webflux不支持**mysql**等非内存型数据库,(支持mongdb)
  • spring mvc是同步阻塞式,mvc更方便debug,测试,编写功能

    使用

  • webflux依赖里主要的是引入了reactor,该东西能实现多路分发的作用

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-webflux</artifactId>
    4. </dependency>
  • Mono是用于异步返回的类,还有一个Flux,二者区别在于Mono返回0或者一个对象。而Flux可以返回N个对象 ```java @GetMapping(“/user”) public Mono getUser() {

      User user = new User();
      user.setName("犬小哈");
      user.setDesc("欢迎关注我的公众号: 小哈学Java");
      return Mono.just(user);
    

    }

<a name="DRtBq"></a>
## 设置WebFlux返回模型

- 可以参照下这个,更具体地封装见ruoyi地gateway模块地authFilter
- 其实跟直接返回Mono或者Flux没啥区别,完全可以直接构建个通用响应对象然后塞进Mono中返回
```java
 public static Mono<Void> webFluxResponseWriter(ServerHttpResponse response, String contentType, HttpStatus status, Object value, int code)
    {
        response.setStatusCode(status);
        response.getHeaders().add(HttpHeaders.CONTENT_TYPE, contentType);
        R<?> result = R.fail(code, value.toString());
        DataBuffer dataBuffer = response.bufferFactory().wrap(JSON.toJSONString(result).getBytes());
        return response.writeWith(Mono.just(dataBuffer));
    }

网站的性能

WebFlux - 图1

性能指标

  • 响应时间:即接口的执行时间
  • 并发数:同时处理多个请求的数量
  • 吞吐量:单位时间内的请求处理数
  • 性能计数器:服务器的cpu,磁盘,网络,内存的使用情况

一般是依据上面的结果去得到的综合指标,综合指标有:

  • QPS(Query Per Second):服务器每秒可以执行的查询次数;
  • TPS(Transaction Per Second):服务器每秒处理的事务数(这里的一个事务可以理解为客户发出请求到收到服务器的过程);

    • QPS(TPS) = 并发数/平均响应时间
    • QPS 基本类似于 TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。

      测试方法

  • 负载测试:逐渐加大请求压力,直至饱和(如系统的缓存已经不够用了或者系统的响应时间已经不满足要求)

  • 压力测试:和负载测试有点像,不过是加大直至系统崩溃

    测试工具

  • 除了 LoadRunner 其他几款性能测试工具都是开源免费的。

    • Jmeter :Apache JMeter 是 JAVA 开发的性能测试工具
    • LoadRunner:一款商业的性能测试工具。
    • Galtling :一款基于Scala 开发的高性能服务器性能测试工具。
    • ab :全称为 Apache Bench 。Apache 旗下的一款测试工具,非常实用。
  • 前端工具:

    • fiddler:抓包工具,还能修改请求和响应的数据

      io密集型和cpu密集型

  • io密集型即更吃磁盘内存的操作。cpu密集型即更吃cpu,内存的操作

  • io密集型还分为磁盘IO密集型, 网络IO密集型
    • 微服务网关就是网络 IO 密集型,jdbc个人觉得是磁盘io密集