至今,Java仍旧是用来构建Web应用的最流行编程语言之一 —— 但是它不得不面对诸如Go,Python和TypeScript等新语言的严峻挑战。
在Java世界里,Spring框架早已成为微服务开发的事实标准。通过使用诸如Spring Boot和Spring Data这样的库,Spring框架变得简单易用,并且大部分情况下,开发过程高效、无痛点。
然而,最近几年一些新框架不断涌现,声称可以降低Java应用的启动时间和内存占用。我最近一直在用Java去设计大型的微服务架构应用,在做设计之前,我查了哪些Java框架最合适微服务架构。
我主要关注在框架带来的易用性和资源管理。
Spring虽然是Java平台最流行的框架,但是从来没有人说它是最好的框架。在资源管理这方面,尤其是单进程所需要的性能开销这块,Spring差强人意。在应用服务器开发的旧时代,这不是一个大问题,因为进程实例数量不多。然而,随着微服务架构的崛起,我们会有大量的进程,这就使得Sring的这个问题更加突出 —— Christian Lusardi最近就这么说:
“我发现就算一个简单的Java应用,要是用了Spring Boot,那么至少需要1GB的内存才能把它运行起来。要是开发一个中间件,这样的开销还可以接受,但是对于微服务架构来说,太糟糕了!”
可选框架
Spring
Spring是在2003年面世的,以应对旧时代Java企业级开发的复杂性。Spring以依赖注入和面向切面编程为核心,演进成一个易用的web应用开发框架。Spring有着非常多的文档,广泛的使用率和数不清的库,让开发者高效的创建和维护应用程序,并且提供了扁平的学习曲线。
Spring通过反射在运行期间执行依赖注入。当一个Spring applicaiton启动时,在类路径(classpath)中,被标记的类(annotated classes)会被扫描到,由此,具体的类对象被实例化和被连接。
虽然这能提升应用程序的弹性,但是也使得应用程序的启动时间变慢,并且内存开销变大。同时,这个机制使得迁移到GraalVM变得非常困难,因为GraalVM不支持反射。
Micronaut
Micronaut[1]是一个现代化的微服务架构框架,由Grails框架的作者在2018年开发。
它提供了所有必要的工具来创造功能全面的微服务应用。同时,