quarkus分布式微服务落地思考及istio实验结果 weir 2021-11-05 11:11:43.0 quarkus 529 quarkus微服务落地探索: 概述:quarkus作为一个微服务框架19年以来一直非常活跃也是红帽再大力推进的,为 OpenJDK HotSpot 和 GraalVM 量身定制的 Kubernetes Native Java 堆栈,由同类最佳的 Java 库和标准制作而成。 单看这些可能不能马上吸引你的眼球,但我我要说,它启动速度快内存占用小,为kubernetes云原生量身打造的响应式异步高性能的java技术栈,涵盖web,数据库,消息,安全,各种云集成,微服务可观察性,序列化GRPC,兼容spring,有自己的模板引擎qute,有定时任务,发送邮件,devUI(工程可视化)等等,低层基于Eclipse Vert.x SmallRye Eclipse MicroProfile RESTEasy Netty Hibernate Apache Camel等等,你会有什么心态看待它。 可以这么说拿出任何一个技术 都是该领域的佼佼者甚至是天花板级别的存在,国内16年有人就在研究vert.x后来弄出来了个dubbo,基于vertx的Apache ServiceComb 18年交给apache开源,而国内的技术呢,随着springcloud的出现大面积普及,许多大厂互联网公司,不管公司业务量大小下上再说,什么中台,领域驱动思想都搬出来了,我看到的是对某些大厂的追捧并不觉得他们真的适合这些思想。 响应式编程被普及应该是在移动端,大概是在11年左右 vert.x出现估计是受node.js的启发,后来交给eclipse社区,现在是哪一年了十多年响应式编程没有在java服务端站稳脚跟,最近的动态表明大厂内部已经实现了反应式异步化的服务过渡,我想他们的服务肯定或多或少是要异步化的否则靠硬件来支撑高并发不是长久之计。 那这里就不得不谈golang了,说实话16年那时候就开始热门起来,我当时在昆明工作刚开始搭建微服务体系,国内除了dubbo2.5.3 springcloud都还没有普及,golang的出现对java服务端都不小的冲击,也有大一点的公司杀出了一条路,但是我还是想从整体来谈下技术发展受到各种因素的影响: 技术首先是要够先进比如golang的天然的性能优越性,这是它发展的重要基点,再比如rust挑战了c c++的地位还炫耀了一把,这都是技术本身的优越性在哪里,当然技术进步应该是自然的不然我们发展有什么用,总不能越发展越倒退吧。 其次就是社区为大量的开发者提供什么服务了,java社区就不说了,可以说是最成功的的社区了,还有一点就是中文化的程度,这一点我想在国内的都有同感,比如kubernetes docker等等这些。 在一点我比较在意的就是维护成本和受众群体,java的普及不光是历史的优越,社区各种库的出现,不管是spring的功劳,还是java思想比较让人能接受,这也导致了入门容易,小项目容易上手,降低了很多的开发难度,自然就会带来维护的难度也不是很高。 说会响应式编程,我觉得还是思想上的问题,和对底层的茫然,这点我必须多说几句,我目前对市面上的反应式基础框架底层怎么实现的,中间逻辑的脉路都是模棱两可的比如SmallRye,可以和spring的Project Reactor RX Java进行数据转换,是一个非常优秀的反应式编程库,但是学习成本也是非常的高,这和Project Reactor 一样阻碍了发展的脚本。 说回quarkus其实在国外是非常受欢迎的,落地企业也有但是分享出来的干货不多,国内社区也基本没有,对于单体应用使用quarkus问题已经不大了,我的博客就是用quarkus又重构了一下,感觉没有什么特别的技术难点, 但是在微服务领域挑战还是不小,这一点我也比较疑惑,quarkus打出来的旗号就云原生,可是在分布式微服务上面的例子非常少,可以说网上几乎没有quarkus微服务云原生落地的实例, 我们对比springcloud体系,比较关键的注册中心 网关目前是没有官方库的,可是对谷歌云亚马逊云的支持倒是很多库出来,微服务可观测性做的也可以,注册中心和网关不知道quarkus他们团队怎么考虑的, 我目前能想到的是注册中心可以没有,因为注册中心的目的是为微服务之间通讯来设计的但是对于quarkus来说已经有Eclipse MicroProfile,MicroProfile可以做到服务之间的调用,容错熔断限流都可以, 那么网关呢,这点上比较尴尬,如果我的项目不上kubernetes,网关我用什么?这个我也试过可以用springcloud gateway,如果上云可以用ingress,这个我也测试过没问题。 所以说方案考虑下来quarkus微服务还是可以上的而且非常原生,比如我刚测试通过的istio,大家可以看我上传的视频介绍(https://www.bilibili.com/video/BV1Vg411K7gV/) 总的来说技术成熟度取决于kubernetes生态的成熟度,只要kubernetes够成熟那上线的风险就越小,这套框架的成熟度就越高,所以我们回头看红帽的quarkus他们押宝是在云原生基本就是kubernetes生态。 RX Java编程 为 OpenJDK HotSpot 和 GraalVM 量身定制的 Kubernetes Native Java 堆栈