1

看到有个帖子在讨论 Java 异步 技术栈的问题... 由于今天台风不能送外卖,所以我也来分...

 2 years ago
source link: https://www.v2ex.com/t/791856
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  Java

看到有个帖子在讨论 Java 异步 技术栈的问题... 由于今天台风不能送外卖,所以我也来分析分析..

  yizmaoaa · 20 小时 14 分钟前 · 2167 次点击

看到有个帖子讨论 Java 目前实现全链路异步的帖子

目前全异步的技术栈大概有

1.SpringWebFlux+Reactor+R2DBC(很久没有了解过了,不知道 Spring 还有没有支持其他服务的一些 Client)

2.Vertx+Future/Vertx+RxJava/Vertx+Mutiny/Vertx+Coroutines

3.Micronaut

4.Quarkus

Vert.x 的 Future 以及 RxJava/Mutiny/Reactor 其实这几个都差不多,基本上在异步技术栈里都是为了解决 CallBack 的问题

主要还是 Jdk 本身的 Future 太拉稀,结果现在每家都自己搞了一套...也是挺蛋疼的

SpringWebFlux/Micronaut/Quarkus 算是比较上层的大杂烩框架了。三家写起来其实都差不多。差别在于 Micronaut/Quarkus 主打的无反射 /云原生。总体打包镜像与内存占用都是比较小的

目前 SpringWebFlux 与 Micronaut 都比较依赖于第三方的 Client 实现,如果第三方的 Client 实现是阻塞的,那么对于 Micronaut 与 WebFlux 来说实际上并不能提高多少吞吐的。

对于 Quarkus 来说,由于 Quarkus 算是在 Vert.x 上面在来了一层,所以 Vert.x 自己实现的各种 Client 在 Quarkus 中也是能用的。比 Micronaut 与 WebFlux 要稍微好那么一丢丢

不过 Micronaut 其实也能用 Vert.x 的 Client,但是效果貌似一般。主要我觉得可能还是 2 套 EventLoop 的问题,不能自上而下的用一套。

理论上 WebFlux 也能用 Vert.x 的各种 Client,但是我觉得效果应该和 Micronaut 差不多。我也不太确定到底麻烦不麻烦。

Micronaut 的 SqlClient 是支持 Vert.x 这边的(之前是我提交的)

另外 Vert.x 这边基本上所有的 Client 都是自己根据协议写的,所以基本上是可以做到全链路异步的。但是碰到官方没有支持到的 Client 那么做法其实与上面的一些东西差不多了

如果你是频次较高的去操作这些没有异步支持的 Client,那么吞吐量还是同样的不尽人意的。所以这也是在做技术选型的时候需要考虑的一点。

如果你对性能的要求没那么高,但是希望内存占用小那么可以选择 Quarkus/Micronaut 两位都支持同步的写法。

如果你对性能要求高,不排除异步的写法那么你可以选择 Vert.x

不管怎么来说或者你用那个,用 Java 写异步的代码都是有点蛋疼的。

相对来说 Vertx+Kotlin Coroutines 要舒服很多,切换到 Kt 的成本也相对的没那么大。

另外目前我是不推荐使用 SpringWebFlux 或者 Micronaut 的异步写法的。

在 TechempoerBenchmarks 最新一轮的性能测试中,这两位的表现并不出色

https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=db

如果你用了异步这种麻烦的写法,但是实际上并没有性能的提升,这是划不来的。

引入了异步写法的唯一目的就是希望在同样的服务器上能承受更大的吞吐。

如果引入了异步 /提高了代码的复杂性以及可维护性并没有换回来性能的提升,这是得不偿失的。

另外,异步所能解决的问题,同步同样能解决(只不过是加多少机器的问题...)

第 1 条附言  ·  2 小时 13 分钟前

啊~

如果有用 Vert.x/Quarkus/Micronaut/ 招人的可以联系我 0 0 用 Java/Kotlin 都可以

Base 上海

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK