V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
season8
V2EX  ›  程序员

学习 Vert.x 的一些疑惑

  •  
  •   season8 · 2022-04-27 19:02:50 +08:00 · 3718 次点击
    这是一个创建于 701 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近了解到 vert.x ,它主打 高性能,低占用,生态丰富 ,宣称可全面替代 Spring 。 作为以面 Spring-CRUD-Coder, 我啪的一声就站起来了:“恐怖如斯!!!”

    然后我学习了一下 vert.x 的官方文档和 demo 。由于初学,也没有实际应用,关于其低占用,高内存的优势没啥发言权。就说说实际写的感受和疑惑吧:

    1. 感觉自己在写 Node , 可能是 java 写多了,总感觉 node 可能性不如 java ,代码多了感觉很乱。
    2. Spring 有 bean 的管理,解耦,vert.x 自然是没有这些的,如果用到复杂的项目中,会不会整体结构很差?或者它就是适合做微服务?
    3. 国内使用 vert.x 的好像挺少的,gay-hub 上相关开源项目也不多,如何从 Spring 生态快速切换 vert.x 呢?
    第 1 条附言  ·  2022-04-28 14:56:44 +08:00
    恕我鲁莽,在把 vert.x 和 Sping 生态对比的时候,我下意识就产生了 “这是要对标 Spring” 的概念。
    感谢 @dreamlike 指出
    24 条回复    2022-04-28 17:40:35 +08:00
    az467
        1
    az467  
       2022-04-27 19:10:06 +08:00   ❤️ 5
    1. 是的,你没感觉错,Vert.x 最初叫 Node.x 。
    2/3. 所以,干脆用 Quarkus 算了。
    Oktfolio
        2
    Oktfolio  
       2022-04-27 22:06:43 +08:00   ❤️ 1
    加个 guice
    Leviathann
        3
    Leviathann  
       2022-04-27 22:31:15 +08:00   ❤️ 1
    vertx 是底层库 toolkit ,不是框架级的东西,在此之上有 quarkus
    micean
        4
    micean  
       2022-04-27 22:34:29 +08:00 via Android   ❤️ 1
    vertx 对于普通的 web 业务在性能上可能有一毛钱优势,玩 vertx 的关键在于理解他的 verticle 是怎么跑在两种线程池上又如何做到线程安全的,否则恐怕会把并发业务跑在单线程上(当年自己踩的坑)
    yazinnnn
        5
    yazinnnn  
       2022-04-27 22:47:24 +08:00   ❤️ 1
    vertx 通过 verticle 和 service proxy 解耦,quarkus 是这么实现的,spring 的生态几乎无法迁移到 vertx ,想迁移就迁到 quarkus 吧
    byte10
        6
    byte10  
       2022-04-27 22:49:21 +08:00   ❤️ 1
    vert.x 有几个特点,天生分布式,还有异步高性能,actor 模型,一般不会出现多线程安全问题 。这玩意适合写 IO 高性能中间件类的,比如 mqtt ,网关啊等,反正不太适合做业务类的。反正我很喜欢,等协程出来,vert.x 应该会得到大量的应用,否则异步编程劝退一大波小白。
    BBCCBB
        7
    BBCCBB  
       2022-04-27 22:49:25 +08:00   ❤️ 1
    加个 guice,
    理解下 netty 的 io+线程模型或者 nodejs 的 io 模型.
    sparky
        8
    sparky  
       2022-04-27 23:08:47 +08:00 via Android   ❤️ 1
    servicecombo 了解一下
    cubecube
        9
    cubecube  
       2022-04-28 00:07:22 +08:00
    @az467 Quarkus +1
    statumer
        10
    statumer  
       2022-04-28 00:34:05 +08:00 via iPhone   ❤️ 1
    vertx 是 Java 异步网络编程生态的代名词,但是 Java 没协程,所以编程体验其实还不如 js 。
    Cbdy
        11
    Cbdy  
       2022-04-28 00:36:22 +08:00 via Android   ❤️ 1
    Spring 可以和 Vert.x 一起用,不冲突
    WispZhan
        12
    WispZhan  
       2022-04-28 07:54:02 +08:00 via Android
    @Cbdy +1
    pigspy
        13
    pigspy  
       2022-04-28 08:43:27 +08:00
    @Cbdy 是的
    season8
        14
    season8  
    OP
       2022-04-28 09:17:26 +08:00
    @az467 感谢指路
    season8
        15
    season8  
    OP
       2022-04-28 09:19:13 +08:00
    @Oktfolio 学到了!
    season8
        16
    season8  
    OP
       2022-04-28 09:29:33 +08:00
    @micean verticle 这个刚接触是有点不好理解。
    @Leviathann 原来如此
    @yazinnnn 感谢指路,学的时候不可避免想到应用场景,就想改一个服务体验一下。
    season8
        17
    season8  
    OP
       2022-04-28 09:36:23 +08:00
    @Cbdy 一起使用的话, vert.x 和 spring 分工 会不会很杂? 主要是使用 vert.x 的 actor 模型吗?
    yazinnnn
        18
    yazinnnn  
       2022-04-28 11:37:45 +08:00   ❤️ 1
    spring 95%的场景都是 mvc,你直接用 vertx 的 future 的话连结果都拿不出来,想在同步模型中使用 vertx future 结果,要么转换成 reactor/mutiny/CompletionStage,然后 block/await,要么直接用 coroutine,runBlocking{ future.await }

    无论哪种都比较麻烦
    season8
        19
    season8  
    OP
       2022-04-28 11:46:52 +08:00
    @yazinnnn 😂让我想起了从 Nodejs 回调中取结果到同步响应的折磨了
    dreamlike
        20
    dreamlike  
       2022-04-28 12:37:01 +08:00 via Android
    "它主打 高性能,低占用,生态丰富 ,宣称可全面替代 Spring" 一直没这么说过,这两个是完全的不同的东西,spring 是大而全的框架生态,vertx 只是一个 io 工具包,提供了基于 netty 生态中的缺少的各种 client 。真正和 spring 对比的是 quarkus 。
    vertx 写 web 还是推荐使用 kotlin+协程去转异步风格到同步风格,java 语法对异步原生支持不太好,除非 loom release 而且把 continuation api 放出来,不然保持性能的前提下 java 转同步风格很困难
    关于你觉得写的起来和 node 一样 其实 node vertx gin axum 这种的组织结构都是这样的
    如果你想的话还是要遵循 vertical 这种部署模式以享受 actor 模型带来的天然分布式和线程封闭的优点,如果觉得有点困难也可以主动忽略掉这种特性
    iseki
        21
    iseki  
       2022-04-28 14:00:01 +08:00
    感觉这东西的竞争对手并不是 Spring···这不是一种东西啊
    season8
        22
    season8  
    OP
       2022-04-28 14:51:20 +08:00
    @dreamlike 确实没有这么说过,是我在看到它的生态后下意识脑补出来的,实在不应该。
    haah
        23
    haah  
       2022-04-28 16:53:42 +08:00
    “高性能,低占用,生态丰富”,这与编程语言有关系?
    LeegoYih
        24
    LeegoYih  
       2022-04-28 17:40:35 +08:00
    vert.x 和 Kotlin 一起用还挺香的,写过一个用户积分同步的服务,但是真的不适合复杂业务开发。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1001 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:47 · PVG 03:47 · LAX 12:47 · JFK 15:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.