【IT老齐183】Java抗Go急先锋!?Quarkus很优秀,但我不会碰它!

作者: IT老齐分类: 计算机技术 发布时间: 2022-07-02 20:30:00 浏览:19354 次

【IT老齐183】Java抗Go急先锋!?Quarkus很优秀,但我不会碰它!

gzsmfltey:
老齐,你觉得在微服务架构下java有任何优势吗[思考] java本来就是以大型单体应用为主战场,微服务一出java优点全被缩小了,启动慢内存多的缺点全给放大了 我用啥语言都能写一个小巧的微服务给别人rpc,凭啥要用你傻大笨粗的java quarkus这些框架都只是在给java打补丁,纵观web历史,凡是需要靠打补丁死撑的技术都离死不远了,基础大厦不如别人,反复打补丁有啥用呢 感觉java药丸啊[思考]

【回复】跳出语言优劣的圈子,站在更高的角度,相信老弟就会有一番新的理解啦。 语言对于架构来说只是实现的工具,目前主流的应用场景Java仍然是首选,因为最成熟,风险也最小。 如果Go语言发展到Java这样的成熟度,相信我一样会臃肿
【回复】回复 @gzsmfltey :你去写个开源项目就知道了,一个成熟的开源项目没有几千,几百issue 根本不敢用,star数量 根本不靠谱,还有pr这些才是证明开源项目优质性。还有一个开源项目,参与维护的人数,也能决定项目是否优质。 一个优质项目,不是大牛今天想好几天就写出来了。这些需要数年时间,才可以成熟使用。 学编程语言嘛,不就是学个生态。 一个语言语法有啥可难的呢?
【回复】回复 @gzsmfltey :你要做微信开发,各种支付,我相信你第一时间去找库,二维码生成 网络服务器框架,你选择自己去写,还是直接选择成熟的库呢? 好比你做websocket聊天服务,你选择轻松让你集群扩容,稳定性好的开源,还是选择一个不成熟的,那时候上线天天加班,你就知道生态才是决定一个语言好与坏。 老板给你吩咐的任务,你很短时间完成,那就是效率。没有成熟的生态,你从头写个netty bug满天飞,还花了不少时间。
郑查磊:
这东西背书也是RedHat挺好的, 底层使用的 Eclipse Vert.x, 他和 SpringNative 最大的区别, 就是一开始的设计就是为了云原生, SpringBoot是在2.2X转变的, 例如 在看Spring Tips 就有注意到使用 Configuration proxyMethod = false Quarkus 对于组件内东西支持度非常好, 就算是对于普通的非Native应用也是AOT, Spring也有AOT支持 优势在于 Dev Cli 特别牛逼, 云原生支持高 Spring N 个等级, 全部都是异步调用, 对于同步的封装支持度也是极高

【回复】回复 @xiaoshitou_ : [doge]毕竟比较早搞云的。 不过JDK17有点劝退
【回复】回复 @畅旺9258 :[doge]得有过度周期的,不是一股脑就上的。
【回复】回复 @IT老齐 :支持力度应该很大, 毕竟 Spring 母公司 Pivotal 就是吃这口饭的, 毕竟云原生趋势在这里。
暴走土豆侠:
为了云原生放弃jit这一神级编译器,到底值不值。个人认为不要完全盲目跟着大厂走,jit运行时编译意味着有着无限的时间去优化字节码机器码执行效率。就为了k8s快速扩容提升启动速度而放弃jit值不值?下半年java虚拟线程也要出来了,内存占用又可以降一波。也原生支持高并发了,相信spring也会跟进。

【回复】而且绝大多数公司完全没有需要快速启动的需求。
【回复】虚拟线程和内存占用高没多大关系
【回复】回复 @空山木山空 :先了解下什么是云原生吧[笑哭]
xyzwps:
我们就在用quarkus。说实话,它因为直接使用了javaee的一些标准,所以想用出花来的话,很复杂。但是如果业务没有复杂到用复杂的方式解决的地步,那它的tutorial很简单,完全够用。如果spring玩熟了,这东西上手还是很容易的。

【回复】挖槽什么神仙公司啊,好像国内没多少落地到项目的,spring一统江湖
【回复】回复 @eonezhang :WMS,OMS,TSS,BMS~
【回复】我们公司也是quarkus落地,直接用于项目了,有QQ群可以一起交流吗?
杀鸡狂魔3:
云原生本来就是大势所趋,如果你java开发只关注怎么写代码,怎么写业务,你怎么成为架构师[doge],你公司业务达到一定程度,云原生是必经之路,然后到这一层你就会发现java在云原生化上的劣势,不过话说回来了,搞到这个程度,我应该已经财富自由了[doge]

史诗级脑洞Brainhole:
loom virtual thread 和结构化并发已经在路上了,后面还有value type,这才是抗go先锋[嫌弃]

【回复】回复 @我在山顶看星星 : loom下个lts21 就来了 说明java还是上心了
不加糖sfz:
基础的东西上周快速刷了一遍。下周开始看新的知识点了[微笑],齐哥牛逼

威尔weir:
真的对quarkus感兴趣的,我说的真正 不是你想了解,而是你已经有自己的认知基础上,可以直接进入我的频道或者直接加我,我非常乐意交流。其他的我不做评论。

【回复】我也对quarkus挺兴趣的!![星星眼]
智能人马克西:
我的学习已经跟不上发视频的速度了[笑哭]

