Java 生态下想搞大流量下的 ws,是不是暂时只能 netty?

215 天前
 5261

最近项目想上直播和拍卖业务,自身流量也是比较大,想问下目前业界 ws 方案下是不是更推荐 netty 或者有没有其他可以参考的方案呢?

直播推流这快准备用阿里云的,直播上会用到 ws 的也就是评论,拍卖可能就是出价和评论

5161 次点击
所在节点    Java
40 条回复
x537196
215 天前
@5261 服务器成本是最低成本,人员和维护成本才是最高的
Gress
215 天前
用 JDK24 的虚拟线程,修复 synchronized 会挂起平台线程的问题了
anyele
215 天前
siweipancc
215 天前
虚拟线程的发布文档就有提到同步关键字还没适配,要切到对应的锁实现……
Karte
215 天前
@ychost 我知道, 所以前面增加了 JDK-21-LTS 版本
Karte
215 天前
@anyele 我知道
zoharSoul
215 天前
vertx 好用
SunDShuai9797
215 天前
@halov 引用别人的评价:issues 都关了怎么用?
aboutier
215 天前
java netty 没有替代品。
NizumaEiji
215 天前
spring -> mq -> nodejs/go
客户端发起请求走 spring 那套
服务端下发消息走 mq + nodejs/go 那一套
ebony0319
215 天前
@Karte 回复一下 8 楼 9 楼。
ebony0319
215 天前
@Karte 回复一下 8 楼 9 楼,
链接一: https://mp.weixin.qq.com/s/aoFo74SSXoaEIywu-pX-Ow
链接二: https://bugs.openjdk.org/browse/JDK-8338383
链接三: https://github.com/brettwooldridge/HikariCP/issues/2151#issuecomment-2475328765 这是我在实际使用虚拟线程,压测的效果,其中遇到了一个问题。是底层导致的,后面也修复了。
我从 21 出来就用在生产使用虚拟线程,很负责的说,这个是一个续 jdk8 后一个里程碑产品。jdk8 不是一个高并发语言。尤其在高并发情况下非常鸡肋,需要非常非常对的调优。
我说一个非常简单的场景:tomcat 承接爆发流量,在 jdk8 会遇到非常尴尬的问题,如果最小线程数设置太小,爆发流量来的时候线程创建需要时间,会造成大量流量超时。如果太大在空闲时候会浪费资源。
Karte
215 天前
@ebony0319 是的, VT 是 JDK 的里程碑. 在 HTTP 侧的确能够显著的提升响应能力. 不过在日常业务开发中也能使用, 不过需要比原有的 Thread 有更多的规范. 滥用 VT 可能并不会提升性能, 还会降低性能 (上下文 Continuation).

在没有修复 synchronize 情况下, 只建议在最贴近 IO 部分使用, 尽可能减少组建中 synchronized 所带来的影响 (没修复, 也就是 JDK-21-LTS).

在目前的 JDK-24 (non lts) 中修复了 synchronize PINED Thread 的问题, 但类似本地方法调用还是会存在 PIN. 在日常开发是可以使用了, 不过还是需要注意 VT 数量. 平台线程的数量是和计算机硬件资源对等的, 而 VT 数量则是和 JVM 内存对等的. VT 数量越多, JVM 内存占用越高, 直到 VT 任务结束释放了 Continuation.

总结:
1. 在 JDK-21-LTS 不太推荐使用. 如果使用请尽可能贴近 IO 部分.
2. JDK-21-LTS 也能使用, 前提是了解 VT 内部机制 (上下文切换, Continuation, 锁机制, 本地方法站调用).
3. 如果在业务中, 我的建议是等下一个版本的 LTS 上线. 想上也可以, 建议增加 -Djdk.tracePinnedThreads=full, 在遇到 PINNING 时会打印堆栈.
ebony0319
215 天前
@Karte 其实已经修复了。虚拟线程本来就是适合 IO 密集场景。那个问题其实解决非常简单,如果不放心: -XX:LockingMode=2 直接遇到 synchronize 就开启重锁。
https://imgur.com/a/403FceD
ebony0319
215 天前
@Karte 不好意思刚摁快了。这是我刚截图的现在生产一台 jdk21 的服务器,单机平均 QPS1000 ,https://imgur.com/a/403FceD , 这是最近 6 小时的 cpu 使用情况: https://imgur.com/4bmtPLS , 这是 6 小时内存的使用情况: https://imgur.com/YzN42Y5
Karte
215 天前
@ebony0319 的确不错👍.
conn457567
215 天前
反正不要用响应式编程,没有点经验写出来的代码真的非常坑。现在的虚拟线程还不成熟,反正我是不敢上生产环境的,有条件还是换语音用 go 或者 nodejs
qinxi
214 天前
@5261 java8 过期这么久都不升级的企业很难说换其他语言能更好吧。
5261
214 天前
@qinxi 以偏概全了!
5261
214 天前
@ebony0319
@Karte 看你们聊的这些内容都是针对 vt 原有发现的问题,这也是很多企业一直在生产升级的原因啊,至少让子弹多飞一会!

不过这 vt 新特性确实算是个里程碑了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1119504

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX