小编sch*_*ffe的帖子

与传统IO相比,Webflux + Netty NIO性能降低了约30倍

使用Spring Boot 2.0,Webflux 5.0.7和Netty 4.1.25时,我们在网络传输中遇到问题。我们想将序列化为JSON的100000个项目(大约10Mb的网络流量)传输到1个客户端。

NIO和传统IO之间的网络传输性能差异很大。测试结果如下:

Start reading 100000 from server in 5 iterations
Avg HTTP 283 ms
Avg stream 8130 ms
Run Code Online (Sandbox Code Playgroud)

目前,每秒请求数不是问题,但网络传输速度却是问题。我们已经读到,就网络速度而言,NIO可能会慢30%左右,但1/30倍是一个过大的杀伤力。

在客户端和服务器端进行采样时,我们注意到原因主要是在服务器端实现上。从下面的画面可以看出,服务器大部分时间都花在方法select()和上doWrite()

采样

端点代码本身:

@RestController
@RequestMapping(produces = {APPLICATION_JSON_VALUE, APPLICATION_STREAM_JSON_VALUE})
@Validated
public class StreamingController {

    @GetMapping("/instruments/{eodDate}")
    public Flux<TestItem> getInstruments(
            @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate eodDate,
            @RequestParam(required = false) Instant asOfTimestamp) {
        //Generate test data in memory
        List<TestItem> collect = IntStream.range(0, 100000)
             .mapToObj(i -> new TestItem.Builder().build())
             .collect(Collectors.toList());
        return Flux.fromIterable(collect);
    }
}
Run Code Online (Sandbox Code Playgroud)

我们正在为Netty使用Spring Boot配置,并且怀疑默认情况下Netty配置错误。我们正在寻找您的帮助。我会根据您的要求添加其他详细信息。 …

java spring netty spring-boot spring-webflux

4
推荐指数
1
解决办法
1750
查看次数

标签 统计

java ×1

netty ×1

spring ×1

spring-boot ×1

spring-webflux ×1