PopBoBi:
老齐 你说的挺不错的,但是你讲的部分是还没有进行业务模块开发的前置情况,当一个项目部署上去后,你会发现jvm上,由于容器的线程运行情况,会导致持续性内存占用和额外开销,这时候quarkus的优势才会明显,其次native的那部分功能,我觉得是因为要交付或者想使用云原生的快速响应而存在的,这个是可以对标 go 的一种能力行为,保护企业私有产品的能力。这两种定义的边界是不一样的,但是你分析的真的很不错。我觉得正常来说,真的只要学会springboot就够了,但是如果想更节约企业成本的话,quarkus是一定要学会的,绝对可以在持续开发过程中节约成本,尤其是多模块的开发上得到很好的价值回馈,这点是不可否认的。当然,刚开始时要适应肯定是要有初始团队的损耗的,但是有一个已经懂的程序员or架构师,你会发现,没有难度的,成本很低,初级工作者(例如培训机构刚出来的小伙伴)最多1周就可以适应了

天秤燕:
不知道最后边的对比表格里spring boot用的是哪种方式,我觉得要和quarkus对比的话,就得用spring boot webflux,不然难以服众,毕竟quarkus采用netty加vertx,spring也有自己的netty加reactor为基础的webflux。我在工作中遇到的响应式编程最大的几点问题,一是生态不完整,没能达到真正的生产环境使用条件,响应式编程需要一套完全区别于命令式编程的类库,从服务器开始,到响应式式jdbc,甚至包括redis客户端,消息队列等等,全都要一套响应式的,到目前为止r2dbc(jdbc的响应式实现)还是个半成品,github式上已经几乎没有推进了;二是debug,debug难度很大,尤其是多线程环境下,线程堆栈中很难看到问题发生的根源在哪,reactor为此还专门编写了debug专用api,这就导致复杂业务条件下编程困难;三是由于线程使用方式的转变,由手动控制转为类库包装,原有的threadlocal类无法适用于反应式类库,必须编写新的基于thread- context的代码。这几点只是我的一点点总结,前路上遇到困难远比这些更多,先不说reactor类库的学习难度之大,要掌握好这个基础类库都不容易,而且这个类库还不够稳定,生产环境使用的话难以控制,更何况还有生态这个大的拦路虎,贸然推进这个技术,项目如果不能落地,无法向老板交代,估计只能被辞退。纵观目前形势,java体系生产环境还没有什么亟需解决的性能瓶颈,问题主要还是在数据库io等待上,较多的线程导致更多内存占用,等到虚拟线程技术GA后,这个问题将大大缓解。我觉得技术选型要从多方面入手:技术成熟度(稳定性),文档详细且实时,社区流行度,是否容易招聘到,等等,既要保证项目能够高质量落地,也要跟上技术潮流,基于k8s容器编排的云原生时代,弹性扩缩很重要,但是秒级甚至毫秒级启动我觉得不是非此不可的,这又不是serverless/函数服务,秒级启动,分钟级运行时间,甚至连垃圾回收都不需要,几分钟后就销毁。不知道我理解的对不,如有不对请多多包含。[尴尬]

喵喵_97:
还有一直不理解那些说docker 这些,这不都是运维掌握的吗? 作为开发不应该多关心业务设计,底层技术原理,编码实现这些? 一个服务启动速度,也在考虑,不知道你们公司业务已经到达啥程度了。

【回复】但是有一个问题,运维懂JAVA运行的一些参数吗?大概率还是要开发者写dockerprofile
akino512:
有一点不敢苟同,视频11:30讲到的异步响应式编程其实是为了解决磁盘写入、远程调用、网络延迟等外部因素导致的线程阻塞问题的。而spring官方也提供的响应式编程写法,且其繁杂度更甚。如果齐老师认为响应式编程不好,那么应该谈谈不使用异步响应式的前提下,该如何解决传统同步编程里遇到的线程阻塞的问题,而不是单纯的喜不喜欢。另外最好能谈谈vert.x这个异步框架。

【回复】回复 @eonezhang :响应式不是java的,应该算作一种设计模式。但是java确实没有异步代码同步化的语法糖,学Java的时候你会发现,Thread.yield()会唤起所有其他线程,而没有唤起指定线程的api,当然可能是操作系统层面的原因。我猜测实现这个语法糖的前提是要实现协程(coroutine)才行,比如go的goroutine、kotlin coroutine、windows fiber 等。kotlin可以兼容java,你可以找一下kotlin下的实现方法。另外java19好像要出Lightweight threads可以看看。个人理解,说的可能不对请见谅。
【回复】我从来没说过不喜欢她呀,我也很喜欢用响应式编程,只不过平时大家在开发的时候会用到它吗?
【回复】java为啥不抄.net的async await语法糖,非要搞响应式这么难用的东西
kjvaa:
[吃瓜] loom落地那才是和go齐平了,Quarkus只是框架,纯异步框架不是新鲜玩意scala有play,node有koa,这玩意完全异步化编程模型上对习惯spring那套那套得人上手会有不小的阻力,Graal让java不在需要jvm,native包小了不少,虽然仍然比纯native的大,启动也快了不少 vertx4数据库驱动已经支持没有像pg这种原生有异步io的数据库了,不用担心因为兼容带来的问题 Graal是支持反射的,但是需要提前处理

【回复】valhalla才是关键,重中之重
【回复】回复 @shyer :loom下个lts有望落地,valhalla真不知道啥时候了或许是下下lts[脱单doge]

科技猎手 quarkus 云计算 java go 编程开发 k8s 云原生 容器化 科技猎手计划2022第二季

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!